小编Bog*_*dan的帖子

Hung JVM消耗100%的CPU

我们在Linux 32位(CentOS)上运行Sun JRE 6u20上的JAVA服务器.我们将Server Hotspot与CMS收集器一起使用,并使用以下选项(我只提供了相关的选项):

-Xmx896m -Xss128k -XX:NewSize=384M -XX:MaxPermSize=96m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)

有时,在运行一段时间后,JVM似乎陷入挂起状态,即使我们没有向应用程序发出任何请求,CPU也继续以100%旋转(我们有8个逻辑CPU,所以看起来就像只有一个CPU一样旋转).在这种状态下,JVM不响应SIGHUP信号(kill -3),我们无法通过jstack正常连接它.我们可以用"jstack -F"连接,但输出很狡猾(我们可以看到很多来自JStack的NullPointerExceptions显然是因为它无法"走"某些堆栈).所以"jstack -F"输出似乎没用.

我们已经从"gdb"运行了堆栈转储,并且我们能够匹配旋转CPU的线程ID(我们发现使用"top"和每个线程视图 - "H"选项)并且线程堆栈出现在gdb结果中,它是这样的:

Thread 443 (Thread 0x7e5b90 (LWP 26310)):
#0  0x0115ebd3 in CompactibleFreeListSpace::block_size(HeapWord const*) const () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#1  0x01160ff9 in CompactibleFreeListSpace::prepare_for_compaction(CompactPoint*) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#2  0x0123456c in Generation::prepare_for_compaction(CompactPoint*) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#3  0x01229b2c in GenCollectedHeap::prepare_for_compaction() () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#4  0x0122a7fc in GenMarkSweep::invoke_at_safepoint(int, ReferenceProcessor*, bool) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#5  0x01186024 in CMSCollector::do_compaction_work(bool) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#6  0x011859ee in CMSCollector::acquire_control_and_collect(bool, bool) () from /usr/java/jdk1.6.0_20/jre/lib/i386/server/libjvm.so
#7  0x01185705 …
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
1
解决办法
2万
查看次数

JAVA面向方面编程 - 运行时方面编织和类加载时间方面编织

我来了一篇关于AOP的文章,在那里提到Aspect编织可以在编译时,类加载时间和运行时期间发生.

在java中,我可以想象,而不是理解编译时编程方面实际上会如何发生.代理类在类编译过程中生成(在项目中启用了方面).生成的字节码将具有代理代码.

但我仍然想知道在类加载时间编织和运行时编织期间究竟(实际)发生了什么.代理类是在加载类时生成的吗?方面库是否在.class(编译时)文件中添加任何编程指令以生成代理类?

java aop spring-aop

3
推荐指数
1
解决办法
4341
查看次数

标签 统计

java ×2

aop ×1

spring-aop ×1