当前位置:首页 > 技术 > 正文内容

Linux高负载问题诊断与性能分析方法

访客 技术 2026年7月23日 1

Load(系统负载)是衡量服务器工作强度的重要指标,反映的是在特定时间段内(通常为1分钟、5分钟、15分钟)处于运行或等待状态的任务数量。当Linux系统出现高负载时,可能表现为CPU使用率飙升、内存耗尽、磁盘I/O阻塞或网络延迟等问题。通过一系列系统工具可以有效定位并解决此类性能瓶颈。

一、系统负载类型分析

场景1:高CPU使用率伴随高Load

这种情况通常表明有进程持续占用大量CPU资源,导致任务队列积压。

  • 使用 top 命令找出CPU占用最高的进程PID;
  • 执行 top -Hp [PID] 查看该进程中各线程的CPU消耗情况;
  • 若目标进程为Java应用,可通过 jstack [PID] 输出线程栈信息以辅助排查;
  • 将高负载线程ID转换为十六进制:printf "%x\n" tid
  • 在jstack输出中搜索对应十六进制值,定位具体执行方法和调用链。

场景2:低CPU使用率但高Load

此类现象多由I/O等待引起,进程因等待磁盘或设备响应而进入不可中断状态。

  • 观察 top 中的 %wa 字段,若数值偏高说明存在严重I/O等待;
  • 运行 iostat -d -x -m 1 10 检查块设备的利用率、响应时间和I/O队列长度;
  • 使用 sar -n DEV 1 10 分析网络接口的数据吞吐和错误率;
  • 查找处于D(Disk Sleep)或R(Running)状态的进程:
ps -e -L h o state,cmd | awk '{if($1=="D"||$1=="R") print}' | sort | uniq -c | sort -nr

结果中计数较高的命令即为潜在I/O密集型程序。

二、基于系统工具的深度分析

2.1 使用 vmstat 进行全局资源监控

命令格式:vmstat [delay] [count],例如每秒刷新一次:vmstat 1

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  1      0 2798000   2076 6375040    0    0    10    76   10   49  6  2 91  1  0

关键字段解释:

  • r:运行队列中的进程数。若长期大于CPU核心数,表示系统过载;
  • b:处于不可中断睡眠状态(如等待I/O)的进程数量;
  • us:用户空间进程消耗的CPU时间百分比;
  • sy:内核空间系统调用所占CPU时间,过高可能意味着频繁的系统调用或中断;
  • wa:CPU等待I/O完成的时间比例,超过20%需关注存储性能;
  • id:CPU空闲时间占比,持续接近0且sy远高于us,提示CPU资源紧张;

常见判断准则:

  • r > 4 并且 id < 40%,说明CPU压力较大;
  • swap in (si) / swap out (so) 持续非零,表明物理内存不足;
  • I/O读写(bi/bo)频繁且b队列增长,说明磁盘I/O存在瓶颈。

2.2 使用 top 定位高资源消耗进程

启动命令:top -c 可显示完整命令路径。

top - 19:53:49 up 2 days,  7:57,  3 users,  load average: 0.76, 0.79, 0.58
%Cpu(s):  2.4 us,  1.4 sy,  0.0 ni, 95.0 id,  1.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 12304204 total,  2800864 free,  3119064 used,  6384276 buff/cache

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
29884 root      20   0 5346580 929332  14556 S   0.0  7.6   6:19.19 /opt/jdk1.8.0_144/bin/java ...
  875 root      20   0  729524 563424  38612 S   3.1  4.6  93:22.70 kube-apiserver ...
 3870 nfsnobo+  20   0  910376 317248  22812 S   1.6  2.6  42:29.59 /bin/prometheus ...

操作技巧:

  • P 键按CPU使用率排序;
  • 结合日志文件(如/var/log/messages、应用日志)分析异常行为;
  • 对可疑进程进一步使用strace跟踪系统调用。

三、处理低CPU高负载的典型场景

即使CPU空闲,load值仍可能很高,这通常是由于大量进程处于不可中断睡眠(D状态),无法被调度执行。

诊断步骤:

  • 查看是否存在D状态进程:ps -eo state,pid,cmd | grep "^D"
  • D状态进程无法通过kill终止,只能等待其依赖资源释放或重启系统;
  • 常见于NFS挂载失效、磁盘故障、驱动卡死等底层I/O问题;
  • 配合dmesg检查内核日志是否有硬件报错信息。

示例命令综合输出:

# 统计处于运行或阻塞状态的进程
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D") print $0}' | sort | uniq -c | sort -k1nr

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。