为什么要进行Linux系统调优?

服务器是业务的核心,一旦性能出现问题,轻则影响用户体验,重则导致服务中断。Linux系统调优的目标就是通过合理配置和优化,让服务器跑得更快、更稳,资源利用率更高。想象一下:如果你的网站突然变慢,用户访问卡顿,可能就是服务器“吃不消”了——这时候就需要我们用调优手段“对症下药”。

常见性能瓶颈及定位工具

服务器性能问题通常集中在几个方面:CPU、内存、磁盘I/O、网络。要优化,得先找到“瓶颈”在哪里。以下是最基础的诊断工具:

1. 查看系统整体状态:dstat(可选)

如果服务器安装了dstat(需先安装,如yum install dstat),它能综合展示CPU、内存、磁盘、网络的实时数据:

dstat 1  # 每秒更新一次,按Ctrl+C退出

重点看:
- CPU%usr(用户进程占用)、%sys(内核进程占用)、%idle(空闲率)
- 内存used(已用)、buff/cache(缓存/缓冲,越大越好)
- 磁盘read/write(读写速度)、%util(设备忙碌率,>80%则可能瓶颈)
- 网络recv/send(收发速率)

2. 查看CPU与负载:top

如果没装dstattop是最常用的实时监控工具:

top

关键指标:
- Load Average(负载均衡):第一行的三个数字(1分钟/5分钟/15分钟),反映等待CPU处理的任务数。若CPU核心数为4,负载值长期>4则需优化(任务堆积)。
- CPU使用率:第三行us(用户进程)、sy(内核进程)、id(空闲)。若us>80%,可能是应用代码低效;若sy>30%,可能是内核线程(如驱动)繁忙。
- IO等待wa(磁盘/网络IO等待时间),若wa>20%,说明IO太慢(需检查磁盘或网络)。

3. 查看内存使用:free -h

free -h  # 人类可读格式显示内存

关键指标:
- Total/Used/Free:总内存、已用、空闲。
- Buff/Cache:缓存数据(如文件、网络数据),越大越好(提升性能)。
- Swap:交换分区,若Swap Used频繁增加,说明物理内存不足(需加内存或优化应用)。

4. 查看磁盘I/O:iostat -x 1

iostat -x 1  # 1秒刷新一次,-x显示扩展信息

关键指标:
- %util:磁盘设备忙碌率,>80% 说明磁盘“太忙”(读写队列长)。
- r/s/w/s:每秒读写次数,若r/s/w/s很高但kB_read/s/kB_wrtn/s低,可能是随机读写过多(需优化IO模式)。

5. 查看网络连接:ss -tuln

ss -tuln  # 查看TCP/UDP监听端口及连接状态

关键指标:
- LISTEN:服务监听的端口(如80、443)。
- ESTABLISHED:已建立的连接数,若过多(如超过1000)且持续增长,可能是并发连接过多(需优化连接池或系统参数)。

针对性调优方法

一、CPU优化

1. 定位高CPU进程

topP(CPU排序)找到占用最高的进程,再用ps -p <PID> -o comm=,%cpu=,%mem=查看详情。若进程持续占用高CPU,可能是死循环或低效代码(联系开发优化)。

2. 减少系统级CPU占用

sy(内核占用)高,可能是频繁的系统调用(如文件锁、网络连接)。检查内核日志dmesg | grep -i error,或用strace跟踪进程系统调用(需临时调试)。

二、内存优化

1. 检查内存泄漏

free -hFree长期低、Swap Used持续增加,用ps aux --sort=-%mem | head查看内存占用最高的进程。若进程退出后内存未释放,可能是内存泄漏(重启进程或修复代码)。

2. 合理配置缓存

Linux的缓存(buff/cache)是优化核心:缓存越大,磁盘访问越少。若因内存不足导致缓存被回收,反而会降低性能。无需主动清理缓存,系统会自动管理。

三、磁盘I/O优化

1. 优化随机读写

机械硬盘(HDD)随机读写慢,建议:
- 将频繁访问的数据库、日志文件迁移到SSD(速度提升10倍以上)。
- 合并小文件写入(如应用日志用logrotate定期轮转,避免频繁小文件操作)。

2. 减少磁盘等待

iostat显示%util>80%,检查是否有进程持续写大文件(如备份脚本)。临时暂停非关键任务(如定时任务),或优化脚本逻辑(批量处理而非循环写入)。

四、网络优化

1. 减少连接浪费

ss显示大量TIME_WAIT连接(客户端主动断开后未释放),临时调整内核参数(需谨慎):

sysctl -w net.ipv4.tcp_tw_reuse=1  # 允许复用TIME_WAIT连接
sysctl -w net.ipv4.tcp_fin_timeout=30  # 缩短连接关闭超时

2. 限制连接数

若并发连接过多导致ss显示ESTABLISHED持续增长,调整文件描述符限制:

ulimit -n 4096  # 临时设置最大打开文件数
# 永久生效:vi /etc/security/limits.conf,添加 * soft nofile 4096

系统级基础参数调整

Linux内核参数可通过sysctl临时修改,需写入/etc/sysctl.conf永久生效:

# 查看所有内核参数
sysctl -a | grep net.ipv4.tcp  # 查看TCP相关参数
# 临时修改TCP超时(示例)
sysctl -w net.ipv4.tcp_syn_retries=2  # 减少SYN请求重试次数,加快连接
# 永久生效
echo "net.ipv4.tcp_syn_retries=2" >> /etc/sysctl.conf
sysctl -p  # 加载配置

注意:修改内核参数前,务必了解参数含义(如net.ipv4.ip_forward=1开启路由转发,非路由场景勿改)。

调优注意事项

  1. 先诊断,后优化:用top/dstat定位瓶颈,避免盲目改参数。
  2. 不要过度调优:Linux默认配置已针对大多数场景优化,除非明确知道问题(如并发连接过多),否则无需频繁调整。
  3. 先测试,后上线:在测试环境验证调优效果,避免生产环境因参数错误导致服务中断。

总结

Linux系统调优是“发现问题→分析原因→精准调整”的过程。从基础工具(top/free/iostat)入手,逐步定位瓶颈(CPU/内存/IO/网络),再针对性优化(换硬件、改参数、修代码)。记住:性能优化没有“一劳永逸”,定期监控(如dstat)+ 持续迭代才是关键

小夜