当前位置: 首页 > news >正文

Linux 系统下有哪些性能监控与分析的技巧?

Linux 性能监控的核心不在于记住所有命令,而在于快速定位瓶颈所在。通常建议从系统负载入手,依次排查 CPU、内存、磁盘 I/O 和网络连接。

先说结论:性能问题排查应遵循“先整体后局部”的原则,优先使用系统自带工具确认资源瓶颈,再针对性优化。

  • 先定位:使用 top 或 uptime 确认系统负载是否异常(负载超过 CPU 核心数需警惕)。
  • 先做:根据瓶颈类型选择 vmstat、iostat 或 ss 深入分析。
  • 再验证:优化后对比关键指标变化(如 iowait 从 50% 降至 5%),确认问题是否缓解。

常用命令与兼容性说明

以下命令可直接在终端执行,用于快速获取系统状态。注意部分命令在不同发行版中可能存在差异:

uptime
# 查看系统负载和运行时间top -p <PID>
# 实时查看指定进程资源占用(PID 可通过 pgrep <进程名> 获取)
# 注意:旧版 pgrep 可能不支持 -d 参数,建议分步执行vmstat 1
# 查看虚拟内存和 CPU 状态(每秒刷新)iostat -x 1
# 查看磁盘 I/O 统计ss -s
# 查看网络连接状态统计(替代已废弃的 netstat)

关键指标异常阈值参考

在排查前,了解以下指标的常规异常阈值有助于快速判断:

  • Load Average:持续超过 CPU 逻辑核心数的 1.5 倍视为高负载。
  • CPU Usage:us + sy 持续超过 80% 需关注。
  • Memory:available 内存低于总内存 10% 且 swap 频繁使用。
  • I/O Wait:%iowait 持续超过 30% 通常表示磁盘瓶颈。
  • Network:大量 CLOSE_WAIT 或 TIME_WAIT 连接堆积。

分步排查流程

1. 确认系统负载
首先执行 uptime 查看负载平均值。如果负载远高于 CPU 核心数,说明系统过载。

2. 排查 CPU 问题
使用 top 命令,观察 us(用户空间)和 sy(内核空间)占比。如果 us 高,检查占用 CPU 最高的进程;如果 sy 高,可能涉及频繁的系统调用或驱动问题。

3. 排查内存问题
使用 free -h 查看可用内存。注意 Linux 会利用空闲内存做缓存,重点看 available 列而非 free 列。如果 swap 使用量持续增加,说明物理内存不足。

4. 排查磁盘 I/O
使用 iostat 查看%iowait 值。如果该值较高,说明 CPU 在等待磁盘读写,需检查是否有大量日志写入或数据库查询。

5. 排查网络问题
使用 ss -s 查看连接状态。如果发现大量 TIME_WAIT 或 CLOSE_WAIT,可能需要调整内核参数或检查应用连接释放逻辑。

实战案例:模拟高负载排查

假设某服务响应变慢,排查步骤如下:

  1. 执行 uptime 发现 load average 为 8.0,而机器为 4 核,确认过载。
  2. 执行 top 发现某 Java 进程 CPU 占用 90%。
  3. 结合日志发现该进程正在进行大量全表扫描。
  4. 优化 SQL 后,再次观察 top,该进程 CPU 降至 10%,系统负载恢复正常。

怎么验证是否生效

优化措施实施后,需通过具体指标对比确认效果,而非仅凭感觉:

  • CPU 优化:top 中目标进程 CPU 占比应明显下降(例如从 90% 降至 20%)。
  • I/O 优化:iostat 中的%iowait 应降低(例如从 50% 降至 5%)。
  • 业务验证:同时观察业务侧的响应时间是否恢复正常,错误率是否下降。

常见误区与坑

  • 内存误解:不要看到 free 内存少就恐慌,Linux 机制会尽量利用内存做缓存,只要 available 充足通常没问题。
  • top 刷新率:top 默认刷新频率可能掩盖瞬间峰值,必要时使用批处理模式记录日志分析。
  • 连接状态:大量 CLOSE_WAIT 通常不是内核问题,而是应用程序没有正确关闭连接。
  • 命令兼容性:新系统默认可能未安装 netstat,请优先使用 ss;pgrep 参数在不同版本间可能有差异。

参考文档

  • procps-ng 官方文档 (top, vmstat, pgrep)
  • Linux man-pages 项目 (iostat, ss, uptime)
  • sysstat 工具包文档 (iostat)

原文链接:https://www.zjcp.cc/ask/10908.html

http://www.jsqmd.com/news/802283/

相关文章:

  • 开启 AI 艺术创作之门:深度拆解 Stable Diffusion web UI,打造私有化文生图最强阵地
  • 【企业级开发实战】从零构建T100报表:Genero FGL核心语法与模块化设计
  • 为什么医疗陪诊顾问证书值得考?薪资待遇权威背书从业优势三大维度深度解析 - 品牌排行榜单
  • 从初代iPad争议看颠覆性产品如何跨越市场鸿沟
  • 告别角色纠结:在NRF52832上同时跑通主机和从机服务的避坑指南
  • 英特尔与高通合并猜想:从战略互补到产业演进逻辑
  • 基于时间距离视觉Transformer的肺癌纵向CT诊断方法研究
  • PixelAnnotationTool:如何用半自动标注将图像分割效率提升300%?
  • 告别卷积!用ViT思路玩转语义分割:SETR保姆级代码解读与实战(PyTorch版)
  • 别再纠结雷电2了!2015 iMAC升级实测:USB3.0外接三星T7,速度提升4倍够用了
  • 将平面世界立体化:Deep3D实时2D转3D视频转换技术深度解析
  • AI全权代理金融投资:零人工干预的自主决策系统架构与实践
  • 2026年4月优质的滚牙机生产厂家推荐,三轮滚丝机 /滚牙机 /滚丝机 /二轮滚丝机 ,滚牙机企业推荐分析 - 品牌推荐师
  • 从惠普收购Palm看操作系统生态构建:技术、时机与整合的博弈
  • Gemini 2.0 Flash生产级落地:低延迟高并发架构实战
  • 从计算到思考:推理模型与智能体架构的工程实践指南
  • 使用Hermes Agent工具连接Taotoken的自定义提供方配置
  • 使用Node.js后端服务集成Taotoken提供稳定的AI对话功能
  • 解密开源神器:如何用智能内容解放方案重塑你的数字资产管理
  • 在 Node.js 后端项目中快速接入多模型 API 服务
  • NDS游戏资源提取终极指南:Tinke完整使用教程
  • 混元3D 3.0:面向工业管线的多视角一致3D生成新范式
  • Blobity交互库:基于Canvas与弹簧动力学的前端鼠标特效实现
  • codesnips:终端知识卡片工具,提升开发效率的CLI利器
  • 对比直接使用厂商API与通过Taotoken调用在账单清晰度上的差异
  • 华健未来冲刺港股:年亏1.4亿 估值27亿 已获IPO备案
  • 2026年4月有实力的宠物肿瘤科专家医院推荐,宠物医生/宠物心脏彩超科/母狗绝育/宠物心脏超声科,宠物肿瘤科专家医院推荐 - 品牌推荐师
  • 保姆级教程:用MATLAB搞定GM(1,1)模型的三大检验(附完整代码与避坑点)
  • 别再让你的Qt界面有锯齿了!手把手教你用QPainter的Antialiasing和HighQualityAntialiasing提升绘图质感
  • 字根秀秀:免费的 HTML 网页托管服务新版发布202605