1. 这不是“命令合集”,而是服务器健康诊断的日常操作手册
你有没有过这样的经历:凌晨两点,手机突然弹出告警——网站响应变慢、API超时、数据库连接池打满。你火速登录服务器,手指悬在键盘上,却卡住了:该先看什么? top ? netstat ?还是 du ?敲完命令,满屏滚动的数据又让你无从下手——CPU 92% 是哪个进程干的? ESTABLISHED 状态的连接有 800 个,但到底哪些是正常业务,哪些是异常扫描? /var/log 目录显示占了 42G,可里面几百个日志文件,哪个才是真正的“磁盘杀手”?这不是命令不会用,而是缺乏一套 连贯的、有逻辑的、能闭环的资源诊断思维 。这篇内容,就是我过去八年在生产环境里,每天真实使用的那套方法论。它不讲“ top 命令有 20 个参数”,而是告诉你:当 CPU 突然飙高时,三步之内定位到罪魁祸首;当服务连不上时,如何用 netstat 和 ss 配合,5 分钟内区分是防火墙问题、端口未监听,还是客户端连接被拒绝;当磁盘快满了, du 怎么配合 find 和 sort ,精准揪出那个偷偷写日志写疯了的 Python 脚本。核心关键词 top 、 netstat 、 du 、 server resources 、 monitor ,它们不是孤立的工具,而是一套诊断链路上的“听诊器”、“血压计”和“X光片”。适合所有需要直面 Linux 服务器的人:运维工程师、后端开发、DevOps 工程师,甚至刚转行想搞懂服务器的同学。你不需要背命令,只需要理解每一步操作背后的“为什么”,就能把这套流程刻进肌肉记忆里。
2. 诊断思路拆解:从“症状”到“病灶”的三层穿透法
2.1 为什么不能一上来就 top ?——建立“资源分层”认知模型
很多新手一遇到问题,第一反应就是敲 top 。这就像人生病了,不量体温、不问症状,直接要求做全身 CT。 top 显示的是一个“结果快照”,但它无法告诉你这个结果是怎么来的。服务器资源消耗,本质上是一个 分层传导 的过程:最底层是硬件(CPU、内存、磁盘 I/O、网络带宽),中间层是操作系统内核(进程调度、内存管理、网络协议栈、文件系统缓存),最上层是你的应用进程(Nginx、MySQL、Java 应用)。任何一个上层的问题,都会向下传导,表现为底层资源的异常。所以,我的诊断思路永远是 自上而下,层层穿透 :
- 第一层:现象层(What) —— 用户或监控系统报告了什么?是“网页打不开”(网络层)、“后台卡顿”(CPU/内存层)、还是“上传失败”(磁盘层)?这是诊断的起点,决定了你该优先关注哪类工具。
- 第二层:进程层(Who) —— 是哪个或哪些进程在消耗资源?
top、htop、ps是这一层的主力。但关键不是看谁排第一,而是要看它的 资源消耗模式 :是 CPU 持续 100%(计算密集型)?还是内存 RSS 不断增长(内存泄漏)?或是S(Sleeping)状态进程数量暴增(I/O 等待)? - 第三层:系统层(Why) —— 进程为什么这么干?这就需要
netstat、ss、lsof、iostat、iotop、du、find等工具登场。比如,一个 Java 进程 CPU 高,top只能告诉你“是它”,但jstack+jstat才能告诉你“是 GC 频繁”,而netstat -anp | grep <pid>则可能揭示“它正在疯狂重试连接一个已宕机的 Redis 实例”。
提示:这个三层模型,是我踩过无数坑后总结出来的。曾经有一次,
top显示 MySQL 进程 CPU 占用 95%,我以为是 SQL 问题,花了两天优化查询。最后发现,iostat -x 1显示%util100%,iotop显示mysqld的 I/O 等待时间极长,根源是磁盘阵列的 RAID 卡电池失效,导致写缓存被禁用,所有写操作都变成了同步落盘。这就是典型的“没穿透到第三层”导致的误判。
2.2 工具选型逻辑:为什么是 top 、 netstat 、 du ,而不是其他?
标题里点名的三个工具,绝非随意挑选,它们各自覆盖了资源监控的三大核心维度,且具备不可替代性:
-
top:实时动态的“生命体征监护仪”
它的核心价值在于 实时性 和 交互性 。htop虽然更美观,但top是几乎所有 Linux 发行版(包括最小化安装的 CentOS/Ubuntu)的默认标配,无需额外安装。更重要的是,top的交互模式(按P排序 CPU,M排序内存,T排序运行时间)让你能在毫秒级响应中,动态观察一个进程的资源曲线。比如,你怀疑某个 cron 任务在整点触发,就可以在 59 分 50 秒启动top,然后按T观察进程列表顶部的变化,这比任何静态快照都直观。 -
netstat:网络连接的“户籍档案管理员”
尽管ss(socket statistics)在性能上更优(netstat需要读取/proc/net/下多个文件,ss直接调用内核接口),但netstat的输出格式更符合人类直觉,尤其是-tuln参数组合,已成为行业事实标准。-t(TCP)、-u(UDP)、-l(Listening)、-n(Numeric,不解析主机名和服务名)——这四个字母,就是你判断“服务是否真的在监听”、“端口是否被占用”的黄金组合。netstat -ano | findstr :3389(Windows)或netstat -tulnp | grep :3389(Linux)之所以成为高频搜索词,正是因为它是排查远程桌面(RDP)或 SSH 连接问题的第一步。netstat的不可替代性,在于它对LISTEN、ESTABLISHED、TIME_WAIT等 TCP 状态的清晰呈现,这是ss默认输出所欠缺的。 -
du:磁盘空间的“精准测绘员”
df命令只能告诉你/分区还剩多少空间,但它无法回答“这 20G 空间,到底被谁吃了?”du(disk usage)的威力在于它的 递归统计能力 和 路径灵活性 。du -sh /var/*可以快速看到/var下每个子目录的大小,而du -sh /var/log/*

2702

被折叠的 条评论
为什么被折叠?



