2010-04-09 37 views
0

我正在做一个tomcat进程的pmap,我看到一些巨大的anon块。从我读的anon块被用于线程堆栈和JNI。我有一个非常适中的线程数。我怎么去找出是什么导致这些巨大的匿名块?pmap中的巨大anon块

00000000ee0d0000 26752K rwx-- [匿名]

00000000efaf0000 33792K rwx-- [匿名]

00000000f1bf0000 25856K rwx-- [匿名]

00000000f3530000 39680K rwx-- [匿名]

(在旁注中是pmap正确的方式来衡量多少内存分配给tomcat?)

回答

0

匿名内存mappin gs用于任何需要动态分配内存的任何事物,包括例如线程堆栈,但也是堆。

0

我有同样的问题,通过pmap,我发现我的Java应用程序中使用JNI的697 [anon]块。它耗尽了记忆。当我评论以下行代码时,问题就消失了。

jEnv-> CallBooleanMethod(m_jobj,jmid,jData);

的方法是从C++到Java端传递一个对象,它被称为多次(> 10000000)

但我不能评论它,我需要调用的方法。

它是由JDK Bug6200343(在许多JNI调用内存泄漏(NewString等)引起的? 我的JDK版本是 Java版本 “1.6.0_19” 的Java(TM)SE运行时环境(建立1.6.0_19-B04 ) Java HotSpot TM服务器VM(版本16.2-b04,混合模式)