后端程序员必备:Linux 监控命令详解与参数深度剖析
在后端开发和运维中,Linux 监控命令是排查问题、优化性能的利器。上篇博客介绍了常用命令及其业务场景,本文将深入探讨这些命令的核心参数,逐一解析其功能,帮助你在实际工作中更灵活地应用这些工具。
1. top
和 htop
- 实时监控系统资源
top
基础用法 :top
- 默认显示所有进程的实时状态,按 CPU 使用率排序。
常用参数:
-u <username>
:仅显示指定用户的进程。- 示例:
top -u appuser
查看应用用户进程。
- 示例:
-p <pid>
:监控特定进程。- 示例:
top -p 12345
只看 PID 12345。
- 示例:
-d <seconds>
:设置刷新间隔(默认 3 秒)。- 示例:
top -d 1
每秒刷新。
- 示例:
-b
:批处理模式,适合输出到文件。- 示例:
top -b -n 10 > top.log
运行 10 次后保存。
- 示例:
- 交互命令 :
P
:按 CPU 排序。M
:按内存排序。k
:输入 PID 杀进程。q
:退出。
输出字段解析:
%CPU
:进程的 CPU 使用百分比。%MEM
:内存使用百分比。TIME+
:累计 CPU 使用时间。load average
:系统负载(1、5、15 分钟)。
htop
基础用法 :htop
- 提供彩色界面,支持鼠标和键盘操作。
常用参数:
-u <username>
:过滤用户进程。- 示例:
htop -u appuser
。
- 示例:
-d <tenths>
:刷新间隔(单位 1/10 秒)。- 示例:
htop -d 10
每秒刷新。
- 示例:
- 交互操作 :
F2
:进入设置(如调整显示列)。F3
:搜索进程。F5
:树形视图。F9
:杀进程。
业务场景 :排查订单服务 CPU 高时,用 top -p <pid>
或 htop -u appuser
聚焦目标进程。
2. ps
- 查看进程详细信息
基础用法 :ps aux
- 显示所有用户的进程。
常用参数:
-e
或-A
:显示所有进程。-f
:显示完整格式(含 PPID、启动时间等)。-o <fields>
:自定义输出字段。- 示例:
ps -eo pid,%cpu,%mem,cmd
显示 PID、CPU%、内存% 和命令。
- 示例:
--sort <field>
:排序。- 示例:
ps -eo pid,%cpu,cmd --sort=-%cpu
按 CPU 降序。
- 示例:
-u <username>
:按用户过滤。- 示例:
ps -u appuser
。
- 示例:
-p <pid>
:指定进程。- 示例:
ps -p 12345
。
- 示例:
常用字段:
PID
:进程 ID。%CPU
:CPU 使用率。%MEM
:内存使用率。STAT
:进程状态(R=运行,S=睡眠,Z=僵尸)。
业务场景 :支付服务僵死时,ps -eo pid,stat | grep Z
快速定位僵尸进程。
3. vmstat
- 监控系统性能瓶颈
基础用法 :vmstat 1
- 每秒刷新系统性能数据。
常用参数:
<interval>
:刷新间隔(秒)。<count>
:刷新次数。- 示例:
vmstat 1 5
每秒刷新,运行 5 次。
- 示例:
-s
:显示统计汇总。- 示例:
vmstat -s
查看内存和 CPU 总使用。
- 示例:
-d
:磁盘统计。-w
:宽格式输出。
输出字段解析:
procs
:r
:等待运行的进程数。b
:阻塞的进程数。
cpu
:us
:用户态 CPU 时间。sy
:系统态 CPU 时间。id
:空闲时间。
io
:bi
:每秒块输入。bo
:每秒块输出。
业务场景 :文件上传慢时,vmstat 1
检查 bi/bo
,若 IO 高则优化磁盘操作。
4. iostat
- 磁盘 IO 监控
基础用法 :iostat -dx 1
- 每秒显示详细磁盘统计。
常用参数:
-d
:仅显示磁盘统计。-x
:扩展统计(含%util
等)。-k
或-m
:以 KB 或 MB 显示吞吐量。- 示例:
iostat -dxk 1
。
- 示例:
-p <device>
:指定设备。- 示例:
iostat -p sda
。
- 示例:
输出字段解析:
tps
:每秒事务数。kB_read/s
:每秒读取 KB。%util
:磁盘利用率。await
:平均 IO 等待时间(毫秒)。
业务场景 :数据库慢时,iostat -dx 1
检查 %util
和 await
,优化写操作。
5. netstat
和 ss
- 网络状态监控
netstat
基础用法 :netstat -tuln
- 显示监听端口。
常用参数:
-t
:仅 TCP。-u
:仅 UDP。-l
:仅监听状态。-n
:显示数字地址/端口。-p
:显示关联进程。- 示例:
netstat -tulnp
。
- 示例:
-a
:显示所有连接。
ss
基础用法 :ss -tunap
- 显示所有 TCP/UDP 连接及进程。
常用参数:
-t
:仅 TCP。-u
:仅 UDP。-n
:显示数字格式。-a
:显示所有状态。-p
:显示进程信息。-l
:仅监听状态。- 示例:
ss -tln
。
- 示例:
业务场景 :502 错误时,ss -tunap | grep 8080
检查 TIME_WAIT 连接。
6. pidstat
- 进程级资源统计
基础用法 :pidstat -u 1
- 每秒统计 CPU 使用。
常用参数:
-u
:CPU 统计。-d
:磁盘 IO 统计。-r
:内存统计。-p <pid>
:指定进程。- 示例:
pidstat -u -p 12345 1
。
- 示例:
-w
:上下文切换统计。
输出字段解析:
%usr
:用户态 CPU 使用率。%system
:系统态 CPU 使用率。kB_rd/s
:每秒读取 KB(-d
)。rss
:常驻内存大小(-r
)。
业务场景 :日志服务慢时,pidstat -d 1
检查 IO 瓶颈。
7. df
和 du
- 磁盘空间监控
df
基础用法 :df -h
- 以人类可读格式显示磁盘使用。
常用参数:
-h
:人类可读(GB/MB)。-i
:显示 inode 使用。-T
:显示文件系统类型。- 示例:
df -hT
。
- 示例:
du
基础用法 :du -sh /var/log
- 统计目录大小。
常用参数:
-s
:汇总大小。-h
:人类可读。--max-depth=<n>
:指定递归深度。- 示例:
du -h --max-depth=1 /var
。
- 示例:
业务场景 :磁盘满时,du -sh /var/* | sort -hr
定位大文件。
8. lsof
- 文件和端口排查
基础用法 :lsof -i :8080
- 查看端口占用。
常用参数:
-i
:按网络过滤。- 示例:
lsof -i tcp:8080
。
- 示例:
-p <pid>
:按进程过滤。-u <username>
:按用户过滤。+d <dir>
:列出目录下打开的文件。- 示例:
lsof +d /var/log
。
- 示例:
业务场景 :服务启动失败,lsof -i :8080
查占用进程。
总结与速查表
命令 | 核心参数示例 | 主要字段解析 |
---|---|---|
top |
-u -p -d |
%CPU %MEM load |
ps |
-eo --sort -u |
PID %CPU STAT |
vmstat |
<interval> -s -d |
r us bi |
iostat |
-dx -k -p |
%util await |
ss |
-tunap -l |
连接状态、进程 |
pidstat |
-u -d -r |
%usr kB_rd/s |
df |
-h -i -T |
已用空间、文件系统 |
lsof |
-i -p +d |
文件描述符、端口 |
通过掌握这些参数,你可以根据具体业务需求灵活调整命令,快速定位问题。有什么想深入探讨的参数或场景吗?欢迎交流!