系统调优
Scanned 2/12/2026
npx -y skills add chaterm/terminal-skills --skill tuning --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Tuning?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/chaterm-tuning)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: tuning
description: 系统调优
version: 1.0.0
author: terminal-skills
tags: [performance, tuning, sysctl, kernel, optimization]
---
# 系统调优
## 概述
内核参数、文件系统、网络优化技能。
## 内核参数调优
### 内存管理
```bash
# /etc/sysctl.d/99-memory.conf
# 减少交换倾向
vm.swappiness = 10
# 脏页刷新
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5
# 内存过量提交
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
# 最大内存映射数
vm.max_map_count = 262144
# 应用
sysctl -p /etc/sysctl.d/99-memory.conf
```
### 网络调优
```bash
# /etc/sysctl.d/99-network.conf
# TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 连接队列
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 65535
# 端口范围
net.ipv4.ip_local_port_range = 1024 65535
# Keep-Alive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
```
### 文件系统
```bash
# /etc/sysctl.d/99-fs.conf
# 文件句柄
fs.file-max = 2097152
fs.nr_open = 2097152
# inotify
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512
```
## 文件描述符限制
### ulimit 配置
```bash
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
root soft nofile 65535
root hard nofile 65535
```
### systemd 服务
```bash
# /etc/systemd/system/myapp.service.d/limits.conf
[Service]
LimitNOFILE=65535
LimitNPROC=65535
```
## 磁盘 IO 调优
### IO 调度器
```bash
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 设置调度器
echo deadline > /sys/block/sda/queue/scheduler
echo noop > /sys/block/sda/queue/scheduler # SSD
echo mq-deadline > /sys/block/nvme0n1/queue/scheduler
# 永久设置 (GRUB)
GRUB_CMDLINE_LINUX="elevator=deadline"
```
### 预读设置
```bash
# 查看预读
blockdev --getra /dev/sda
# 设置预读 (KB)
blockdev --setra 4096 /dev/sda
```
### 挂载选项
```bash
# /etc/fstab
# SSD 优化
/dev/sda1 /data ext4 defaults,noatime,nodiratime,discard 0 2
# 数据库优化
/dev/sdb1 /mysql ext4 defaults,noatime,barrier=0 0 2
```
## CPU 调优
### CPU 频率
```bash
# 查看调速器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 设置性能模式
cpupower frequency-set -g performance
# 或直接设置
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
```
### NUMA 优化
```bash
# 查看 NUMA 信息
numactl --hardware
numastat
# 绑定 NUMA 节点
numactl --cpunodebind=0 --membind=0 ./program
# 查看进程 NUMA 分布
numastat -p PID
```
### CPU 亲和性
```bash
# 查看亲和性
taskset -p PID
# 设置亲和性
taskset -c 0-3 ./program
taskset -pc 0-3 PID
```
## 常见场景
### 场景 1:Web 服务器优化
```bash
# /etc/sysctl.d/99-web.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 65535
# 文件描述符
fs.file-max = 2097152
```
### 场景 2:数据库服务器优化
```bash
# /etc/sysctl.d/99-database.conf
vm.swappiness = 1
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.overcommit_memory = 1
# 大页内存
vm.nr_hugepages = 1024
```
### 场景 3:高并发优化
```bash
#!/bin/bash
# 一键优化脚本
# 网络
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# 文件
sysctl -w fs.file-max=2097152
# 内存
sysctl -w vm.swappiness=10
```
## 调优检查
| 项目 | 检查命令 |
|------|----------|
| 文件限制 | ulimit -n |
| 网络参数 | sysctl -a \| grep net |
| 内存参数 | sysctl -a \| grep vm |
| IO 调度 | cat /sys/block/*/queue/scheduler |
## 故障排查
```bash
# 检查当前限制
cat /proc/PID/limits
# 检查打开文件数
ls /proc/PID/fd | wc -l
lsof -p PID | wc -l
# 检查网络连接
ss -s
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!