3

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

我打开了 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 和双核处理器的 PC 上运行它。令我惊讶的是,到目前为止它一直做得很好。PC 上的内存使用量保持在 1.5G 左右,距离限制有点远。它一直如此稳定地运行,以至于 PC 上似乎有一种机制可以防止内存达到其极限。相比之下,它在 Sun 服务器上似乎失控了。

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

4

1 回答 1

1

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

于 2012-09-12T20:29:48.763 回答