[jboss@prodmachine ~]$ ps -elf | grep java
0 S jboss 8844 1 0 80 0 - 28275 wait 15:30 ? 00:00:00 /bin/sh /usr/java/wildfly/bin/standalone.sh -c standalone.xml
0 S jboss 8896 8844 99 80 0 - 7337773 futex_ 15:30 ? 08:16:14 /usr/java/default/bin/java -D[Standalone] -server -Xms64m -Xmx25600m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=1024m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman,com.newrelic -Djava.awt.headless=true -javaagent:/usr/java/wildfly/newrelic/newrelic.jar -Dorg.jboss.boot.log.file=/usr/java/wildfly/standalone/log/server.log -Dlogging.configuration=file:/usr/java/wildfly/standalone/configuration/logging.properties -jar /usr/java/wildfly/jboss-modules.jar -mp /usr/java/wildfly/modules org.jboss.as.standalone -Djboss.home.dir=/usr/java/wildfly -Djboss.server.base.dir=/usr/java/wildfly/standalone -c standalone.xml
top -n 1 -H -p 8896
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9310 jboss 20 0 28.0g 4.4g 33m S 43.3 15.2 3:16.72 java
9207 jboss 20 0 28.0g 4.4g 33m S 13.8 15.2 42:00.05 java
9292 jboss 20 0 28.0g 4.4g 33m S 13.8 15.2 3:17.87 java
[jboss@prodmachine ~]$ /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/bin/jstack -l 8896 > /tmp/jstack.txt
揭示了这一点
"default task-86" #272 prio=5 os_prio=0 tid=0x00000000090ee800 nid=0x245e waiting on condition [0x00007f3220cee000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000181c9e050> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
但我读到的所有内容都表明,处于“等待”状态的线程不应该占用CPU资源。为什么我会看到这个奇怪的结果?我是不是一路上搞砸了什么?
与其使用命令行来监视线程活动,不如使用Java visual VM,这会更好,而且对您有极大的帮助。
处于“等待”或“Hibernate”状态的线程是否使用CPU?
进入和退出睡眠/等待状态需要时间。这是成本相对较小,但非微不足道,如果调用足够。
问题内容: 我有一个Java应用程序(基于Web),有时显示几个小时的CPU使用率很高(几乎90%)。Linux 命令显示了这一点。重新启动应用程序后,问题消失了。 因此要调查 : 我使用线程转储来查找线程在做什么。发现多个线程处于状态,一些处于其他状态。在进行重复的线程转储时,我确实看到了一些始终处于状态的线程。因此,他们似乎是罪魁祸首。 但是我无法确定是哪个线程正在占用CPU或进入了无限循环(
我有一个Java应用程序(基于web),它有时会在几个小时内显示非常高的CPU利用率(几乎90%)。Linux的TOP命令显示了这一点。重新启动应用程序时,问题就会消失。 所以要调查: 我使用线程转储来查找线程正在执行的操作。有几个线程处于“可运行”状态,一些线程处于其他一些状态。在重复执行线程转储时,我确实看到一些线程总是处于“可运行”状态。因此,他们似乎是罪魁祸首。 但我无法确定,哪个线程占用
> 我是Java多线程的新手。想知道线程池执行器中空闲线程的状态。它在RUNNABLE/WAITING中吗? 如果空闲线程处于RUNNABLE状态,新任务如何附加到空闲线程?AFAIK我们为线程/池分配一个可运行/可调用的对象。但我的问题是ThreadPoolExecitor如何将排队的可运行对象分配给空闲线程??
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 43 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Vendor ID: AuthenticAMD Model name: AM
问题内容: 假设您的Java程序占用了100%的CPU。它有50个线程。您需要查找哪个线程有罪。我没有找到可以提供帮助的工具。当前,我使用以下非常耗时的例程: 运行,其中pid是Java进程的进程ID。找到它的简单方法是运行JDK-中包含的另一个实用程序。最好将jstack的输出重定向到文件。 搜索“可运行”线程。跳过那些在套接字上等待的对象(由于某些原因,它们仍被标记为可运行)。 重复步骤1和2
我对wowza中的cpu使用有问题。 这是可疑的线程。这个线程被占用了高CPU。 这个线程占用了大量cpu。这是jdk bug还是其他? 这是我的环境。 CentOS 5.4版(最终版) WowzaMediaServer-3.1.2 java版本1.6.0_23 java(TM)SE Runtime Environment(构建1.6.0_23-b05)java HotSpot(TM)64位服务器