核心原则
监控先行:先分析瓶颈,再针对性优化
逐步调整:避免一次性修改过多参数。
稳定性优先:优化后需充分测试。
性能监控工具
top/htop: 实时查看cpu占用、MEM占用、LOAD AVERAGE系统负载
vmstat:r:等待CPU的进程数 >CPU表示过载
si/so:Swap交换频率,频繁交换说明内存不足
iostat 查看磁盘I/O性能
netstat/ss 查看tcp连接数
sar -u 1 3 查看CPU使用率,每秒一次共三次
sar -r 查看内存使用历史
dstat -cmsn 综合监控CPU、内存、网络、磁盘
CPU优化
调整进程优先级
nice -n 19 ./script.sh # 启动低优先级进程
renice 19 -p PID # 修改运行中进程的优先级
绑定CPU核心(减少上下文切换)
taskset -c 0,1 ./program # 绑定到CPU0和CPU1
内核参数调整
kernel.sched_child_runs_first = 1 # 子进程优先调度
内存优化
调整Swap使用策略
# 修改/etc/sysctl.conf
vm.swappiness = 10 # 降低Swap使用倾向(0-100,默认60)
vm.vfs_cache_pressure = 50 # 减少inode缓存回收频率
禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
磁盘I/O优化
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 临时修改为deadline调度器(适用于SSD)
echo deadline > /sys/block/sda/queue/scheduler
优化文件系统
# 挂载参数:noatime(不记录访问时间), data=writeback
UUID=xxx / ext4 defaults,noatime,data=writeback 0 1
网络优化
TCP参数调优
net.core.somaxconn = 4096 # 提高连接队列长度
net.ipv4.tcp_fin_timeout = 30 # 缩短TIME_WAIT超时
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT连接
限制连接数
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j DROP
资源限制优化
ulimit
修改用户级限制
# 编辑/etc/security/limits.conf
* soft nofile 65535 # 文件描述符软限制
* hard nofile 65535 # 硬限制
cgroups(控制组)
限制进程资源
# 创建cgroup(需安装cgroup-tools)
cgcreate -g cpu,memory:/my_group
# 限制CPU使用为50%
cgset -r cpu.cfs_period_us=100000 -r cpu.cfs_quota_us=50000 my_group
# 限制内存为1GB
cgset -r memory.limit_in_bytes=1G my_group
# 将进程加入cgroup
cgexec -g cpu,memory:my_group ./program
安全与注意事项
备份配置文件:修改前备份 /etc/sysctl.conf
、/etc/security/limits.conf
。
灰度测试:先在测试环境验证参数调整效果。
避免过度优化:如无明确瓶颈,优先使用默认配置。
优化配置原则
精准定位瓶颈:
使用 perf top
分析CPU热点。
通过 dmesg
检查内核OOM或I/O错误日志。
层级化调整:
层级 | 工具/方法 |
---|---|
应用层 | 代码优化、连接池配置 |
运行时 | JVM参数、Golang GC策略 |
操作系统 | sysctl、cgroups、ulimit |
硬件/驱动 | 升级SSD、调整RAID级别 |
自动化监控:
# 使用Prometheus + Grafana监控模板
- node_exporter 采集系统指标
- alertmanager 配置CPU/内存阈值告警
常用命令速查表
命令 | 作用 |
---|---|
sar -u 1 3 |
查看CPU使用率 |
vmstat 1 |
监控内存和进程队列 |
iostat -xz 1 |
分析磁盘I/O瓶颈 |
ss -s |
统计TCP连接状态 |