JAVA和CentOS 6.3带来的高CPU负载
我看到运行java程序时cpu利用率很高。我发现jstack可以帮助调试它卡住并占用CPU的地方。我用jstack获得了输出,发现很少有线程处于阻塞状态 在这里,我使用了java 1.7,为了确认负载问题,我在同一个操作系统(即CentOS 6.3)上用旧的1.6替换了java,但问题仍然存在,因为我已经使用java 1.6(同样也是1.7)和CentOS 5.4的组合进行了测试,这两种组合运行良好,占用的cpu更少 除了centos 6.3的操作系统出现负载问题外,没有任何更改 我如何找到将线程指向jstack输出的相关代码,以下是我发现的输出JAVA和CentOS 6.3带来的高CPU负载,java,multithreading,performance,cpu,centos6,Java,Multithreading,Performance,Cpu,Centos6,我看到运行java程序时cpu利用率很高。我发现jstack可以帮助调试它卡住并占用CPU的地方。我用jstack获得了输出,发现很少有线程处于阻塞状态 在这里,我使用了java 1.7,为了确认负载问题,我在同一个操作系统(即CentOS 6.3)上用旧的1.6替换了java,但问题仍然存在,因为我已经使用java 1.6(同样也是1.7)和CentOS 5.4的组合进行了测试,这两种组合运行良好,占用的cpu更少 除了centos 6.3的操作系统出现负载问题外,没有任何更改 我如何找到将线
OS - CentOS 6.3 x86_64 (2.6.32-279.el6.x86_64)
CPU core - 8
Ram - 16GB
Java version - "1.7.0_17"
jstack输出:
Deadlock Detection:
No deadlocks found.
none
null_check
null_assert
range_check
class_check
array_check
intrinsic
bimorphic
unloaded
uninitialized
unreached
unhandled
constraint
div0_check
age
predicate
loop_limit_check
Thread 4514: (state = BLOCKED)
Locked ownable synchronizers:
- None
Thread 4493: (state = BLOCKED)
- java.lang.Object.wait(long) @bci=0 (Interpreted frame)
- java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=135 (Interpreted frame)
- java.lang.ref.ReferenceQueue.remove() @bci=2, line=151 (Interpreted frame)
- java.lang.ref.Finalizer$FinalizerThread.run() @bci=3, line=177 (Interpreted frame)
Locked ownable synchronizers:
- None
Thread 4491: (state = BLOCKED)
- java.lang.Object.wait(long) @bci=0 (Interpreted frame)
- java.lang.Object.wait() @bci=2, line=503 (Interpreted frame)
- java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=133 (Interpreted frame)
Locked ownable synchronizers:
- None
Java信息输出:
Java System Properties:
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 23.7-b01
sun.boot.library.path = /usr/java/jdk1.7.0_17/jre/lib/amd64
hadoop.root.logger = INFO,console
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = US
user.dir = /home/ravi
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.7.0_17-b02
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /usr/java/jdk1.7.0_17/jre/lib/endorsed
line.separator =
VM Flags:
-Xmx4000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=//opt/cloudera/parcels/CDH-4.2.1-1.cdh4.2.1.p0.5/lib/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=//opt/cloudera/parcels/CDH-4.2.1-1.cdh4.2.1.p0.5/lib/hadoop -Dhadoop.id.str= -Dhadoop.root.logger=INFO,console -Djava.library.path=//opt/cloudera/parcels/CDH-4.2.1-1.cdh4.2.1.p0.5/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xms256m -Dhadoop.security.logger=INFO,NullAppender
阻塞的线程不使用任何CPU。就像大卫说的,你对那些可以运行的线程感兴趣。这些可能正在使用CPU。@DavidSchwartz:同意,但应该更多地等待,正如我所说的CentOS 6.3内核版本“2.6.32-279.el6.x86_64”本身看起来有缺陷,有人对此进行了更新吗。裁判: