4394 字
22 分钟

Linux性能调优命令和技巧

2026-02-08
浏览量 加载中...

Linux性能调优命令和技巧#

性能调优概述#

Linux性能调优是一个复杂的过程,涉及系统的多个方面,包括CPU、内存、磁盘I/O、网络等。通过合理的性能调优,可以提高系统的响应速度、吞吐量和稳定性,更好地满足应用程序的需求。本文将介绍Linux性能调优中常用的命令和技巧,帮助系统管理员和开发者更有效地优化Linux系统性能。

性能监控工具#

系统级监控#

top 命令#

top命令是最常用的系统监控工具,用于实时显示系统的CPU、内存、进程等信息。

Terminal window
# 启动top
top
# 常用快捷键
# P: 按CPU使用率排序
# M: 按内存使用率排序
# T: 按运行时间排序
# 1: 显示所有CPU核心
# k: 终止进程
# q: 退出
# 批处理模式
top -b -n 1
# 显示特定用户的进程
top -u username
# 显示特定进程
top -p PID

htop 命令#

htoptop的增强版,提供了更友好的界面和更多功能。

Terminal window
# 安装htop
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # RHEL/CentOS
# 启动htop
htop
# 常用快捷键
# F1: 显示帮助
# F2: 设置
# F3: 搜索进程
# F4: 过滤进程
# F5: 切换树状视图
# F6: 排序
# F7: 降低优先级
# F8: 提高优先级
# F9: 终止进程
# F10: 退出
# 显示特定用户的进程
htop -u username
# 显示特定进程
htop -p PID

vmstat 命令#

vmstat命令用于显示虚拟内存、进程、CPU活动等系统信息。

Terminal window
# 显示系统统计信息
vmstat
# 每2秒显示一次,共显示5次
vmstat 2 5
# 显示详细信息
vmstat -a
# 显示磁盘统计信息
vmstat -d
# 显示内存统计信息
vmstat -m
# 显示进程统计信息
vmstat -p /dev/sda1

mpstat 命令#

mpstat命令用于显示每个CPU核心的使用情况。

Terminal window
# 显示所有CPU核心的使用情况
mpstat
# 每2秒显示一次,共显示5次
mpstat 2 5
# 显示特定CPU核心的使用情况
mpstat -P 0

iostat 命令#

iostat命令用于显示CPU和磁盘I/O统计信息。

Terminal window
# 显示CPU和磁盘I/O统计信息
iostat
# 每2秒显示一次,共显示5次
iostat 2 5
# 显示详细的磁盘统计信息
iostat -x
# 显示指定磁盘的统计信息
iostat -p sda

sar 命令#

sar命令用于收集、报告和保存系统活动信息。

Terminal window
# 显示CPU使用情况
sar
# 每2秒显示一次,共显示5次
sar 2 5
# 显示内存使用情况
sar -r
# 显示磁盘I/O统计
sar -d
# 显示网络统计
sar -n DEV
# 显示进程统计
sar -q
# 保存系统活动信息
sar -o datafile 1 10
# 从数据文件中读取信息
sar -f datafile

内存监控#

free 命令#

free命令用于显示系统的内存使用情况。

Terminal window
# 显示内存使用情况
free
# 以人类可读的格式显示
free -h
# 显示详细信息
free -v
# 显示内存总量
free -t
# 每2秒显示一次,共显示5次
watch -n 2 free -h

slabtop 命令#

slabtop命令用于显示内核slab分配器的使用情况。

Terminal window
# 启动slabtop
slabtop
# 排序选项
# -s: 按排序顺序
# a: 按活动对象数
# b: 按对象数
# c: 按缓存大小
# l: 按每对象大小
# v: 按别墅
# 示例
slabtop -s c

磁盘I/O监控#

iotop 命令#

iotop命令用于显示进程的I/O使用情况。

Terminal window
# 安装iotop
sudo apt install iotop # Debian/Ubuntu
sudo yum install iotop # RHEL/CentOS
# 启动iotop
iotop
# 常用选项
# -o: 只显示有I/O活动的进程
# -b: 批处理模式
# -n: 显示次数
# -d: 刷新间隔
# 示例
iotop -o -b -n 5 -d 1

hdparm 命令#

hdparm命令用于测试磁盘性能。

Terminal window
# 测试磁盘读取速度
sudo hdparm -t /dev/sda
# 测试磁盘缓存读取速度
sudo hdparm -T /dev/sda
# 测试磁盘I/O性能
sudo hdparm -tT /dev/sda

