linux进程占用cpu过高cpu100% 怎么解决


us(user):表示 CPU 在用户运行的时间百分比通常用户 CPU 高表示有应用程序比较繁忙。典型的用户程序有:数据库、Web 服务器等
sy(sys):表示 CPU 在内核态运行的时间百分比(不包括中断),通瑺内核态 CPU 越低越好否则表示系统存在某些瓶颈。
ni(nice):表示用 nice 修正进程优先级的用户进程执行的 CPU 时间nice 是一个进程优先级的修正值,如果进程通过它修改了优先级则会单独统计 CPU 开销。
wa(iowait):表示 CPU 在等待 I/O 操作完成所花费的时间通常该指标越低越好,否则表示 I/O 存在瓶颈可以用 iostat 等命令做进一步分析。
hi(hardirq):表示 CPU 处理硬中断所花费的时间硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,需要有中断控制器參与特点是快速执行。
si(softirq):表示 CPU 处理软中断所花费的时间软中断是由软件程序(如网络收发、定时调度等)发出的中断信号,特点是延遲执行
st(steal):表示 CPU 被其他虚拟机占用的时间,仅出现在多虚拟机场景如果该指标过高,可以检查下宿主机或其他虚拟机是否异常

排查用戶 CPU 使用率高
用户 CPU 使用率反映了应用程序的繁忙程度,通常与我们自己写的代码息息相关
1)、通过 top 命令找到 CPU 消耗最多的进程号;
2)、通过 top -Hp 进程號命令找到 CPU 消耗最多的线程号(列名仍然为 PID);
3)、通过printf "%x\n" 线程号命令输出该线程号对应的 16 进制数字;
4)、PID进程在内核调用情况。如果是应用可通过 jstack 进程号 | grep 16进制线程号 -A 10 命令找到 CPU 消耗最多的线程方法堆栈

本文永久更新链接地址

}

1查找飙升进程:28207


    

    

    

    

发现是gc线程在占用cpu。


    

发现ygc和fgc都比较频繁


    

从上面分析可以看出,CPU飙升都是GC线程在频繁执行。而且每次FGC执行都释放不了多少内存怀疑有内存泄露。需偠dump出内存分配信息供分析。


    

7下载dump文件,并使用本地MAT工具进行分析

下面是阿里出的工具,原理就是上面的步骤

}

我要回帖

更多关于 linux 进程占用cpu 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信