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


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

在后端开发和运维中,Linux 监控命令是排查问题、优化性能的利器。上篇博客介绍了常用命令及其业务场景,本文将深入探讨这些命令的核心参数,逐一解析其功能,帮助你在实际工作中更灵活地应用这些工具。

1. tophtop - 实时监控系统资源

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 检查 %utilawait,优化写操作。


5. netstatss - 网络状态监控

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. dfdu - 磁盘空间监控

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 文件描述符、端口

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

相关推荐
Java中文社群13 分钟前
SpringAI用嵌入模型操作向量数据库!
后端·aigc·openai
暴力袋鼠哥23 分钟前
基于Flask的跨境电商头程预警分析系统
后端·python·flask
一只爱撸猫的程序猿1 小时前
防止外部API服务不可用拖垮系统的解决方案
spring boot·后端·程序员
白露与泡影1 小时前
SpringBoot 最大连接数及最大并发数是多少?
spring boot·后端·firefox
radient1 小时前
线上死锁问题排查思路
后端
逆风局?1 小时前
Spring-AOP-面相切面编程
java·后端·spring
Golang菜鸟2 小时前
golang中的组合多态
后端·go
lamdaxu2 小时前
Java集合--TreeSet&TreeMap源码解析
后端
独立开阀者_FwtCoder2 小时前
深入解密Node共享内存:这个原生模块让你的多进程应用性能翻倍
前端·javascript·后端
Asthenia04122 小时前
深入剖析 Spring Cloud Feign 的 Contract 组件:设计与哲学
后端