崩溃发生在Java虚拟机外部的本机代码中



我正在使用32个虚拟处理器和32GB内存的Sun服务器上进行web爬网。

我打开了1460个线程来为我做这项工作。我设置的运行时参数是-Xms2048-Xmx2048。我已经运行了两次代码,但它在不同的地方崩溃了。

> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  SIGSEGV (0xb) at pc=0xff390f38, pid=3053, tid=7640
> #
> # JRE version: 6.0_15-b03
> # Java VM: Java HotSpot(TM) Server VM (14.1-b02 mixed mode solaris-sparc )
> # Problematic frame:
> # C  [libc_psr.so.1+0xf38]  memset+0x78
> #
> # If you would like to submit a bug report, please visit:
> #   http://java.sun.com/webapps/bugreport/crash.jsp
> # The crash happened outside the Java Virtual Machine in native code.
> # See problematic frame for where to report the bug.
> #
> 

编辑:我将线程数量减少到40个,并在同一台服务器上运行它。当RSS的值超过Swap的值(两者都在2150M左右)时,它再次崩溃。换句话说,当内存超出限制时,它就会崩溃。然后我在自己的电脑上运行了它,有4G RAM和双核处理器。令我惊讶的是,到目前为止它一直做得很好。电脑上的内存使用量保持在1.5G左右,离限制有点远。它一直在稳定运行,电脑上似乎有一种机制可以防止内存达到极限。相比之下,它在Sun服务器上似乎失去了控制。

编辑:自从我升级到最新的64位Java后,它还没有崩溃。

您是否尝试将'M'附加到内存参数?(即-Xms2048M)此外,我会尝试将ms设置为较小的值(即1024M),以防VM无法为堆保留足够的空间。

最新更新