排查顺序1、全局top/htop/atop命令查看进程/线程、CPU、内存占用、CPU占用;dstat2查看CPU、磁盘IO、网络IO、Paging、中断、切换、系统I/O状态;vmstat2查看内存使用情况和内存状态;iostat-d-x2查看所有磁盘IO状态和系统I/O状态;iotop查看IO前端进程,系统I/O状态;perftop查看占用CPU最多的函数和CPU使用率;perfrecord-ag--sleep15perf报告,查看CPU事件占比、调用堆栈、CPU占用率;sar-nDEV2查看网卡Throughput,网卡状态;/usr/share/bcc/tools/filetop-C查看各个文件的读写,系统的I/O状态;/usr/share/bcc/tools/opensnoop显示正在打开的文件,系统的I/O状态;mpstat-PALL1单核CPU是否不堪重负;psaux--sort=-%cpu按CPU使用率排序,找出消耗CPU最多的进程;ps-eopid、通信、rss|awk'{m=$3/1e6;s["*"]+=m;s[$2]+=m}END{for(nins)printf"%10.3fGB%s\n",s[n],n}'|排序-nr|head-20统计前20个内存使用情况;awk'NF>3{s["*"]+=s[$1]=$3*$4/1e6}END{for(nins)printf"%10.1fMB%s\n",s[n],n}'/proc/slabinfo|排序-nr|head-20统计内核前20个slab的占用情况;2、进程分析,进程占用资源pidstat2-p进程号,查看可疑进程的CPU占用情况;pidstat-w-p进程号,查看可疑进程的上下文切换状态;pidstat-d-p进程号,查看可疑进程的IO状态;p进程号,查看该进程打开的文件;strace-f-T-tt-p进程号,显示进程发起的系统调用;3.协议栈分析,连接/协议栈状态ethtool-S查看网卡硬件状态;猫/proc/net/softnet_stat/ifconfigeth1查看网卡驱动;netstat-nat|awk'{printawk$NF}'|sort|uniq-c|sort-n查看连接状态分布;ss-ntp或netstat-ntp查看连接队列;netstat-s查看协议栈状态;4.MethodologyRED方法:监控WeaveCloud在监控微服务性能时提出的服务的请求数(Rate)、错误数(Errors)、响应时间(Duration)。USE方法:监控系统资源利用率(Utilization)、饱和度(Saturation)和错误数(Errors)。5、性能分析工具从Linux内核的各个子系统入手,总结了在对各个子系统进行性能分析时可以选择的工具。然而,虽然这张图是性能分析的最佳参考之一,但它还不够具体。比如当你需要查看某个性能指标时,这张图中对应的子系统部分可能有多个性能工具可供选择。但实际上,并非所有这些工具都适用。具体使用哪一个,还是要找各个工具的说明书,通过对比分析做出选择。6.CPU分析思路7.内存分析思路接下来我们来看内存。从内存的角度来看,主要的性能指标是系统内存的分配和使用、进程内存的分配和使用以及SWAP的数量。下图列出了常见的内存性能指标。8、IO分析思路从文件系统和磁盘I/O的角度来看,主要的性能指标是文件系统的使用情况,cache和buffer的使用情况,以及磁盘I/O的利用率、吞吐量和延迟。下图列出了常见的I/O性能指标。9.网络分析思路从网络的角度来看,主要的性能指标有吞吐量、响应时间、连接数、丢包数等,根据TCP/IP网络协议栈的原理,我们可以进一步细化这些性能指标转化为协议每一层的具体指标。这里我也用一张图从链路层、网络层、传输层和应用层列出了每一层的主要指标。10.基准测试工具除了性能分析,很多时候,我们还需要对系统性能进行基准测试。例如在文件系统和磁盘I/O模块中,我们使用fio工具来测试磁盘I/O的性能。在网络模块中,我们使用iperf、pktgen等来测试网络的性能。在很多基于Nginx的案例中,我们使用ab、wrk等来测试Nginx应用的性能。
