一个接口程序,功能为,从数据源提供的VC写的API获取数据,接口程序是JAVA写的,但是从API获取数据处使用的是VC,然后用JNI将得到的消息(数据)传递给JAVA,JAVA程序再做后续处理。 
VM 参数为: 
-Dcom.sun.management.jmxremote.port=6050 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xms1024m -Xmx1610m 现在程序在跑了一段时间后监控台会出现如下错误,请求专家帮忙诊断是哪里出的错: 
(注,原来同事说是JDK的BUG,后来把JDK从1.5升级到1.6后,错误依然) 

# An unexpected error has been detected by Java Runtime Environment: 

# java.lang.OutOfMemoryError: requested 8192000 bytes for GrET in C:\BUILD_AREA\ 
jdk6_13\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space? 

#  Internal Error (allocation.inline.hpp:42), pid=2460, tid=2404 
#  Error: GrET in C:\BUILD_AREA\jdk6_13\hotspot\src\share\vm\utilities\growableA 
rray.cpp 

# Java VM: Java HotSpot(TM) Client VM (11.3-b02 mixed mode windows-x86) 
# An error report file with more information is saved as: 
# D:\tenfore\hs_err_pid2460.log 

# If you would like to submit a bug report, please visit: 
#  http://java.sun.com/webapps/bugreport/crash.jsp 

并在程序目录下生成一个错误日志,hs_err_pid***.log(*为进程号),内容如下: 

# An unexpected error has been detected by Java Runtime Environment: 

# java.lang.OutOfMemoryError: requested 8192000 bytes for GrET in C:\BUILD_AREA\jdk6_13\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space? 

#  Internal Error (allocation.inline.hpp:42), pid=2460, tid=2404 
#  Error: GrET in C:\BUILD_AREA\jdk6_13\hotspot\src\share\vm\utilities\growableArray.cpp 

# Java VM: Java HotSpot(TM) Client VM (11.3-b02 mixed mode windows-x86) 
# If you would like to submit a bug report, please visit: 
#  http://java.sun.com/webapps/bugreport/crash.jsp 
# ---------------  T H R E A D  --------------- Current thread (0x6d1a4000):  VMThread [stack: 0x6d230000,0x6d280000] [id=2404] Stack: [0x6d230000,0x6d280000] 
[error occurred during error reporting (printing stack bounds), id 0x80000001] VM_Operation (0x6ea5f6b8): GenCollectForAllocation, mode: safepoint, requested by thread 0x6de10c00 

