# shell_cmd **Repository Path**: tang_ai/shell_cmd ## Basic Information - **Project Name**: shell_cmd - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-01 - **Last Updated**: 2026-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # linux_server_doctor.sh — Linux 服务器体检与瓶颈定位 零依赖的单文件巡检脚本:一次采样窗口内采集 CPU/负载/内存/Swap/磁盘空间/inode/磁盘IO/网络吞吐/TCP 状态/进程句柄等指标,自动输出带阈值标记的体检报告和「瓶颈定位结论 + 证据 + 建议」。 ## 快速开始 ```bash sudo bash linux_server_doctor.sh # root 下信息最全 sudo bash linux_server_doctor.sh -i 3 -o /tmp/report.txt # 采样3秒, 报告落盘 sudo bash linux_server_doctor.sh -d # 附加: / 一级目录空间扫描(较慢) bash linux_server_doctor.sh -n # 无颜色(重定向/邮件场景) ``` 退出码可用于巡检联动:`0`=健康,`1`=有警告,`2`=有严重项。 ## 输出内容 | 章节 | 指标 | 瓶颈信号 | |---|---|---| | 2 CPU/负载 | 利用率分解(user/sys/iowait/steal)、load、运行队列、上下文切换、PSI | load>核数×2;iowait 高→看磁盘;steal 高→宿主机超卖 | | 3 内存/Swap | 可用内存、缓存、swap 占用与换页速率、脏页、OOM 记录、PSI | 可用<5%;换页速率持续非 0;OOM | | 4 空间/inode | 各分区使用率、inode 使用率 | >90% 空间或 inode 快耗尽(大量小文件) | | 5 磁盘 IO | 每块盘 util%、await、IOPS、读写字节吞吐、队列深度、每进程 IO、D 状态进程 | util>95% 或 await>100ms;D 进程堆积 | | 6 网络 | 每网卡收发速率与链路带宽占比、错误/丢包增量、TCP 各状态数、新建连接速率、重传率、TOP 对端 IP | 重传>10%;带宽>90%;SYN_RECV 暴涨;CLOSE_WAIT 堆积 | | 7 进程/句柄 | 进程总数、僵尸、D 状态、系统 fd 使用率 | fd>80%;僵尸堆积 | | 8 内核日志 | OOM / I/O error / 硬件错误关键字 | — | | 9 瓶颈定位 | 按严重度排序的结论:证据链 + 处理建议 | 首要嫌疑=评分最高子系统 | | 10 汇总 | 健康评分(100 起,严重-20/警告-7)、发现明细 | — | ## 瓶颈定位逻辑 1. **CPU 高但 iowait 也高** → 判为「CPU 等 IO」,引导去看磁盘结论而不是加 CPU。 2. **CPU 高且 sys>30%** → 系统态瓶颈(锁竞争/短连接风暴),建议 `perf top`、`strace`。 3. **CPU 高且 steal 高** → 虚拟化超卖,与业务无关。 4. **swap 换页活跃 或 PSI 内存压力高 或 可用<5%** → 内存瓶颈,配合 TOP 内存进程定位。 5. **磁盘 util/await 饱和 或 PSI-IO 高 或 D 进程多** → 磁盘 IO 瓶颈,配合每进程 IO 排名。 6. **重传率/丢包/带宽占比/SYN_RECV 超阈值** → 网络瓶颈,配合 TOP 对端 IP 判断是否被刷。 7. 各子系统按严重度(3 严重/2 警告)排序,第一个即「首要嫌疑」。 ## 依赖与兼容 - 必须:bash 4+、awk(gawk/mawk/busybox 均可)、ps、df、grep、sort。 - 可选(缺失自动降级为 /proc 采样):sysstat(iostat/sar/pidstat)、iotop、ss、dmesg/journalctl。 - 已在纯 /proc 采样路径上验证计算逻辑(见 `test_linux_server_doctor.sh`,27 项断言)。 - 全部阈值在脚本头部 `T_*` 变量处可调。 ## 测试 ```bash bash -n linux_server_doctor.sh # 语法 bash test_linux_server_doctor.sh # 伪造采样数据的函数级断言 ```