ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-JVM-CPU使用率达到100%

2019-11-22 19:10:36  阅读:586  来源: 互联网

标签:performance java garbage-collection


我有一个Java程序,该程序有时会同时变成100%CPU使用率和睡眠状态.该程序不是多线程的.

环顾四周,我认为最可能的原因是我对垃圾收集运行Java解释器的方式中的错误或某些不匹配.我只能认为100%的CPU使用率是因为GC.我为程序使用Xmx分配了足够的内存,并且该程序甚至在我分配的数量附近也无法运行.我分配的数量也远远少于机器上可用的总内存.

我找到了这个:

http://code.google.com/p/spymemcached/issues/detail?id=279

在stackoverflow.com上也有提及,例如:

CMS garbage collector – when does it run?

不过,我找不到解决方案.这是JVM中的错误吗?如果是,我该如何解决?

编辑:
我在这里添加了jstack输出的粘贴:http://pastebin.com/Au0V9FCN

解决方法:

重现您的问题,当您看到CPU饱和时,请在Java进程上执行JSTACK转储,并使用OS实用程序捕获Process CPU及其线程CPU故障(Linux中为ps -L).您实际上应该设置一个脚本,以大约10或20倍1秒的间隔进行采样.

此后,如果您在Linux上运行,则可以将LWPid与JSTACK输出交叉引用,只需将LWPID从ps -L转换为十六进制,那么您应该很好地进行JSTACK的输出.

此时,您将清楚了解应用程序上的CPU消耗量.

如果问题出在GC上,那么您将看到GC线程在占用CPU,这时JConsole将有助于确定更多的根本原因.否则,您会清楚地注意到是谁造成了CPU消耗,您可以采取相应的措施.

附言我的示例在linux上,如果您未在运行linux,则可以通过谷歌找到获取进程CPU故障转储的方法.

让我知道您发现了什么.

标签:performance,java,garbage-collection
来源: https://codeday.me/bug/20191122/2062121.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有