Linux服务器响应慢_系统性能全链路排查流程

10次阅读

linux 服务器响应慢需全链路排查:先确认真实慢点(用户感知 vs 系统处理),再依次检查网络连接、应用进程、内核资源四层,每步用轻量命令快速定位瓶颈。

Linux 服务器响应慢_系统性能全链路排查流程

Linux 服务器响应慢,不能只盯着 CPU 或内存看,得从请求入口到后端服务、再到系统底层,一环扣一环地查。关键不是“哪个指标高”,而是“谁在拖慢整个链路”。下面是一套经过验证的全链路排查流程,覆盖网络、应用、系统、硬件四层,每步都可快速验证。

一、确认是否真慢:先分清是“用户感知慢”还是“系统处理慢”

很多问题其实出在客户端或中间链路上,而非服务器本身:

  • curl -w “@curl-format.txt” -o /dev/null -s http://your-api 测真实 HTTP 耗时(含 DNS、TCP 连接、TLS 握手、首字节、总时间),定位卡点在哪一阶段
  • 在服务器本地用 curl -H “Host: example.com” 127.0.0.1:8080/path 绕过 Nginx/ 负载均衡直连应用,对比耗时——若本地快、外网慢,问题大概率在反向代理、防火墙或网络路径
  • 检查客户端是否复用连接(Connection: keep-alive)、是否受浏览器并发限制或 CDN 缓存失效影响

二、网络与连接层:看连接是否堆积、丢包或延迟突增

即使 CPU 空闲,连接队列满、SYN 重传、TIME_WAIT 泛滥也会让新请求卡住:

  • 运行 ss -s 看 total established / time-wait / orphan 数量;若 time-wait 超 6 万且持续不降,检查 net.ipv4.tcp_tw_reuse 是否开启
  • ss -tuln | awk ‘{print $5}’ | cut -d: -f2 | sort | uniq -c | sort -nr | head -10 查高频访问源端口分布,识别异常扫描或短连接风暴
  • 执行mtr –report your-server-ip(从客户端发起)和tcpping -x 5 your-upstream-host 443(在服务端测上游)双向排查路由抖动或中间设备限速

三、应用与进程层:抓实时瓶颈,不依赖日志回溯

别急着翻日志,先用轻量命令锁定“此刻谁在吃资源”:

  • pidstat -u -r -d -p ALL 1:每秒输出所有进程的 CPU、内存缺页、磁盘 IO 等待,一眼看出是计算密集、内存抖动还是 IO 阻塞
  • strace -p $(pgrep -f “java|python|nginx”) -e trace=epoll_wait,read,write,connect -T 2>&1 | head -50:跟踪主进程系统调用耗时,若 epoll_wait 常驻>100ms,说明事件处理不过来(应用逻辑慢或 fd 太多)
  • perf top -p $(pgrep -f app.jar) -g(需 debuginfo):直接看到 Java/Go 应用在哪个函数里循环或锁竞争,比 jstack 更准

四、内核与资源层:查被忽略的隐性压力

CPU 使用率低≠系统健康,这些指标往往沉默但致命:

  • cat /proc/buddyinfo:看内存碎片程度,若 order-10 以上页面为 0,大页分配失败会导致 malloc 慢、JVM GC 卡顿
  • iostat -x 1关注 %util 接近 100 但 await 不高 → 可能是队列深度打满(如云盘 IOPS 上限);若 await 高但 %util 低 → 存储后端响应慢(如 NAS 延迟突增)
  • dmesg -T | grep -i “oom|kill|throttle”:确认是否被 OOM Killer 干掉过进程,或 cgroup throttle 导致 CPU 配额被限(尤其容器环境)
text=ZqhQzanResources