加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Linux问题故障定位,看这一篇就够了

发布时间:2019-04-01 15:47:33 所属栏目:Windows 来源:Lucien_168
导读:1. 背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常
副标题[/!--empirenews.page--]

1. 背景

有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情。

Linux问题故障定位,看这一篇就够了

2. 说明

本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题。

3. 分析问题的方法论

套用5W2H方法,可以提出性能分析的几个问题

  • What-现象是什么样的
  • When-什么时候发生
  • Why-为什么会发生
  • Where-哪个地方发生的问题
  • How much-耗费了多少资源
  • How to do-怎么解决问题

4. CPU

4.1 说明

针对应用程序,我们通常关注的是内核CPU调度器功能和性能。

线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:

a. on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sys。

b. off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。

如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于off-cpu状态,定位问题就会费时很多。但是仍然需要清楚一些概念:

  • 处理器
  • 硬件线程
  • CPU内存缓存
  • 时钟频率
  • 每指令周期数CPI和每周期指令数IPC
  • CPU指令
  • 使用率
  • 用户时间/内核时间
  • 调度器
  • 运行队列
  • 抢占
  • 多进程
  • 多线程
  • 字长

4.2 分析工具

说明:

  • uptime,vmstat,mpstat,top,pidstat只能查询到cpu及负载的的使用情况。
  • perf可以跟着到进程内部具体函数耗时情况,并且可以指定内核函数进行统计,指哪打哪。

4.3 使用方式

  1. //查看系统cpu使用情况 
  2. top 
  3.  
  4. //查看所有cpu核信息 
  5. mpstat -P ALL 1 
  6.  
  7. //查看cpu使用情况以及平均负载 
  8. vmstat 1 
  9.  
  10. //进程cpu的统计信息 
  11. pidstat -u 1 -p pid 
  12.  
  13. //跟踪进程内部函数级cpu使用情况 
  14. perf top -p pid -e cpu-clock 

5. 内存

5.1 说明

内存是为提高效率而生,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题。同样对于内存有些概念需要清楚:

  • 主存
  • 虚拟内存
  • 常驻内存
  • 地址空间
  • OOM
  • 页缓存
  • 缺页
  • 换页
  • 交换空间
  • 交换
  • 用户分配器libc、glibc、libmalloc和mtmalloc
  • LINUX内核级SLUB分配器

5.2 分析工具

说明:

  • free,vmstat,top,pidstat,pmap只能统计内存信息以及进程的内存使用情况。
  • valgrind可以分析内存泄漏问题。
  • dtrace动态跟踪。需要对内核函数有很深入的了解,通过D语言编写脚本完成跟踪。

5.3 使用方式

  1. //查看系统内存使用情况 
  2. free -m 
  3.  
  4. //虚拟内存统计信息 
  5. vmstat 1 
  6.  
  7. //查看系统内存情况 
  8. top 
  9.  
  10. //1s采集周期,获取内存的统计信息 
  11. pidstat -p pid -r 1 
  12.  
  13. //查看进程的内存映像信息 
  14. pmap -d pid 
  15.  
  16. //检测程序内存问题 
  17. valgrind --tool=memcheck --leak-check=full --log-file=./log.txt  ./程序名 

6. 磁盘IO

6.1 说明

磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样。要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。

在理解磁盘IO之前,同样我们需要理解一些概念,例如:

  • 文件系统
  • VFS
  • 文件系统缓存
  • 页缓存page cache
  • 缓冲区高速缓存buffer cache
  • 目录缓存
  • inode
  • inode缓存
  • noop调用策略

(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读