解决方案 »

  1.   

    接上面错误内容: ---------------  P R O C E S S  --------------- Java Threads: ( => current thread ) 
      0x6dfd4000 JavaThread "RMI TCP Connection(6)-172.16.25.129" daemon [_thread_in_native, id=3348, stack(0x6e970000,0x6e9c0000)] 
      0x6e698400 JavaThread "RMI TCP Connection(4)-172.16.25.129" daemon [_thread_in_native, id=3416, stack(0x71240000,0x71290000)] 
      0x7001c000 JavaThread "RMI TCP Connection(2)-172.16.25.129" daemon [_thread_blocked, id=3372, stack(0x711a0000,0x711f0000)] 
      0x70018800 JavaThread "JMX server connection timeout 51" daemon [_thread_blocked, id=3812, stack(0x71150000,0x711a0000)] 
      0x6ff86c00 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=1492, stack(0x71100000,0x71150000)] 
      0x6dfdc400 JavaThread "AnonymousIoService-16" daemon [_thread_blocked, id=1860, stack(0x6f7f0000,0x6f840000)] 
      0x6de8d800 JavaThread "AnonymousIoService-15" daemon [_thread_blocked, id=1996, stack(0x6f7a0000,0x6f7f0000)] 
      0x6de3c000 JavaThread "AnonymousIoService-14" daemon [_thread_blocked, id=3600, stack(0x6f750000,0x6f7a0000)] 
      0x6de39400 JavaThread "AnonymousIoService-13" daemon [_thread_blocked, id=3684, stack(0x6f700000,0x6f750000)] 
      0x6de36c00 JavaThread "AnonymousIoService-12" daemon [_thread_blocked, id=3680, stack(0x6f6b0000,0x6f700000)] 
      0x6de27400 JavaThread "AnonymousIoService-11" daemon [_thread_blocked, id=3676, stack(0x6f660000,0x6f6b0000)] 
      0x6e494c00 JavaThread "AnonymousIoService-10" daemon [_thread_blocked, id=3664, stack(0x6f610000,0x6f660000)] 
      0x6de21c00 JavaThread "AnonymousIoService-9" daemon [_thread_blocked, id=2072, stack(0x6f5c0000,0x6f610000)] 
      0x6d1fa400 JavaThread "AnonymousIoService-8" daemon [_thread_blocked, id=3660, stack(0x6f570000,0x6f5c0000)] 
      0x6d1f7800 JavaThread "AnonymousIoService-7" daemon [_thread_blocked, id=3656, stack(0x6f520000,0x6f570000)] 
      0x6d1fc800 JavaThread "AnonymousIoService-6" daemon [_thread_blocked, id=3652, stack(0x6f4d0000,0x6f520000)] 
      0x6d200400 JavaThread "AnonymousIoService-5" daemon [_thread_blocked, id=1772, stack(0x6f480000,0x6f4d0000)] 
      0x6d1f3000 JavaThread "Thread-15" daemon [_thread_blocked, id=3648, stack(0x6f430000,0x6f480000)] 
      0x6d1f0800 JavaThread "AnonymousIoService-4" daemon [_thread_blocked, id=3644, stack(0x6f3e0000,0x6f430000)] 
      0x6d1e9c00 JavaThread "AnonymousIoService-3" daemon [_thread_blocked, id=3632, stack(0x6f390000,0x6f3e0000)] 
      0x6d1e9400 JavaThread "AnonymousIoService-2" daemon [_thread_blocked, id=3640, stack(0x6f340000,0x6f390000)] 
      0x6d201400 JavaThread "AnonymousIoService-1" daemon [_thread_blocked, id=3636, stack(0x6f2f0000,0x6f340000)] 
      0x6dfd3800 JavaThread "SocketConnectorIoProcessor-0.0" [_thread_blocked, id=3628, stack(0x6e8d0000,0x6e920000)] 
      0x6d1e3c00 JavaThread "SocketAcceptor-0" [_thread_in_native, id=3620, stack(0x6f250000,0x6f2a0000)] 
      0x6df89c00 JavaThread "PooledByteBufferExpirer-0" daemon [_thread_blocked, id=3616, stack(0x6f080000,0x6f0d0000)] 
      0x002f6800 JavaThread "DestroyJavaVM" [_thread_blocked, id=2380, stack(0x00a00000,0x00a50000)] 
      0x6d1e4400 JavaThread "Timer-2" [_thread_blocked, id=1748, stack(0x6ebe0000,0x6ec30000)] 
      0x6de84400 JavaThread "Timer-1" [_thread_blocked, id=3604, stack(0x6eb80000,0x6ebd0000)] 
      0x6de10400 JavaThread "Thread-11" [_thread_blocked, id=3596, stack(0x6eb30000,0x6eb80000)] 
      0x6de10c00 JavaThread "Thread-9" [_thread_blocked, id=2828, stack(0x6ea10000,0x6ea60000)] 
      0x6df91000 JavaThread "Thread-8" [_thread_blocked, id=2820, stack(0x6e9c0000,0x6ea10000)] 
      0x6dfd7400 JavaThread "Thread-7" [_thread_blocked, id=1892, stack(0x6e920000,0x6e970000)] 
      0x6df9d800 JavaThread "Store sampleCache1 Expiry Thread" daemon [_thread_blocked, id=1876, stack(0x6e880000,0x6e8d0000)] 
      0x6df96400 JavaThread "Store sampleCache1 Spool Thread" daemon [_thread_blocked, id=1896, stack(0x6e830000,0x6e880000)] 
      0x6dfab000 JavaThread "MySQL Statement Cancellation Timer" daemon [_thread_blocked, id=1864, stack(0x6e3e0000,0x6e430000)] 
      0x6df80000 JavaThread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2" daemon [_thread_blocked, id=3592, stack(0x6e390000,0x6e3e0000)] 
      0x6df66400 JavaThread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1" daemon [_thread_blocked, id=3588, stack(0x6e340000,0x6e390000)] 
      0x6df32400 JavaThread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0" daemon [_thread_blocked, id=3584, stack(0x6e2f0000,0x6e340000)] 
      0x6df82400 JavaThread "Timer-0" daemon [_thread_blocked, id=3580, stack(0x6e2a0000,0x6e2f0000)] 
      0x6deb9000 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=2648, stack(0x6e200000,0x6e250000)] 
      0x6deae000 JavaThread "RMI TCP Accept-6050" daemon [_thread_in_native, id=2660, stack(0x6e1b0000,0x6e200000)] 
      0x6deaa400 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=2640, stack(0x6e160000,0x6e1b0000)] 
      0x6d1ca400 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=2616, stack(0x6d7f0000,0x6d840000)] 
      0x6d1c2000 JavaThread "CompilerThread0" daemon [_thread_blocked, id=2644, stack(0x6d7a0000,0x6d7f0000)] 
      0x6d1c0800 JavaThread "Attach Listener" daemon [_thread_blocked, id=3572, stack(0x6d750000,0x6d7a0000)] 
      0x6d1d9c00 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=3568, stack(0x6d350000,0x6d3a0000)] 
      0x6d1a9000 JavaThread "Finalizer" daemon [_thread_blocked, id=2376, stack(0x6d2d0000,0x6d320000)] 
      0x6d1a7800 JavaThread "Reference Handler" daemon [_thread_blocked, id=3564, stack(0x6d280000,0x6d2d0000)] Other Threads: 
    =>0x6d1a4000 VMThread [stack: 0x6d230000,0x6d280000] [id=2404] 
      0x6debb000 WatcherThread [stack: 0x6e250000,0x6e2a0000] [id=3576] VM state:at safepoint (normal execution) VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event]) 
    [0x002f5838] UNKNOWN - owner thread: 0x6d1a4000 
    [0x002f5c98] UNKNOWN - owner thread: 0x6de10c00 Heap 
    def new generation  total 72576K, used 8064K [0x02b00000, 0x079c0000, 0x0a6d0000) 
      eden space 64512K,  0% used [0x02b00000, 0x02b00000, 0x06a00000) 
      from space 8064K, 100% used [0x06a00000, 0x071e0000, 0x071e0000) 
      to  space 8064K,  0% used [0x071e0000, 0x071e0000, 0x079c0000) 
    tenured generation  total 968960K, used 968867K [0x0a6d0000, 0x45910000, 0x67500000) 
      the space 968960K,  99% used [0x0a6d0000, 0x458f8f88, 0x458f9000, 0x45910000) 
    compacting perm gen  total 14848K, used 14625K [0x67500000, 0x68380000, 0x6b500000) 
      the space 14848K,  98% used [0x67500000, 0x683486e8, 0x68348800, 0x68380000) 
    No shared spaces configured. 
      

  2.   

    接上面错误内容: 
    Dynamic libraries: 
    0x00400000 - 0x00424000 C:\Program Files\Java\jdk1.6.0_13\bin\java.exe 
    0x7c800000 - 0x7c8c0000 C:\WINDOWS\system32\ntdll.dll 
    0x77e40000 - 0x77f42000 C:\WINDOWS\system32\kernel32.dll 
    0x77f50000 - 0x77feb000 C:\WINDOWS\system32\ADVAPI32.dll 
    0x77c50000 - 0x77cef000 C:\WINDOWS\system32\RPCRT4.dll 
    0x76f50000 - 0x76f63000 C:\WINDOWS\system32\Secur32.dll 
    0x7c340000 - 0x7c396000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\msvcr71.dll 
    0x6d8b0000 - 0x6db06000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\client\jvm.dll 
    0x77380000 - 0x77411000 C:\WINDOWS\system32\USER32.dll 
    0x77c00000 - 0x77c48000 C:\WINDOWS\system32\GDI32.dll 
    0x76aa0000 - 0x76acd000 C:\WINDOWS\system32\WINMM.dll 
    0x76290000 - 0x762ad000 C:\WINDOWS\system32\IMM32.DLL 
    0x7f000000 - 0x7f009000 C:\WINDOWS\system32\LPK.DLL 
    0x75490000 - 0x754f5000 C:\WINDOWS\system32\USP10.dll 
    0x71bc0000 - 0x71bc8000 C:\WINDOWS\system32\rdpsnd.dll 
    0x771f0000 - 0x77201000 C:\WINDOWS\system32\WINSTA.dll 
    0x77ba0000 - 0x77bfa000 C:\WINDOWS\system32\msvcrt.dll 
    0x71c40000 - 0x71c97000 C:\WINDOWS\system32\NETAPI32.dll 
    0x76b70000 - 0x76b7b000 C:\WINDOWS\system32\PSAPI.DLL 
    0x6d340000 - 0x6d348000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\hpi.dll 
    0x6d860000 - 0x6d86c000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\verify.dll 
    0x6d3e0000 - 0x6d3ff000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\java.dll 
    0x6d8a0000 - 0x6d8af000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\zip.dll 
    0x6d320000 - 0x6d329000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\management.dll 
    0x6d3a0000 - 0x6d3b3000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\net.dll 
    0x71c00000 - 0x71c17000 C:\WINDOWS\system32\WS2_32.dll 
    0x71bf0000 - 0x71bf8000 C:\WINDOWS\system32\WS2HELP.dll 
    0x71b20000 - 0x71b61000 C:\WINDOWS\System32\mswsock.dll 
    0x76ed0000 - 0x76efa000 C:\WINDOWS\system32\DNSAPI.dll 
    0x76f70000 - 0x76f77000 C:\WINDOWS\System32\winrnr.dll 
    0x76f10000 - 0x76f3e000 C:\WINDOWS\system32\WLDAP32.dll 
    0x76f80000 - 0x76f85000 C:\WINDOWS\system32\rasadhlp.dll 
    0x6e080000 - 0x6e0b5000 C:\WINDOWS\system32\rsaenh.dll 
    0x76920000 - 0x769e2000 C:\WINDOWS\system32\USERENV.dll 
    0x6e0c0000 - 0x6e11a000 C:\WINDOWS\system32\hnetcfg.dll 
    0x71ae0000 - 0x71ae8000 C:\WINDOWS\System32\wshtcpip.dll 
    0x6eab0000 - 0x6eb29000 D:\tenfore\Tenfore.dll 
    0x6d870000 - 0x6d889000 D:\tenfore\TickerApi.dll 
    0x6d850000 - 0x6d859000 C:\WINDOWS\system32\RPCNS4.dll 
    0x6d890000 - 0x6d89b000 C:\WINDOWS\system32\NetTCPIP2.dll 
    0x6ebd0000 - 0x6ebda000 C:\WINDOWS\system32\CX32.dll 
    0x73eb0000 - 0x73fd1000 C:\WINDOWS\system32\MFC42.DLL 
    0x77670000 - 0x777a9000 C:\WINDOWS\system32\ole32.dll 
    0x77d00000 - 0x77d8b000 C:\WINDOWS\system32\OLEAUT32.dll 
    0x77210000 - 0x772bb000 C:\WINDOWS\system32\WININET.dll 
    0x77da0000 - 0x77df2000 C:\WINDOWS\system32\SHLWAPI.dll 
    0x761b0000 - 0x76243000 C:\WINDOWS\system32\CRYPT32.dll 
    0x76190000 - 0x761a2000 C:\WINDOWS\system32\MSASN1.dll 
    0x71bb0000 - 0x71bb9000 C:\WINDOWS\system32\WSOCK32.dll 
    0x6ec30000 - 0x6ec6d000 C:\WINDOWS\system32\ODBC32.dll 
    0x77420000 - 0x77523000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55\COMCTL32.dll 
    0x7c8d0000 - 0x7d0ce000 C:\WINDOWS\system32\SHELL32.dll 
    0x762b0000 - 0x762f9000 C:\WINDOWS\system32\comdlg32.dll 
    0x6f220000 - 0x6f237000 C:\WINDOWS\system32\odbcint.dll 
    0x6f240000 - 0x6f249000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\nio.dll 
    0x76cf0000 - 0x76d0a000 C:\WINDOWS\system32\iphlpapi.dll 
    0x76cd0000 - 0x76ce9000 C:\WINDOWS\system32\MPRAPI.dll 
    0x76df0000 - 0x76e24000 C:\WINDOWS\system32\ACTIVEDS.dll 
    0x76dc0000 - 0x76de8000 C:\WINDOWS\system32\adsldpc.dll 
    0x76b80000 - 0x76bae000 C:\WINDOWS\system32\credui.dll 
    0x76a80000 - 0x76a98000 C:\WINDOWS\system32\ATL.DLL 
    0x76e30000 - 0x76e3c000 C:\WINDOWS\system32\rtutils.dll 
    0x7e020000 - 0x7e02f000 C:\WINDOWS\system32\SAMLIB.dll 
    0x770e0000 - 0x771e8000 C:\WINDOWS\system32\SETUPAPI.dll 
    0x71050000 - 0x71056000 C:\Program Files\Java\jdk1.6.0_13\jre\bin\rmi.dll VM Arguments: 
    jvm_args: -Dcom.sun.management.jmxremote.port=6050 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xms1024m -Xmx1610m 
    java_command: Tenfore2.1.5_final_2.jar 
    Launcher Type: SUN_STANDARD Environment Variables: 
    JAVA_HOME=C:\Program Files\Java\jdk1.6.0_13 
    PATH=C:\Program Files\Java\jdk1.6.0_13\bin;C:\Program Files\Java\jdk1.6.0_13\jre\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Symantec\pcAnywhere\;D:\Program Files\MySQL\MySQL Server 5.0\bin 
    USERNAME=Administrator 
    OS=Windows_NT 
    PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 6, GenuineIntel 
    ---------------  S Y S T E M  --------------- OS: Windows Server 2003 family Build 3790 Service Pack 2 CPU:total 4 (2 cores per cpu, 1 threads per core) family 6 model 15 stepping 6, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3 Memory: 4k page, physical 2097151k(2097151k free), swap 4194303k(4194303k free) vm_info: Java HotSpot(TM) Client VM (11.3-b02) for windows-x86 JRE (1.6.0_13-b03), built on Mar  9 2009 01:15:24 by "java_re" with MS VC++ 7.1 time: Tue Apr 14 18:01:41 2009 
    elapsed time: 6548 seconds
      

  3.   

    java.lang.OutOfMemoryError产生该错误的原因大都出于以下原因:JVM内存过小、程序不严密,产生了过多的垃圾。 
                解决java.lang.OutOfMemoryError的方法有如下几种: 增加jvm的内存大小。方法有: 
                1)在执行某个class文件时候,可以使用java -Xmx256M aa.class来设置运行aa.class时jvm所允许占用的最大内存为256M。
                2)对tomcat容器,可以在启动时对jvm设置内存限度。对tomcat,可以在catalina.bat中添加:
     "set CATALINA_OPTS=-Xms128M -Xmx256M
      set JAVA_OPTS=-Xms128M -Xmx256M",或者把%CATALINA_OPTS%和%JAVA_OPTS%代替为-Xms128M -Xmx256M   2.    优化程序,释放垃圾。        主要包括避免死循环,应该及时释放种资源:内存, 数据库的各种连接,防止一次载入太多的数据。导致java.lang.OutOfMemoryError的根本原因是程序不健壮。因此,从根本上解决Java内存溢出的唯一方法就是修改程序,及时地释放没用的对象,释放内存空间。
      

  4.   

    java.lang.OutOfMemoryError: requested 8192000 bytes for GrET in C:\BUILD_AREA\ 
    jdk6_13\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space? 

    #  Internal Error (allocation.inline.hpp:42), pid=2460, tid=2404 
    #  Error: GrET in C:\BUILD_AREA\jdk6_13\hotspot\src\share\vm\utilities\growableA 
    rray.cpp 这个错误信息感觉是你的c++程序导致swap区空间不足了。
    你的程序单独使用有内存溢出错误么?
      

  5.   

    lz 参考一下 http://topic.csdn.net/u/20090415/21/20c20c5a-e6c8-416a-b7da-bb5cd76fd936.html
      

  6.   

    这个问题的原因就是内存被大量占用,这个应该是程序问题,但是你说是用jni调用的c++程序,那么就应该两边都检查一下,看看是那里引起的。
      

  7.   

    单独跑C的程序看看 不做java的jni调用
      

  8.   

    你好,最大内存我已经调节到所能设置的最大值了,该程序的JAVA部分别的程序也使用过,没有内存溢出的问题,所以问题的所在应该是在VC++部分 或者是JNI产生的问题,主要是怀疑后者,但是不知道该从何入手,希望高手告知啊...感谢!!
      

  9.   

    你好,我也怀疑是VC++部分或者是JNI哪里的问题,因为对这2个不是很熟悉,所以请教该从何处入手检查问题所在呢?谢谢!
      

  10.   

    你好,我的程序是这样,从JAVA端通知调用C的本地方法启动C程序获取数据,C获取数据完成后,传递回JAVA,
    JAVA端应该是没有问题的,就是VC端不太熟悉,请教下如何测试 谢谢