后端程序员必备:Linux 监控命令详解与参数深度剖析


后端程序员必备: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 文件描述符、端口

通过掌握这些参数,你可以根据具体业务需求灵活调整命令,快速定位问题。有什么想深入探讨的参数或场景吗?欢迎交流!

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
大勇前进4 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu4 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白804 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙4 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发4 天前
软件工程SOLID 五大设计原则
后端·软件工程