【问题标题】:Some JVMs on the box are showing higher CPU utilization盒子上的一些 JVM 显示出更高的 CPU 利用率
【发布时间】:2013-12-02 16:41:06
【问题描述】:

我们有一个跨 6 个盒子的 weblogic 集群。每个盒子有 3 个 JVM。 与其他 CPU 利用率低于 10% 的 JVM 相比,方框 4 上的 2 个 JVM 显示出非常高的 CPU 利用率(在 80-90% 的范围内)。

我们检查了负载平衡。请求被均匀地分布到所有 JVM。所有的 JVM 都在正确地进行 GC,垃圾收集没有问题。每个 JVM 都有相同的 GC 和内存配置。

有什么方法可以找出哪些线程正在使用高 CPU?我们无法重新启动 JVM 或修改它们的任何设置,因为它们是生产 JVM。

【问题讨论】:

    标签: jvm cpu utilization


    【解决方案1】:

    在你的盒子 4 上试试这个外壳。

    show-busy-java-threads.sh

    它会像这样显示java繁忙的线程:


    The stack of busy(0.2%) thread(3901/0xf3d) of java process(3626) of user(zuojing):
    "ApplicationImpl pooled thread 16" daemon prio=10 tid=0x00007fbd54076000 nid=0xf3d waiting on condition [0x00007fbcd9636000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.intellij.util.TimeoutUtil.sleep(TimeoutUtil.java:58)
        at com.intellij.util.io.BaseOutputReader.doRun(BaseOutputReader.java:116)
        at com.intellij.util.io.BaseOutputReader$1.run(BaseOutputReader.java:57)
        at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:454)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:701)
        at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:152)
    
    The stack of busy(0.2%) thread(3897/0xf39) of java process(3626) of user(zuojing):
    "ApplicationImpl pooled thread 15" daemon prio=10 tid=0x00007fbd1c39b800 nid=0xf39 waiting on condition [0x00007fbcd9838000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.intellij.util.TimeoutUtil.sleep(TimeoutUtil.java:58)
        at com.intellij.util.io.BaseOutputReader.doRun(BaseOutputReader.java:116)
        at com.intellij.util.io.BaseOutputReader$1.run(BaseOutputReader.java:57)
        at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:454)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:701)
        ....
    

    然后跟踪堆栈,找出源代码中繁忙的线程在做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多