ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Java】 服务器cpu过高怎样排查和办理? [打印本页]

作者: 东湖之滨    时间: 2024-6-13 20:46
标题: 【Java】 服务器cpu过高怎样排查和办理?
前言

对于互联网公司,线上CPU飙升的问题很常见(比方某个运动开始,流量突然飙升时),按照本文的步骤排查,根本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。
线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,接着就是各种报警:比方接口超时报警等。此时急需快速线上排查问题。
不管什么问题,既然是CPU飙升,肯定是查一下耗CPU的线程,然后看看GC。
一、常见能够引起CPU100%异常的情况都有哪些?

颠末垃圾回收每次释放的内存都少于2%很轻易又被新生对象填满,JVM快速进入下一次垃圾回收,无限循环,由此引起频繁的GC长期消耗我们服务器CPU资源,从而使CPU使用率达到100%
我们可以使用-XX:-UseGCOverheadLimit这个参数关闭GC overhead limit exceeded,但如许治标不治本,建议检查应用程序的内存使用是否合理以及是否需要增长堆内存。
二、服务器CPU使用率飙升异常,黄金4步排查法

   jstack pid |grep tid -A 50
  

获取到线程堆栈信息就好办了,以上便是接纳单线程模拟一个复杂的正则匹配的堆栈示例图,可以看得出线程都在指向regex.Pattern,在生产多线程情况下这个复杂正则匹配会导致CPU利用率奇高。
三、排查 CPU 故障的常用命令


四、什么场景会造成 CPU 低而负载确很高呢?

负载总结为一句话就是:需要运行处置惩罚但又必须等待队列前的进程处置惩罚完成的进程个数。具体来说,也就是如下两种情况:
等待被授权予 CPU 运行权限的进程、等待磁盘 I/O 完成的进程。
CPU 低而负载高也就是说等待磁盘 I/O 完成的进程过多,就会导致队列长度过大,如许就体现到负载过大了,但实际是此时 CPU 被分配去执行别的使命或空闲,具体场景有如下几种:
五、监控发现线上机器内存占用率居高不下,怎样分析进行优化?


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4