在 Linux 系统管理的日常工作中,你是否曾经被系统运行缓慢、资源占用过高或者难以定位的性能瓶颈所困扰?掌握系统的监控与性能调优技能,不仅能保障服务的稳定运行,更是提升运维效率的关键。本文将带你快速上手,通过一系列实用的命令行工具,学会如何监控系统核心资源、管理进程并进行针对性的性能优化。
1. 系统资源监控
准确监控是性能优化的第一步。你需要清楚地知道 CPU、内存、磁盘和网络都在“忙”些什么。
1.1 CPU监控
top命令监控:
这是最经典的实时监控工具。
# 实时监控CPU使用
top
# 按CPU使用率排序
top -o cpu
# 设置刷新间隔
top -d 5
vmstat命令:
它提供了更丰富的系统整体资源统计信息。
# 查看系统资源使用
vmstat 1
# 查看CPU详细信息
vmstat -c 1
htop命令:
它是 top 的增强版,提供了颜色高亮和更方便的交互操作。
# 交互式监控
htop
# 按CPU排序
F6 → CPU
1.2 内存监控
free命令:
快速查看内存和交换空间的使用概况。
# 查看内存使用
free -h
# 查看内存详细信息
free -m
# 查看内存使用趋势
watch free -h
内存分析:
深入内核接口查看更详细的内存信息。
# 查看内存使用情况
cat /proc/meminfo
# 查看内存映射
cat /proc/PID/maps
1.3 磁盘I/O监控
iostat命令:
专门用于监控磁盘I/O性能,对于排查存储瓶颈非常有用。
# 查看磁盘I/O使用
iostat -xz 1
# 查看磁盘详细信息
iostat -d -x -k 1
df命令:
检查文件系统的磁盘空间使用情况。
# 查看磁盘使用
df -h
# 查看inode使用
df -i
1.4 网络监控
netstat命令:
传统的网络连接、路由表等查看工具。
# 查看网络连接
netstat -an
# 查看监听端口
netstat -ln
# 查看进程ID
netstat -p
ss命令:
更现代、更快速的 socket 统计工具,是 netstat 的优秀替代品。
# 查看网络连接
ss -tulpn
# 查看TCP连接
ss -t
在复杂的 网络/系统 环境中,熟练使用 ss 和 netstat 能帮助你快速定位连接异常和端口占用问题。
2. 进程监控
系统资源被谁占用了?通过进程监控,我们可以找到“罪魁祸首”并管理它。
2.1 进程查看
ps命令:
功能强大的进程状态查看工具,参数组合多样。
# 查看当前进程
ps
# 查看所有进程
ps -ef
# 查看进程详细信息
ps -aux
pgrep命令:
根据进程名快速查找其 PID。
# 查找进程
pgrep nginx
# 查找进程并显示PID
pgrep -l nginx
pstree命令:
以树状图形式展示进程关系,直观明了。
# 查看进程树
pstree
# 显示PID
pstree -p
2.2 进程控制
kill命令:
向进程发送信号,最常用于终止进程。
# 终止进程
kill PID
# 强制终止进程
kill -9 PID
# 终止所有同名进程
killall nginx
nice命令:
调整进程的调度优先级(nice值)。
# 调整进程优先级
nice -n -5 command
# 修改已运行进程的优先级
renice -n 10 PID
2.3 进程调度
screen命令:
终端复用器,可以创建持久的会话,防止进程因 SSH 断开而终止。
# 创建新会话
screen -S session_name
# 查看所有会话
screen -ls
# 恢复会话
screen -r session_name
tmux命令:
比 screen 功能更强大的终端复用器,支持分屏和更丰富的配置。
# 创建新会话
tmux new -s session_name
# 查看所有会话
tmux ls
# 附加会话
tmux attach -t session_name
3. 性能优化
在完成监控和诊断之后,我们就可以针对性地进行调优了。
3.1 CPU优化
CPU调度优化:
通过调整内核调度器参数来优化 I/O 密集型或计算密集型任务的性能。
# 查看CPU调度策略
cat /sys/block/sda/queue/scheduler
# 调整CPU调度策略
echo "deadline" > /sys/block/sda/queue/scheduler
# 调整CPU频率
cpufreq-set -g performance
# 调整CPU亲和性
taskset -c 0-3 command
进程优先级调整:
为关键进程分配更高的优先级,确保其获得足够的计算资源。
# 查看进程优先级
ps -eo pid,ppid,cmd,pri,ni
# 调整进程优先级
renice -n -10 PID
# 设置实时优先级
chrt -f 50 PID
3.2 内存优化
内存参数调优:
调整虚拟内存(swap)行为、缓存压力等内核参数。
# 调整内存使用策略
echo “1” > /proc/sys/vm/swappiness
# 调整内存缓存
echo “50” > /proc/sys/vm/vfs_cache_pressure
# 调整内存分配策略
echo “0” > /proc/sys/vm/overcommit_memory
内存限制设置:
防止单个进程消耗过多内存,影响系统整体稳定性。
# 设置内存限制
ulimit -v 1048576 # 限制为1GB
# 设置进程内存限制
prlimit --as=1073741824 command
3.3 磁盘I/O优化
磁盘参数调优:
优化块设备的队列和预读设置,提升磁盘吞吐量。
# 调整磁盘队列长度
echo “512” > /sys/block/sda/queue/nr_requests
# 调整预读大小
echo “8192” > /sys/block/sda/queue/read_ahead_kb
# 调整调度策略
echo “noop” > /sys/block/sda/queue/scheduler
文件系统优化:
通过挂载选项调整文件系统的行为,例如减少元数据更新开销。
# 调整挂载选项
mount -o noatime,nodiratime /dev/sda1 /mnt
# 启用延迟写入
mount -o data=writeback /dev/sda1 /mnt
# 启用压缩
mount -o compress /dev/sda1 /mnt
3.4 网络优化
网络参数调优:
调整 TCP/IP 协议栈参数以适应高并发、高吞吐量的网络场景。
# 调整TCP窗口大小
echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
# 调整TCP缓冲区
echo “net.ipv4.tcp_rmem = 4096 87380 16777216” >> /etc/sysctl.conf
echo “net.ipv4.tcp_wmem = 4096 65536 16777216” >> /etc/sysctl.conf
# 调整TCP连接数
echo “net.core.somaxconn = 65535” >> /etc/sysctl.conf
# 应用配置
sysctl -p
网络接口优化:
直接针对物理网卡进行配置,如调整 MTU、队列长度等。
# 调整MTU
ifconfig eth0 mtu 9000
# 调整网卡队列长度
ethtool -G eth0 rx 4096 tx 4096
# 启用网卡多队列
ethtool -L eth0 combined 8
本文介绍的命令和技巧是 Linux 运维 & 测试 工程师工具箱中的基础且重要的一部分。从监控到优化,是一个持续的闭环过程。真正的掌握源于实践,建议在你的测试环境中多操作、多观察。如果你对这些系统层面的技术细节有更多兴趣,欢迎到云栈社区与其他开发者交流探讨。