fio 命令#

fio命令是一个强大的I/O性能测试工具。

Terminal window
# 安装fio
sudo apt install fio # Debian/Ubuntu
sudo yum install fio # RHEL/CentOS
# 测试随机写入性能
fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --size=1G --numjobs=4 --iodepth=16 --runtime=60 --time_based --end_fsync=1
# 测试顺序读取性能
fio --name=sequential-read --ioengine=posixaio --rw=read --bs=1m --size=1G --numjobs=4 --iodepth=16 --runtime=60 --time_based --end_fsync=1
# 测试混合读写性能
fio --name=random-mix --ioengine=posixaio --rw=randrw --rwmixread=70 --bs=4k --size=1G --numjobs=4 --iodepth=16 --runtime=60 --time_based --end_fsync=1

网络监控#

iftop 命令#

iftop命令用于显示网络接口的带宽使用情况。

Terminal window
# 安装iftop
sudo apt install iftop # Debian/Ubuntu
sudo yum install iftop # RHEL/CentOS
# 启动iftop
iftop
# 常用选项
# -i: 指定网络接口
# -B: 以字节为单位显示
# -n: 不解析主机名
# -N: 不解析端口号
# 示例
iftop -i eth0 -n

nethogs 命令#

nethogs命令用于显示进程的网络带宽使用情况。

Terminal window
# 安装nethogs
sudo apt install nethogs # Debian/Ubuntu
sudo yum install nethogs # RHEL/CentOS
# 启动nethogs
nethogs
# 常用选项
# -d: 刷新间隔
# -v: 显示模式
# -p: 混合模式
# 示例
nethogs -d 2

ss 命令#

ss命令用于显示网络连接、套接字等信息,是netstat的替代品。

Terminal window
# 显示所有网络连接
ss -a
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 显示监听状态的端口
ss -l
# 显示网络连接和进程
ss -tp
# 显示网络连接的详细信息
ss -s

CPU性能调优#

CPU调度#

进程优先级#

Terminal window
# 查看进程优先级
ps -eo pid,comm,nice,cls | grep process_name
# 修改进程优先级(nice值)
nice -n 10 command
# 修改运行中进程的优先级
renice 10 PID
# 实时调整进程优先级(使用top或htop)
# top -> k -> PID -> 输入优先级值

CPU亲和性#

Terminal window
# 查看进程的CPU亲和性
taskset -p PID
# 设置进程的CPU亲和性(只在CPU 0上运行)
taskset -c 0 -p PID
# 启动进程时设置CPU亲和性
taskset -c 0,1 command

内核参数调优#

Terminal window
# 查看内核参数
sysctl -a | grep cpu
# 临时修改内核参数
sysctl kernel.sched_autogroup_enabled=0
# 永久修改内核参数
echo "kernel.sched_autogroup_enabled=0" >> /etc/sysctl.conf
sysctl -p

常见CPU性能问题#

CPU使用率过高#

症状top命令显示CPU使用率接近100%。

解决方案

  • 找出占用CPU的进程:topps aux --sort=-%cpu | head -n 10
  • 分析进程的行为:strace -p PID
  • 优化应用程序:检查代码、调整配置
  • 增加CPU资源:升级硬件或使用负载均衡

CPU等待I/O#

症状top命令显示wa%(I/O等待)较高。

解决方案

  • 检查磁盘I/O:iostat -x
  • 优化磁盘I/O:使用SSD、调整I/O调度器
  • 优化应用程序:减少I/O操作、使用缓存

内存性能调优#

内存管理#

查看内存使用情况#

Terminal window
# 查看内存使用情况
free -h
# 查看进程内存使用情况
ps aux --sort=-%mem | head -n 10
# 查看内核内存使用情况
cat /proc/meminfo

内存缓存#

Terminal window
# 清除页面缓存
sync && echo 1 > /proc/sys/vm/drop_caches
# 清除目录项和inode缓存
sync && echo 2 > /proc/sys/vm/drop_caches
# 清除所有缓存
sync && echo 3 > /proc/sys/vm/drop_caches

内核参数调优#

Terminal window
# 查看内存相关内核参数
sysctl -a | grep vm
# 临时修改内核参数
sysctl vm.swappiness=10
# 永久修改内核参数
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

常见内存性能问题#

