关键在于分层抓重点:进程状态是否健康、资源是否失控、网络连接是否异常;linux盯z(僵尸)和d(不可中断io)状态,windows重事件日志与pid关联分析,网络连接需逐层验证连通性、状态及异常占用,并通过精准告警与上下文实现有效监控。

监控服务器异常进程与网络连接,关键在于分层抓重点:进程状态是否健康、资源是否失控、网络连接是否异常。不需要堆工具,先理清监控逻辑,再选合适手段。
Linux进程异常:盯住Z和D状态
僵尸进程(Z)本身不耗资源,但占PID号,积多了系统就无法创建新进程;D状态进程卡在不可中断IO,大概率是磁盘或存储链路出问题。
- 用 ps aux | grep ' Z ' 快速查僵尸进程,再结合 ps -o pid,ppid,stat,comm -p [PID] 看父进程是否还在运行
- 查D状态进程:执行 ps aux | awk '$8 ~ /^D/ {print $0}',重点关注其等待的设备(如 /dev/sdb),再配合 iostat -x 1 看IO延迟和%util
- 日常可加定时检查脚本,比如每5分钟扫描一次D状态超2分钟的进程,并记录到日志
Windows进程异常:靠事件日志+PID定位
Windows崩溃时默认写系统日志,比抓dump更直接——错误模块名、异常代码、进程名全都有。
- 打开“事件查看器” → Windows日志 → 应用程序,筛选“错误”级别,重点关注来源为Application Error的条目
- 用 netstat -ano 查网络连接对应PID,再用 tasklist /fi "pid eq [PID]" 查进程名和路径
- 发现句柄数异常高(>1万)或私有内存持续增长,基本可锁定内存泄漏或句柄泄漏,需结合Process Explorer看句柄类型分布
网络连接异常:从连通性到连接态逐层验证
不能只看端口通不通,要确认连接是否真实有效、是否被异常占用、是否有连接堆积。
- 基础连通性:用 ping 测通断,traceroute(Linux)或 tracert(Windows)看路由路径是否异常跳变
- 连接状态分析:Linux用 ss -tulnp 替代 netstat(更快更准),关注 ESTAB 数量是否远超业务预期;Windows用 netstat -an | findstr :[端口] 配合状态码(TIME_WAIT、CLOSE_WAIT多说明应用未正确关闭连接)
- 异常连接识别:对高频短连接服务,可统计 ss -s 中“total”和“established”比例;若 established 占比过低,可能被SYN Flood攻击或客户端频繁重连
告警与自动化:让监控真正起作用
监控不告警等于没监控。告警要精准,避免疲劳,更要带上下文。
- 进程存活类告警(如nginx挂了),脚本里直接记录PID、启动时间、上次正常时间,方便回溯是否被误杀
- 网络类告警附加信息:比如“端口8080监听进程消失”,同时输出 lsof -i :8080 结果,确认是进程退出还是端口被抢占
- 生产环境建议用轻量级工具落地:Monit 做进程保活+资源阈值触发;Prometheus + Node Exporter 抓指标,Alertmanager 发微信/钉钉,规则按业务SLA设(如D状态>3分钟才告)











