Linux运维5 min read

Linux系统性能优化实战:从内核参数到应用调优

Linux系统性能优化实战:从内核参数到应用调优

前言

在日常运维工作中,系统性能优化是一个永恒的话题。一台未经优化的Linux服务器与经过精心调优的服务器,在相同硬件条件下性能差距可达数倍。本文将从内核参数、文件系统、内存管理、CPU调度和I/O等多个维度,系统性地介绍Linux性能优化的实战技巧。

一、性能分析工具链

在动手优化之前,首先要建立完善的性能监控和分析体系。

1.1 基础监控命令

# CPU使用情况
top -b -n 1 | head -20
mpstat -P ALL 1 5

# 内存使用
free -h
vmstat 1 10

# I/O性能
iostat -x 1 5
iotop -o

# 网络性能
sar -n DEV 1 5
iftop -i eth0

1.2 综合性能分析工具

工具 用途 安装方式
perf CPU性能分析 yum install perf
strace 系统调用追踪 系统自带
lsof 文件/端口查看 yum install lsof
sysbench 基准测试 yum install sysbench
dstat 全能监控 yum install dstat

二、内核参数调优

内核参数是系统性能的基石。通过调整 /etc/sysctl.conf 中的参数,可以显著提升系统吞吐量。

2.1 网络相关参数

# TCP连接优化
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 = 10

# TCP keepalive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

2.2 内存与文件系统

# Swappiness - 降低swap使用倾向
vm.swappiness = 10

# 脏页刷新策略
vm.dirty_ratio = 30
vm.dirty_background_ratio = 5

# 文件描述符上限
fs.file-max = 6553560
fs.nr_open = 1048576

2.3 立即生效

sysctl -p

三、文件系统与磁盘优化

3.1 选择合适的文件系统

  • XFS:适合大文件场景(日志、数据库)
  • ext4:通用场景,稳定可靠
  • btrfs:需要快照、压缩等高级特性

3.2 挂载参数优化

# /etc/fstab 挂载选项
UUID=xxx /data xfs defaults,noatime,nodiratime,nobarrier 0 0
  • noatime:禁止更新文件访问时间,减少写操作
  • nodiratime:禁止更新目录访问时间
  • nobarrier:禁用写屏障(有UPS/BBU时)

3.3 磁盘调度算法

# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# SSD使用noop或none
echo noop > /sys/block/sda/queue/scheduler

# HDD使用deadline
echo deadline > /sys/block/sda/queue/scheduler

四、应用程序层面优化

4.1 进程优先级管理

# 调整nice值(-20最高优先级,19最低)
nice -n -10 ./critical-app
renice -n -10 -p 12345

4.2 资源限制设置

# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc  65535
* hard nproc  65535

4.3 使用Systemd资源控制

# /etc/systemd/system/myapp.service
[Service]
CPUQuota=200%
MemoryLimit=2G
TasksMax=512

五、实战案例分析

案例1:Web服务器响应缓慢

问题现象:Nginx服务器响应时间从50ms上升到500ms

排查过程

  1. 使用 top 发现CPU wa(IO等待)高达40%
  2. iostat -x 1 发现磁盘 await 超过100ms
  3. iotop 定位到MySQL大量写操作

解决方案

# 调整MySQL刷盘策略
# my.cnf
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
sync_binlog = 0

案例2:内存泄漏导致OOM

排查命令

# 查看OOM日志
dmesg | grep -i oom
grep -i "out of memory" /var/log/messages

# 按内存排序进程
ps aux --sort=-%mem | head -20

# 查看进程内存详情
pmap -x 12345

总结

系统优化是一个循序渐进的过程,切忌盲目调参。建议遵循以下原则:

  1. 测量先行:优化前建立性能基线
  2. 单点变更:每次只改一个参数,观察效果
  3. 文档记录:详细记录每次变更和效果
  4. 灰度验证:先在测试环境验证,再上线
  5. 持续监控:优化后持续观察指标变化

优化的最高境界不是参数调得多高,而是让系统在现有资源下达到最佳运行状态。

分享:

相关文章