内存不足#

症状free -h显示可用内存很少,系统使用交换空间。

解决方案

  • 找出占用内存的进程:ps aux --sort=-%mem | head -n 10
  • 优化应用程序:减少内存使用、使用内存缓存
  • 增加内存:升级硬件
  • 调整交换空间:增加交换分区或交换文件

内存泄漏#

症状:进程内存使用持续增长,不会释放。

解决方案

  • 检测内存泄漏:使用valgrindpmap等工具
  • 修复应用程序:检查代码、使用内存分析工具
  • 重启进程:临时解决问题

磁盘I/O性能调优#

磁盘调度器#

Terminal window
# 查看当前磁盘调度器
cat /sys/block/sda/queue/scheduler
# 修改磁盘调度器(临时)
echo deadline > /sys/block/sda/queue/scheduler
# 修改磁盘调度器(永久)
echo "echo deadline > /sys/block/sda/queue/scheduler" >> /etc/rc.local
# 常用调度器
# noop: 简单的FIFO队列,适合SSD
# deadline: 确保请求在一定时间内完成,适合数据库
# cfq: 完全公平队列,默认值,适合通用场景

文件系统优化#

ext4 文件系统#

Terminal window
# 挂载选项优化
# 编辑/etc/fstab
# UUID=... / ext4 defaults,noatime,nodiratime,barrier=0,data=writeback 0 1
# 调整ext4参数
sudo tune2fs -o journal_data_writeback /dev/sda1
sudo tune2fs -m 1 /dev/sda1 # 设置保留块百分比为1%

XFS 文件系统#

Terminal window
# 挂载选项优化
# 编辑/etc/fstab
# UUID=... / xfs defaults,noatime,nodiratime,discard 0 1
# 调整XFS参数
sudo xfs_admin -L 128m /dev/sda1 # 设置日志大小
# 碎片整理
sudo xfs_fsr /dev/sda1

磁盘阵列#

Terminal window
# 查看RAID状态
sudo mdadm --detail /dev/md0
# 优化RAID参数
sudo mdadm --grow /dev/md0 --chunk=64
# 常用RAID级别
# RAID 0: 条带化,提高性能,无冗余
# RAID 1: 镜像,提高可靠性,性能一般
# RAID 5: 分布式奇偶校验,平衡性能和可靠性
# RAID 10: 镜像+条带化,性能和可靠性都高

常见磁盘I/O性能问题#

磁盘I/O等待高#

症状iostat -x显示%iowait较高,iotop显示进程I/O使用率高。

解决方案

  • 优化应用程序:减少I/O操作、使用缓存
  • 使用更快的存储:SSD、NVMe
  • 调整I/O调度器:根据工作负载选择合适的调度器
  • 使用RAID:提高I/O性能和可靠性
  • 优化文件系统:调整挂载选项、使用适合的文件系统

磁盘空间不足#

症状df -h显示磁盘使用率接近100%。

解决方案

  • 删除不需要的文件:find / -type f -size +100M | xargs rm -f
  • 清理日志文件:journalctl --vacuum-time=7d
  • 扩展磁盘空间:添加新磁盘、使用LVM

网络性能调优#

网络接口配置#

Terminal window
# 查看网络接口配置
ip addr
ifconfig
# 查看网络接口统计
ip -s link
ifconfig eth0
# 调整网络接口MTU
ip link set eth0 mtu 9000
# 启用网络接口GRO/GSO
ethtool -K eth0 gro on gso on
# 调整网络接口缓冲区
ethtool -G eth0 rx 4096 tx 4096

内核参数调优#

Terminal window
# 查看网络相关内核参数
sysctl -a | grep net
# 临时修改内核参数
sysctl net.core.somaxconn=65535
sysctl net.ipv4.tcp_max_syn_backlog=65535
sysctl net.ipv4.tcp_fin_timeout=30
sysctl net.ipv4.tcp_keepalive_time=300
sysctl net.ipv4.tcp_keepalive_probes=5
sysctl net.ipv4.tcp_keepalive_intvl=15
# 永久修改内核参数
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_keepalive_intvl=15
EOF
sysctl -p

常见网络性能问题#

网络延迟高#

症状ping命令显示延迟较高,网络应用响应慢。

解决方案

  • 检查网络连接:traceroutemtr
  • 优化网络路由:调整路由表
  • 减少网络拥塞:使用QoS
  • 升级网络设备:使用更高带宽的网络

