博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记java应用linux服务单个CPU使用率100%分析
阅读量:5023 次
发布时间:2019-06-12

本文共 683 字,大约阅读时间需要 2 分钟。

之前在做项目的过程中,项目完成后在linux服务器上做性能测试,当服务跑起来的时候发现cpu使用率很奇怪,java应用把单个cpu跑满了,其他cpu利用率0%。

  

 

刚开始遇到这问题的时候我第一时间反应使用java 自带的jconsole工具去分析,具体远程jconsole工具使用参考我另外一篇博客,分析结果后只发现创建了很多的es client对象,其他完全看不出任何异常。

我就把该部分代码给屏蔽掉,再启动服务的发现问题还是存在,那说明不是es 的client对象把cpu消耗了。

于是我又想到使用java的jvisualvm 工具,并且对代码进行死循环和死锁检测,也没有发现问题。

最后我使用了jstack工具分析出了当前正在使用cpu的线程,jstack的使用参考,上面有详细说明步骤及说明。

最后分析结果:

 

查看结果,可以发现是  ContentManager类的init方法一致在执行,最后找到该代码,

发现该代码中有一个while(true)代码,该代码本来的用意是用来做一个消费者代码解耦用的,现在看来这样的写法导致一个死循环,无法退出,所以造成cpu单核利用率达到100%。

到这里,造成cpu单核利用率100%的原因就算找到了,剩下的就是优化这段代码了。

结论:

      经过请教公司的老员工和自己分析得到的结论就是代码中如果出现死循环,就会造成单核CPU利用高的一个原因。

     所以以后在使用while(true)这样代码的时候得留意造成死循环。

 

转载于:https://www.cnblogs.com/kobe-blolg/p/8203976.html

你可能感兴趣的文章
接口测试框架1
查看>>
primefaces p:tableData 显示 List<List>
查看>>
css如何引入外部字体?
查看>>
ansible之setup、条件判断、tags、循环handlers
查看>>
数据泵如何生成导出文件的DDL脚本
查看>>
Git/Bitbucket Workflow
查看>>
pygame学习资料
查看>>
6.上传前图片预览
查看>>
腾讯云:搭建 Node.js 环境
查看>>
status 返回当前请求的http状态码
查看>>
Docker基本操作
查看>>
向值栈放数据
查看>>
List集合(有序单列集合)
查看>>
初识跨终端Web
查看>>
CountDownTimer完整具体演示样例
查看>>
ubuntu删除g2o
查看>>
ThreadLocal的认知与见解
查看>>
利用Jenkins自动部署工具间接构建kettle的调度平台
查看>>
关于 '0' === 0 浅析
查看>>
初始化mysql数据库时提示字符编码错误的解决办法
查看>>