ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux系统监控中常被忽视的20个关键指标

Linux系统监控中常被忽视的20个关键指标

1. Linux系统监控的隐藏陷阱

作为在Linux运维领域摸爬滚打多年的老手,我发现很多系统管理员只关注CPU、内存、磁盘这些常规指标,却忽视了那些真正可能导致系统崩溃的"暗坑"。今天就来分享那些容易被忽略但极其关键的监控点。

2. 文件描述符泄漏监控

2.1 为什么需要关注文件描述符

文件描述符泄漏是导致Linux系统性能下降甚至服务崩溃的常见原因。每个进程默认限制为1024个文件描述符,当Web服务器等应用发生泄漏时,会快速耗尽这个配额。

2.2 监控实现方法

# 查看系统整体文件描述符使用情况 cat /proc/sys/fs/file-nr # 按进程查看文件描述符使用量 lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | head

重要提示:当发现某个进程的文件描述符数量持续增长而不释放时,基本可以确定存在泄漏问题。

3. inode耗尽风险监控

3.1 小文件系统的噩梦

即使磁盘空间充足,inode耗尽也会导致系统无法创建新文件。这在邮件服务器、日志系统等产生大量小文件的场景尤为常见。

3.2 监控与排查方案

# 查看文件系统inode使用情况 df -i # 查找inode消耗大户 find / -xdev -printf '%h\n' | sort | uniq -c | sort -k1 -n

4. 内存泄漏的隐蔽表现

4.1 不只是OOM杀手

除了明显的OOM(Out Of Memory)问题,缓慢的内存泄漏同样危险。它会导致系统逐渐变慢,最终不可用。

4.2 专业监控手段

# 监控slab内存使用 cat /proc/meminfo | grep Slab # 跟踪进程内存变化 watch -n 60 'ps -eo pid,comm,%mem --sort=-%mem | head -n 10'

5. 僵尸进程堆积问题

5.1 被忽视的资源占用者

僵尸进程虽然不消耗CPU和内存,但会占用进程ID资源,大量堆积可能导致无法创建新进程。

5.2 检测与清理

# 查找僵尸进程 ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' # 批量清理(谨慎使用) kill -HUP $(ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}')

6. 网络连接状态监控

6.1 连接池耗尽危机

TIME_WAIT状态连接过多会耗尽可用端口,导致新连接无法建立。这在频繁短连接的系统中很常见。

6.2 关键监控命令

# 查看各种状态的连接数 ss -s # 监控TCP连接状态分布 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

7. 磁盘I/O性能瓶颈

7.1 不只是剩余空间

即使磁盘未满,I/O性能下降也会严重影响系统响应速度。需要关注await、%util等指标。

7.2 iostat深度解析

# 实时监控磁盘I/O iostat -x 1 # 重点关注指标说明
指标含义警戒值
%util设备利用率>70%
await平均I/O响应时间(ms)>10ms
svctm平均服务时间(ms)持续增长

8. 系统时钟漂移监控

8.1 时间不同步的连锁反应

即使微小的时钟偏差也会导致日志时间错乱、证书验证失败、数据库主从同步问题等。

8.2 监控与校正

# 检查时钟偏差 ntpq -p # 强制同步时间 chronyc makestep

9. 内核参数调优监控

9.1 容易被忽视的配置项

如fs.file-max、net.ipv4.tcp_max_tw_buckets等参数设置不当会导致各种奇怪问题。

9.2 关键参数检查清单

# 查看当前内核参数 sysctl -a | grep -E 'file-max|tcp_max_tw_buckets|somaxconn'

10. 日志轮转失败监控

10.1 看似简单的大问题

日志轮转失败会导致单个日志文件过大,最终占满磁盘空间。

10.2 自动化监控方案

# 检查日志文件大小 find /var/log -type f -size +1G -exec ls -lh {} \; # 验证logrotate是否正常执行 grep logrotate /var/log/cron

11. 系统调用跟踪技巧

11.1 定位性能问题的利器

strace可以跟踪进程的系统调用,帮助发现异常行为。

11.2 实用命令示例

# 跟踪进程系统调用 strace -p <PID> -c # 统计系统调用耗时 strace -T -p <PID>

12. 安全更新监控