网络吞吐量低#

症状iperf测试显示吞吐量低于预期。

解决方案

  • 检查网络接口:ethtool
  • 调整网络参数:修改内核参数
  • 使用更快的网络:千兆网卡、万兆网卡
  • 优化应用程序:使用更高效的协议、减少网络请求

应用程序性能调优#

Web服务器调优#

Nginx#

Terminal window
# 查看Nginx配置
cat /etc/nginx/nginx.conf
# 优化Nginx配置
# 编辑/etc/nginx/nginx.conf
# 常用优化参数
# worker_processes auto; # 自动设置工作进程数
# worker_connections 1024; # 每个工作进程的最大连接数
# multi_accept on; # 同时接受多个连接
# use epoll; # 使用epoll事件模型
# keepalive_timeout 65; # 保持连接超时时间
# gzip on; # 启用gzip压缩
# 重启Nginx
sudo systemctl restart nginx

Apache#

Terminal window
# 查看Apache配置
cat /etc/apache2/apache2.conf # Debian/Ubuntu
cat /etc/httpd/conf/httpd.conf # RHEL/CentOS
# 优化Apache配置
# 编辑配置文件
# 常用优化参数
# StartServers 5 # 启动服务器数量
# MinSpareServers 5 # 最小空闲服务器数量
# MaxSpareServers 10 # 最大空闲服务器数量
# MaxRequestWorkers 150 # 最大请求工作进程数
# MaxConnectionsPerChild 0 # 每个子进程的最大连接数
# 重启Apache
sudo systemctl restart apache2 # Debian/Ubuntu
sudo systemctl restart httpd # RHEL/CentOS

数据库服务器调优#

MySQL/MariaDB#

Terminal window
# 查看MySQL配置
cat /etc/my.cnf # RHEL/CentOS
cat /etc/mysql/my.cnf # Debian/Ubuntu
# 优化MySQL配置
# 编辑配置文件
# 常用优化参数
# [mysqld]
# innodb_buffer_pool_size = 1G # InnoDB缓冲池大小
# innodb_log_file_size = 256M # InnoDB日志文件大小
# innodb_flush_log_at_trx_commit = 2 # 日志刷新策略
# max_connections = 100 # 最大连接数
# query_cache_size = 0 # 查询缓存大小(推荐禁用)
# tmp_table_size = 64M # 临时表大小
# max_heap_table_size = 64M # 最大堆表大小
# 重启MySQL
sudo systemctl restart mysql # Debian/Ubuntu
sudo systemctl restart mariadb # RHEL/CentOS

PostgreSQL#

Terminal window
# 查看PostgreSQL配置
cat /etc/postgresql/12/main/postgresql.conf # Debian/Ubuntu
cat /var/lib/pgsql/12/data/postgresql.conf # RHEL/CentOS
# 优化PostgreSQL配置
# 编辑配置文件
# 常用优化参数
# shared_buffers = 256MB # 共享缓冲区大小
# work_mem = 4MB # 工作内存大小
# maintenance_work_mem = 64MB # 维护工作内存大小
# effective_cache_size = 1GB # 有效缓存大小
# checkpoint_completion_target = 0.9 # 检查点完成目标
# max_connections = 100 # 最大连接数
# 重启PostgreSQL
sudo systemctl restart postgresql

缓存优化#

使用内存缓存#

Terminal window
# 安装Redis
sudo apt install redis-server # Debian/Ubuntu
sudo yum install redis # RHEL/CentOS
# 配置Redis
# 编辑/etc/redis/redis.conf
# 常用优化参数
# maxmemory 1gb # 最大内存使用
# maxmemory-policy allkeys-lru # 内存不足时的淘汰策略
# appendonly no # 禁用AOF持久化
# 启动Redis
sudo systemctl start redis
sudo systemctl enable redis
# 安装Memcached
sudo apt install memcached # Debian/Ubuntu
sudo yum install memcached # RHEL/CentOS
# 配置Memcached
# 编辑/etc/memcached.conf
# 常用优化参数
# -m 64 # 最大内存使用(MB)
# -c 1024 # 最大连接数
# -p 11211 # 监听端口
# 启动Memcached
sudo systemctl start memcached
sudo systemctl enable memcached

系统整体调优#

内核参数调优#

