Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
崩溃发生在Java虚拟机外部的本机代码中_Java_Multithreading_Jvm_Native Code_Jvm Crash - Fatal编程技术网

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

崩溃发生在Java虚拟机外部的本机代码中,java,multithreading,jvm,native-code,jvm-crash,Java,Multithreading,Jvm,Native Code,Jvm Crash,我正在Sun服务器上进行web爬行,该服务器有32个虚拟处理器和32GB内存 我打开了1460个线程来为我做这项工作。我设置的运行时参数是-Xms2048和-Xmx2048。我已经运行了两次代码,但它在不同的点崩溃了 > # > # A fatal error has been detected by the Java Runtime Environment: > # > # SIGSEGV (0xb) at pc=0xff390f38, pid=3053, tid=7

我正在Sun服务器上进行web爬行,该服务器有32个虚拟处理器和32GB内存

我打开了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的价值超过交换的价值时(两者都在2150万英镑左右),它再次崩溃。换句话说,当内存超出限制时,它崩溃了。然后我用4G内存和双核处理器在自己的电脑上运行它。令我惊讶的是,到目前为止,它一直做得很好。PC上的内存使用量保持在1.5G左右,距离限制稍远。它一直稳定运行,似乎PC上有一种机制可以防止内存达到极限。相比之下,它似乎在Sun服务器上失去了控制


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

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

是否尝试减少线程数?10, 20, 30... 看看这是否是一个缩放问题?如果您的每个线程都在连接web,则表示至少有1460个TCP传出连接。如果他们不关闭主连接并检索其他资源(HTML->JS、CSS、IMG),他们会倍增!您只有2^16个可用端口(65535)。事实上,它们中的很多已经被使用了。您正在使用JRE版本:6.0_15-b03。首先尝试升级到最新的JRE。最新升级版本为
34
。这是一个缩放问题。
memset
失败,因为系统无法分配空间支持映射。(除非这是一个32位的应用程序,在这种情况下,当大小的低阶32位都为零时,会有一个模糊的错误导致这种情况。)您是否考虑过使用NIO而不是1000多个线程?单是堆栈内存开销就值得了。另请参见:对于您的编辑,sunjvm实现似乎有一些东西并没有释放资源。但我想这只发生在某些情况下。否则它应该是一个大错误。我完全支持非阻塞API,使用CPU上的线程数和内核数一样多,并使用回调接口来处理响应。然后,每个新事件(要获取的新URL、要解析的新响应)都是您必须分配到工作队列中的新任务。。。