12.1 补丁管理不容忽视

未及时安装安全更新会使系统暴露在各种漏洞风险中。

12.2 自动化检查方案

# 检查可用的安全更新 yum check-update --security # 仅安装安全更新 yum update --security

13. 系统资源限制检查

13.1 ulimit的隐藏陷阱

默认的资源限制可能导致应用异常,特别是对于Java等需要大量资源的应用。

13.2 全面检查方案

# 查看当前用户限制 ulimit -a # 检查系统全局限制 cat /etc/security/limits.conf

14. 硬件健康状态监控

14.1 服务器硬件的预警信号

磁盘SMART错误、内存ECC错误等硬件问题往往被忽视,直到出现严重故障。

14.2 硬件监控工具

# 检查磁盘健康状态 smartctl -a /dev/sda # 监控内存错误 dmesg | grep -i error

15. 容器环境特殊监控点

15.1 容器特有的问题

包括容器逃逸、资源限制突破、镜像漏洞等容器环境特有的风险。

15.2 Docker监控要点

# 监控容器资源使用 docker stats # 检查异常容器进程 docker top <container_id>

16. 系统中断平衡监控

16.1 多核CPU的潜在问题

中断处理不均衡会导致某些CPU核心过载,影响整体性能。

16.2 中断监控方法

# 查看中断分布 cat /proc/interrupts # 监控CPU软中断 watch -n 1 'cat /proc/softirqs'

17. 内核OOM Killer行为分析

17.1 最后的救命稻草

当系统内存严重不足时,OOM Killer会杀死进程来释放内存,但可能误杀关键服务。

17.2 日志分析与预防

# 查看OOM Killer记录 dmesg | grep -i oom # 调整进程oom_score_adj echo -1000 > /proc/<pid>/oom_score_adj

18. 系统调用过滤监控

18.1 安全加固的双刃剑

seccomp等系统调用过滤机制可能导致合法应用无法正常运行。

18.2 监控与调试

# 检查进程的seccomp状态 grep Seccomp /proc/<pid>/status # 跟踪被过滤的系统调用 strace -e trace=filtered <command>

19. 网络丢包与重传监控

19.1 网络质量的隐形杀手

即使网络连通,丢包和重传也会显著降低实际吞吐量。

19.2 专业网络诊断

# 查看网络接口统计 ip -s link # 监控TCP重传 nstat -z | grep -i retrans

20. 系统调用性能分析

20.1 应用卡顿的深层原因

某些系统调用(如fork)在高负载下可能成为性能瓶颈。

20.2 perf工具实战

# 系统调用性能分析 perf stat -e 'syscalls:sys_enter_*' <command> # 热点系统调用定位 perf top -e 'syscalls:sys_enter_*'

21. 文件系统错误监控

21.1 静默损坏的风险

文件系统错误可能长期不被发现,直到关键数据损坏。

21.2 定期检查方案

# 检查ext4文件系统错误 fsck -n /dev/sda1 # 监控XFS健康状态 xfs_health /dev/sda1

22. 系统温度监控

22.1 过热导致的性能降频

CPU过热会导致自动降频,显著降低计算性能。

22.2 温度监控实现

# 查看CPU温度 sensors # 监控温度变化 watch -n 1 'sensors | grep Core'

23. 内核模块内存泄漏

23.1 驱动程序的隐患

内核模块的内存泄漏比用户空间更危险,只能通过重启解决。

23.2 检测方法

# 查看内核内存使用 cat /proc/meminfo | grep Slab # 跟踪内核内存分配 echo 1 > /proc/sys/vm/kmemleak cat /sys/kernel/debug/kmemleak

24. 系统调用劫持检测

24.1 高级持久化威胁

rootkit等恶意软件常通过劫持系统调用实现隐蔽驻留。

24.2 安全检测方案

# 检查系统调用表完整性 grep sys_call_table /proc/kallsyms # 使用完整性检查工具 apt install chkrootkit chkrootkit

25. 总结与持续监控建议

建立完善的监控系统需要考虑这些容易被忽视的指标。我建议使用Prometheus等工具将这些指标纳入常规监控,并设置合理的告警阈值。对于关键业务系统,还应该定期进行压力测试,提前发现潜在的容量问题。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进