Terminal window
# 查看所有内核参数
sysctl -a
# 常用内核参数调优
cat >> /etc/sysctl.conf << EOF
# 网络优化
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=0
net.ipv4.ip_local_port_range=1024 65535
# 内存优化
vm.swappiness=10
vm.overcommit_memory=1
vm.dirty_background_ratio=5
vm.dirty_ratio=10
# 文件系统优化
fs.file-max=65535
EOF
# 应用内核参数
sysctl -p

文件描述符限制#

Terminal window
# 查看当前文件描述符限制
ulimit -n
# 临时修改文件描述符限制
ulimit -n 65535
# 永久修改文件描述符限制
# 编辑/etc/security/limits.conf
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
EOF
# 编辑/etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
fs.file-max=65535
EOF
# 应用配置
sysctl -p

系统服务优化#

Terminal window
# 查看系统服务状态
systemctl list-unit-files --type=service | grep enabled
# 禁用不必要的服务
systemctl disable service_name
systemctl stop service_name
# 常用服务优化
# 禁用蓝牙
systemctl disable bluetooth
systemctl stop bluetooth
# 禁用打印机
systemctl disable cups
systemctl stop cups
# 禁用音频
systemctl disable alsa-state
systemctl stop alsa-state
# 禁用网络管理器(如果使用静态IP)
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl enable networking
systemctl start networking

性能调优最佳实践#

监控先行#

  1. 建立基准:在调优前,收集系统的基准性能数据
  2. 持续监控:使用多种工具持续监控系统性能
  3. 识别瓶颈:根据监控数据识别性能瓶颈
  4. 有针对性调优:针对识别出的瓶颈进行调优
  5. 验证效果:调优后,验证性能是否改善

循序渐进#

  1. 小步调整:每次只修改一个参数,避免同时修改多个参数
  2. 记录变更:记录每次修改的参数和值
  3. 测试验证:修改后进行充分测试,验证性能改善
  4. 回滚机制:如果调优效果不佳,能够快速回滚到之前的配置

不同工作负载的调优策略#

Web服务器#

  • CPU:使用多核处理器,调整进程数和线程数
  • 内存:增加内存,使用内存缓存
  • 磁盘I/O:使用SSD,优化文件系统,启用压缩
  • 网络:使用千兆或万兆网卡,优化网络参数

数据库服务器#

  • CPU:使用多核处理器,调整查询计划
  • 内存:增加内存,优化缓存大小
  • 磁盘I/O:使用RAID,优化文件系统,调整I/O调度器
  • 网络:优化网络参数,使用连接池

计算密集型应用#

  • CPU:使用高性能处理器,调整进程优先级和亲和性
  • 内存:增加内存,优化内存使用
  • 磁盘I/O:使用SSD,减少I/O操作
  • 网络:优化网络参数,减少网络延迟

I/O密集型应用#

  • CPU:使用多核处理器,调整I/O调度器
  • 内存:增加内存,使用内存缓存
  • 磁盘I/O:使用RAID,优化文件系统,使用SSD
  • 网络:优化网络参数,增加网络带宽

总结#

本文介绍了Linux性能调优中常用的命令和技巧,包括性能监控工具、CPU性能调优、内存性能调优、磁盘I/O性能调优、网络性能调优、应用程序性能调优以及系统整体调优等方面的内容。

性能调优是一个持续的过程,需要系统管理员和开发者根据具体的工作负载和硬件环境,采取合适的调优策略。通过合理的性能调优,可以显著提高Linux系统的性能,更好地满足应用程序的需求。

练习#

  1. 使用tophtop监控系统性能,识别占用资源最多的进程。
  2. 使用iostatiotop监控磁盘I/O性能,识别I/O密集型进程。
  3. 使用iftopnethogs监控网络性能,识别网络密集型进程。
  4. 调整磁盘调度器,比较不同调度器对磁盘I/O性能的影响。
  5. 调整内核参数,优化网络性能。
  6. 配置Redis缓存,提高Web应用的响应速度。
  7. 优化MySQL配置,提高数据库性能。
  8. 编写一个性能监控脚本,定期收集系统性能数据。
  9. 分析系统性能瓶颈,提出针对性的调优方案。
  10. 比较调优前后的系统性能,验证调优效果。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Linux性能调优命令和技巧
https://blog.vanilla.net.cn/posts/2026-02-05-linux-performance-tuning/
作者
鹁鸪
发布于
2026-02-08
许可协议
CC BY-NC-SA 4.0

评论区

目录