1.线上CPU飙升100%问题排查
2.linux查看cpu占用率的码获方法:
线上CPU飙升100%问题排查
互联网公司可能经常面对线上CPU飙升的问题,尤其是取线流量激增时。本篇文章提供一套排查方法,码获帮助快速定位问题。取线
一旦线上系统运行迟缓,码获CPU达到%,取线挤压指标公式源码可能伴随Full GC频率过高,码获进而引发接口超时报警等。取线这时,码获需要迅速采取线上排查策略。取线
首先通过执行“top”命令,码获查看系统中所有进程的取线CPU占用情况。往往第一个高CPU消耗的码获进程(COMMAND列)是我们关注的Java进程。用“top -Hp 进程号”深入该Java进程下所有线程的取线CPU占用情况。为了方便查找,码获需将线程号从十进制转换为十六进制,执行“printf "%x 线程号”,例如打印出的十六进制值用于jstack命令的查找。
通过“jstack 进程号 | grep 线程ID”来识别特定线程的状态。如果线程处于"VM Thread"状态,查看函数源码“os_prio=0 tid= 线程号 nid=十六进制值 runnable”,则为虚拟机的GC回收线程。如果发现多次Full GC事件且持续增大,检查堆内使用情况,如内存溢出,尤其是老年代是否达到了垃圾回收阈值。
若无法定位线程问题,尝试“jmap -dump:format=b,file=filename 进程ID”导出进程内存堆信息至文件,以便通过Eclipse MAT工具分析问题。
常见问题分析包括:1. 内存占用过大导致Full GC频繁发生。执行前几个步骤检查是否已找出内存占用过大的原因。2. 代码存在高CPU消耗操作,如复杂算法、死循环或递归等,执行第1-4步直接定位问题行。3. 线程由于锁使用不当产生死锁,查找相关线索。4. 某接口因阻塞性操作导致整体性能降低,通过压测工具验证。空投预售源码5. 线程因特定原因进入WAITING状态(如CountDownLatch倒计时等待)。
完成上述排查步骤通常能有效定位问题。最后,分享一份涵盖计算机基础、Java等领域的面试手册,旨在帮助小伙伴准备高频面试题,适用于大厂面试。通过实践这些排查方法和利用专业资源,可以有效应对线上CPU飙升问题,优化系统性能。
linux查看cpu占用率的方法:
top
top是最常用的查看系统资源使用情况的工具,包括CPU、内存等等资源。这里主要关注CPU资源。
1.1 /proc/loadavg
load average取自/proc/loadavg。
9. 9. 8. 3/
前三个数字是1、5、分钟内进程队列中平均进程数,包括正在运行的纸牌接龙源码进程+准备好等待运行的进程。
第四个数字分子表示正在运行的进程数,分母是进程总数。
最后一个数字是最近运行的进程ID号。
其中top取的是/proc/loadavg的前三个数。
1.2 top使用
打开top,可以指定更新的周期。
输入H,打开隐藏的线程;输入1,可以显示单核CPU使用情况。
top -H -b -d 1 -n > top.txt,每个1秒统计一次,共次,显示线程细节,并保存到top.txt中。
top采样来源你还依赖于/proc/stat和/proc//stat两个,这两个的详细介绍参考:/proc/stat和/proc//stat。
其中CPU信息对应的含义如下:
us是user的意思,统计nice小于等于0的用户空间进程,也即优先级为~。ffplayer源码下载 ni是nice的意思,统计nice大于0的用户空间进程,也即优先级为~。 sys是system的意思,统计内核态运行时间,不包括中断。 id是idle的意思,几系统处于空闲态。 wa是iowait的意思,统计io等待时间。 hi是hardware interrupt,统计硬件中断时间。 si是software interrupt,统计软中断时间。 最后的st是steal的意思。
perf
通过sudo perf top -s comm,可以查看当前系统运行进程占比。
这里不像top一样区分idle、system、user,这里的占比是各个进程在总运行时间里面占比。
通过sudo perf record记录采样信息,然后通过sudo perf report -s comm。
sar、ksar
sar是System Activity Report的意思,可以用于实时观察当前系统活动,也可以生成历史记录的报告。
要使用sar需要安装sudo apt install sysstat,然后对sysstat进行配置。
sar用于记录统计信息,ksar用于将记录的信息图形化输出。
ksar下载地址在: github.com/vlsi/ksar/re...
sudo gedit /etc/default/sysstat--------------------------------将 ENABLED=“false“ 改为ENABLED=“true“。 sudo gedit /etc/cron.d/sysstat--------------------------------修改sar的周期等配置。 sudo /etc/init.d/sysstat restart--------------------------------重启sar服务 /var/log/sysstat/--------------------------------------------------sar log存放目录
使用sar记录开机到目前的统计信息到文件sar.txt。
LC_ALL=C sar -A > sar.txt
PS:这里直接使用sar -A,在ksar中无法正常显示。
如下执行java -jar ksar.jar,然后Data->Load from text file...选择保存的sar.txt文件。
得到如下的图表。
还可以通过sar记录一段时间的信息,指定采样周期和采样次数。
这些命令前加上LC_ALL=C之后保存到文件中,都可以在ksar中图形化显示。
collectl、colplot
collectl是一款非常优秀并且有着丰富的命令行功能的实用程序,你可以用它来采集描述当前系统状态的性能数据。
不同于大多数其它的系统监控工具,collectl 并非仅局限于有限的系统度量,相反,它可以收集许多不同类型系统资源的相关信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。
同时collectl还可以替代常用工具,比如top、vmstat、ps、iotop等。
安装collectl:
sudo apt-get install collectl
collectl的使用很简单,默认collectl显示cpu、磁盘、网络信息。
collectl还可以显示更多的子系统信息,如果选项存在对应的大写选项,大写选项表示更细节的设备统计信息。
b – buddy info (内存碎片) c – 所有CPU的合一统计信息;C - 单个CPU的统计信息。 d – 整个文件系统Disk合一统计信息;C - 单个磁盘的统计信息。 f – NFS V3 Data i – Inode and File System j – 显示每个CPU的Interrupts触发情况;J - 显示每个中断详细触发情况。 l – Lustre m – 显示整个系统Memory使用情况;M - 按node显示内存使用情况。 n – 显示整个系统的Networks使用情况;N - 分网卡显示网络使用情况。 s – Sockets t – TCP x – Interconnect y – 对系统所有Slabs (系统对象缓存)使用统计信息;Y - 每个slab使用的详细信息。
collectl --all显示所有子系统的统计信息,包括cpu、终端、内存、磁盘、网络、TCP、socket、文件系统、NFS。
collectl --top可以代替top命令:
collectl --vmstat可以代替vmstat命令:
collectl -c1 -sZ -i:1可以代替ps命令。
collectl和一些处理分析数据工具(比如colmux、colgui、colplot)结合能提供可视化图形。
colplot是collectl工具集的一部分,其将collectl收集的数据在浏览器中图形化展示。
colplot的介绍 在此,相关源码可以再 collectl-utils下载。
解压下载的colplot之后,sudo ./INSTALL安装colplot。
安装之后重启apache服务:
suod systemctl reload apache2 sudo systemctl restart apache2
在浏览器中输入 .0.0.1/colplot/,即可使用colplot。
通过Change Dir选择存放经过collectl -P保存的数据,然后设置Plot细节、显示那些子系统、plot大小等等。
最后Generate Plot查看结果。