熟悉运维的人员,可能经常会遇到系统的监控的报警。通过这些警报,我们们就会分析出系统的故障以及问题的根源,然后进行及时处理。那么Linux如何排查思路问题的?其实分析问题是需要赢经验的,这也是提升运维工程师能力进步的方法之一。所以如果运维工程师拥有自己特有的分析方法,就可以快速处理问题。
分析问题的方法论
我们常用5W2H方法提出性能分析的问题
1.What-什么现象表现
2.When-什么时间出现
3.Why-为什么发生问题
4.Where-哪个组件性能发生问题
5.How much-消耗多少资源
6.How to do-如何解决问题
常见系统资源问题分析
针对目前服务器提供的应用服务,通常需要关注内核CPU调度器功能和性能。
主要是分析线程状态,线程的时间用在什么地方。线程状态的分类一般分为:
on-CPU:执行中,分为用户态时间user和系统态时间sys。
off-CPU:等待,等待CPU、I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。
如果大量时间在on-CPU上,对CPU剖析能够迅速定位问题原因。
如果大量时间处于off-CPU状态,定位问题就会变得复杂费时。
举例说明
查看系统cpu使用情况:
top
查看所有cpu核信息:
mpstat -P ALL 1
查看cpu使用情况及平均负载:
vmstat 1
某个进程cpu的统计信息:
pidstat -u 1 -p pid
跟踪进程内部函数级cpu使用情况:
perf top -p pid -e cpu-clock
MEM
内存是为提高效率,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他的问题。
对于内存的一些概念需要清楚:
主存
缓存
虚拟内存
地址空间
OOM
LINUX内核级SLUB分配器
举例说明
查看系统内存使用情况:
free -m
虚拟内存统计信息:
vmstat 1
查看系统内存情况:
top
获取内存1s采集周期统计信息:
pidstat -p pid -r 1
查看进程的内存映像信息:
pmap -d pid
检测程序内存问题:
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名
DISK I/O
在SSD未成为主流之前,磁盘基本都是机械设备,通常是计算机最慢的子系统,也是容易出现性能瓶颈的设备,因为访问磁盘要涉及到机械操作,访问硬盘和访问内存之间的速度差别是以数量级来计算的。
同样对磁盘的一些概念需要理解:
文件系统
VFS
文件系统缓存
页缓存page cache
缓冲区高速缓存buffer cache
目录缓存
inode
举例说明
查看系统io信息:
iotop
统计io详细信息:
iostat -d -x -k 1 10
查看进程级io的信息:
pidstat -d 1 -p pid
查看系统io请求:
perf record -e block:block_rq_issue -ag
perf report
NETWORK
网络监测是Linux子系统里面最复杂的,有太多太多的原因会引起系统问题,常见的如:延迟、阻塞、冲突、丢包等。而且连接服务器的路由器、交换机、无线设备都可能影响网络,所以很难判断是因为Linux系统网络问题还是其它设备的问题。
举例说明
显示网络统计信息:
netstat -s
显示当前UDP连接状况:
netstat -nu
显示UDP端口号的使用情况:
netstat -apu
显示TCP连接:
ss -t -a
显示sockets摘要信息:
ss -s
显示所有udp sockets:
ss -u -a
显示tcp,etcp状态:
sar -n TCP,ETCP 1
查看网络IO:
sar -n DEV 1
抓包(包为单位输出):
tcpdump -i eth1 host 192.168.1.1 and port 80
抓包(流为单位显示数据内容):
tcpflow -cp host 192.168.1.1
以上就是关于Linux如何排查思路问题的全部内容,想了解更多关于Linux的信息,请继续关注中培教育。