Linux系统性能调优:从CPU到IO全面优化

周算法

· 阅读 1333

分享
Linux性能调优

Linux系统性能调优:从CPU到IO全面优化

当服务器出现性能瓶颈时,很多运维人员的第一反应是"加配置"。但在加配置之前,先搞清楚瓶颈到底在哪——是CPU、内存、磁盘IO还是网络?本文介绍Linux性能调优的系统方法论和常用工具。

CPU调优

使用 top 查看CPU整体使用情况:us(用户态)、sy(内核态)、wa(IO等待)、st(被steal的时间)。如果 sy 过高,可能是系统调用太频繁或锁竞争。如果 wa 过高,说明IO是瓶颈。

使用 pidstat -u 1 查看每个进程的CPU使用情况。使用 perf top 查看内核热点函数。对于Java应用,使用 jstack 查看线程状态,找出CPU密集型线程在做什么。

CPU调优手段:调整进程优先级(nice/renice)、绑定CPU亲和性(taskset)、调整内核调度策略。对于高并发服务,增大文件描述符限制(ulimit -n)。

内存调优

使用 free -h 查看内存使用。关注 available 而非 free(Linux会缓存文件,free看起来少但available可能很充足)。使用 vmstat 1 查看swap使用情况,如果si/so持续大于0,说明内存不足在频繁换页。

调整内核参数:vm.swappiness(控制swap使用倾向,服务器建议设为10)、vm.dirty_ratio(脏页占内存比例,调大可提升写入性能)、vm.overcommit_memory(内存超分配策略,Redis要求设为1)。

磁盘IO调优

使用 iostat -x 1 查看磁盘IO。%util 接近100%说明磁盘饱和。await 是IO请求的平均等待时间,机械盘应低于20ms,SSD应低于5ms。

IO调优手段:调整IO调度器(SSD用noop,机械盘用deadline)、增大读预读量(blockdev --setra)、将随机IO改为顺序IO(如日志追加写入)、使用tmpfs存放临时文件。

网络调优

使用 ss -s 查看网络统计。netstat -antp | awk '{print $6}' | sort | uniq -c 查看连接状态分布。TIME_WAIT过多可以调整 net.ipv4.tcp_tw_reuse=1。增大TCP缓冲区 net.core.rmem_maxnet.core.wmem_max