java 分配cpu使用率_Java-JVM-CPU使用率达到100%

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

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

我找到了这个:

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

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

解决方法:

重现您的问题,当您看到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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值