日期:2014-05-17  浏览次数:20927 次

JAVA cpu 100%,怀疑是GC的时候出的问题,求教高手。
描述:
1.在Linux中运行jboss中的web项目,里面有一个socket服务。
2.在程序运行一段时间后,大概20个小时左右,会把CPU资源占用到100%。
3.我用top -Hp <pid>的方式把该进程的所有线程都显示出来,然后发现几个占用CPU资源特别大的线程tid,把tid转换为hex格式后是57a9,在jstack命令中过滤内容出来(jstack <pid>  | grep -A 100 57a9),显示的是


"VM Thread" prio=10 tid=0x00007f06d8089000 nid=0x57b9 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f06d801b800 nid=0x57a9 runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007f06d801d800 nid=0x57aa runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007f06d801f800 nid=0x57ab runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0x00007f06d8021000 nid=0x57ac runnable 

"GC task thread#4 (ParallelGC)" prio=10 tid=0x00007f06d8023000 nid=0x57ad runnable 

"GC task thread#5 (ParallelGC)" prio=10 tid=0x00007f06d8024800 nid=0x57ae runnable 

"GC task thread#6 (ParallelGC)" prio=10 tid=0x00007f06d8026800 nid=0x57af runnable 

"GC task thread#7 (ParallelGC)" prio=10 tid=0x00007f06d8028800 nid=0x57b0 runnable 

"GC task thread#8 (ParallelGC)" prio=10 tid=0x00007f06d802a000 nid=0x57b1 runnable 

"GC task thread#9 (ParallelGC)" prio=10 tid=0x00007f06d802c000 nid=0x57b2 runnable 

"GC task thread#10 (ParallelGC)" prio=10 tid=0x00007f06d802e000 nid=0x57b3 runnable 

"GC task thread#11 (ParallelGC)" prio=10 tid=0x00007f06d802f800 nid=0x57b4 runnable 

"GC task thread#12 (ParallelGC)" prio=10 tid=0x00007f06d8031800 nid=0x57b5 runnable 

"GC task thread#13 (ParallelGC)" prio=10 tid=0x00007f06d8033800 nid=0x57b6 runnable 

"GC task thread#14 (ParallelGC)" prio=10 tid=0x00007f06d8035000 nid=0x57b7 runnable 

"GC task thread#15 (ParallelGC)" prio=10 tid=0x00007f06d8037000 nid=0x57b8 runnable 

"VM Periodic Task Thread" prio=10 tid=0x00007f06d80bf800 nid=0x57c0 waiting on condition 

JNI global references: 1128


------解决方案--------------------
socket没有关闭,建立了太多的socket