
Linux 问题故障定位(非常详细)零基础入门到精通,收藏这一篇就够了
发布日期:2025-04-07 01:27:52
浏览次数:7
分类:精选文章
本文共 2822 字,大约阅读时间需要 9 分钟。
系统性能分析指南
背景
在 IT 专业人士的日常工作中,经常会遇到一些疑难问题。尤其是当监控插件无法快速定位问题根源时,往往需要深入服务器进行分析。在这种情况下,技术经验和跨领域知识的积累尤为重要。通过不断Practice和脚踏实地的练习,逐步积累经验,可以将问题定位的效率提升到一个新的高度。
拥有合适的工具可以显著提升工作效率,让你减少无谓的时间浪费,从而专注于解决实际问题。
问题定位方法
在分析问题时,采用5W2H方法可以帮助全面思考并提炼关键问题。具体来说:
- What: 现象为什么这样?
- When: 什么时候发生?
- Why: 为什么会发生?
- Where: 哪个地方出现问题?
- How much: 消耗了多少资源?
- How to do: 如何解决问题?
CPU 分析
4.1 说明
在分析应用程序性能时,CPU 是核心要点之一。通常需要关注内核CPU调度器和线程的状态。
- 线程状态分析:
- on-CPU: 执行中,分为用户态时间(user)和系统态时间(sys)。
- off-CPU: 等待下一轮CPU,包括可执行、匿名换页、睡眠、锁、空闲等状态。
通过分析线程的CPU使用情况,可以快速找出性能瓶颈。
4.2 分析工具
- perf工具: 可以跟踪进程内部函数耗时,并指定内核函数进行统计。
- 常用命令:
uptime
,vmstat
,top
,pidstat
,perf top
.
4.3 使用方式
// 查看系统CPU使用情况top// 查看所有CPU核信息mpstat -P ALL 1// 查看CPU使用情况及平均负载vmstat 1// 查看进程CPU使用情况pidstat -u 1 -p pid// 跟踪进程内部函数级CPU使用情况perf top -p pid -e cpu-clock
内存分析
5.1 说明
内存问题不仅影响性能,也可能引发服务逻辑失败。了解以下概念对分析有帮助:
- 主存: 主机内存。
- 虚拟内存: 系统可以扩展到磁盘。
- 常驻内存: 常常用于缓存。
- 地址空间: 远程内存映射管理。
- OOM: 过度使用内存导致的故障。
- 页缓存: �现代 rifle caching.
- 缺页: 内存中没有相应数据页。
- 换页: 通过磁盘交换数据页。
- 交换空间: 内存管理的重要组成部分。
- 交换: 交换内存到磁盘。
- 分配器: 内核和用户land的内存分配库。
5.2 分析工具
- free、vmstat、top、pmap: 统计内存使用情况。
- valgrind: 检测内存泄漏。
- dtrace: 动态跟踪内核函数。
5.3 使用方式
// 查看系统内存使用情况free -m// 查看虚拟内存统计信息vmstat 1// 查看系统内存详细信息top// 查看进程内存使用情况pidstat -p pid -r 1// 查看进程内存映像信息pmap -d pid
磁盘IO分析
6.1 说明
磁盘IO 是系统性能的主要瓶颈之一。了解磁盘IO的原理和Linux的管理方式对分析有帮助。
- 文件系统层面: VFS、文件系统缓存、页缓存、目录缓存。
- inode层面: inode缓存、noop调用策略。
6.2 分析工具
- iostat、iotop: 统计磁盘IO信息。
- perf record: 跟踪块设备IO操作。
6.3 使用方式
// 查看磁盘IO详细信息iotop// 查看磁盘IO统计信息iostat -d -x -k 1 10// 查看进程级磁盘IO信息pidstat -d 1 -p pid
网络分析
7.1 说明
网络监测是整个系统中的复杂领域之一。延迟、丢包、冲突等问题都可能导致网络性能下降。
- 自适应网卡: 根据网络条件自动调整网速。
- 路由器/交换机: 影响整体网络状态。
7.2 分析工具
- netstat、ss、tcpdump、tcpflow: 分析网络流量和状态。
7.3 使用方式
// 查看网络统计信息netstat -s// 查看TCP连接状态及端口使用情况netstat -nu// 查看网络连接状态netstat -apu// 查看sockets摘要信息ss -t -a// 查看UDP socketsss -s// 查看网络IO信息sar -n TCP,ETCP 1
系统负载分析
8.1 说明
系统负载反映了系统处理的工作量,1分钟、5分钟、15分钟的Load Average为重要指标。
8.2 分析工具
- uptime: 查看系统负载状态。
- vmstat: 统计系统调用耗时。
- perf record: 分析系统调用的耗时情况。
8.3 使用方式
// 查看系统负载情况uptime// 查看系统调用的耗时情况vmstat 1// 跟踪指定系统调用strace -c -p pid// 查看内核日志dmesg
火焰图分析
9.1 说明
火焰图展示调用栈,y轴表示函数调用层数,x轴表示抽样宽度。通过火焰图可以快速定位耗时较长的函数。
9.2 安装依赖库
// 安装SystemTap yum install systemtap systemtap-runtime// 安装内核调试库 debuginfo-install --enablerepo=debuginfo search kernel debuginfo-install --enablerepo=debuginfo search glibc
9.3 使用方式
// 生成CPU级火焰图sh ngx_on_cpu_u.sh pidcd ngx_on_cpu_u// 查看CPU内部火焰图(示例)python -m SimpleHTTPServer 8088
案例分析:Nginx 集群异常现象
10.1 细节描述
2017年9月25日,上线了一个Nginx集群,监控插件显示大量的499和5xx状态码,并且每台服务器的CPU使用率持续升高。
10.2 分析过程
- 请求流量分析: Monitoring插件显示流量反而下降,未直接导致问题。
- 响应时间分析: 表现为增加,提示后端服务瓶颈可能存在。
10.3 系统CPU分析
- 顶分析: 发现Nginx worker的CPU使用率居高不下。
- perf分析: 针对Nginx进程进行CPU级别分析,发现占用高的模块为
free
和malloc
,以及json解析
函数。
10.4 火焰图分析
- 用户态火焰图: 多次调用
json解析
函数导致CPU占用高。 - 系统态火焰图: 尽管系统时间占比较低,但
free
和malloc
操作频繁,占用CPU时间。
10.5 解决方案
优先解决CPU高问题,关闭占用高的模块,观察后端服务时间拉长是否依然存在。结果表明,无需改变后端服务时,可以通过CPU占用降低解决问题。
在实际工作中,应综合利用各种性能分析工具和实战经验,快速定位问题根源,并通过优化代码逻辑和调整配置来提升性能。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月18日 18时30分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Elasticsearch面试题
2023-01-24
2024年非科班的人合适转行做程序员吗?
2023-01-24
Java基础:按位运算符
2023-01-29
LeetCode Text Justification
2023-01-31
LeetCode – Refresh – 4sum
2023-01-31
leetcode题解206-反转链表
2023-01-31
leftjoin多个on条件_MySQL:left join 避坑指南
2023-01-31
Less 日常用法
2023-01-31
lib/libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found (required by /lib/x86_64-linux-gnu/libLLVM-15
2023-01-31
libmpg123 解码库用法
2023-01-31
libssh2编译部署详解
2023-01-31
LibTorch之激活函数层
2023-01-31
LibTorch实现MLP(多层感知机)
2023-01-31
LibTorch框架学习
2023-01-31
libvirt TLS
2023-01-31
License Server上找不到指定版本的XenApp License
2023-01-31
License授权
2023-01-31