繁体   English   中英

Java out of memory 创建线程时出错

[英]Java out of memory error when creating thread

我在这里发现了很多关于我遇到的错误的问题,但是没有一个解决方案对我有用。 我希望这不被视为重复的问题。 我正在使用Java编写的数据分析软件工具,出现以下错误:

[286.098s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached. 
Exception in thread "main" java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
            at java.base/java.lang.Thread.start0(Native Method)
            at java.base/java.lang.Thread.start(Thread.java:803)
            at edu.mit.compbio.ChromHMM.ChromHMM.trainParametersParallel(ChromHMM.java:9729)
            at edu.mit.compbio.ChromHMM.ChromHMM.buildModel(ChromHMM.java:901)
            at edu.mit.compbio.ChromHMM.ChromHMM.main(ChromHMM.java:12014)

我给 java 解释器的唯一论据是-Xmx10000M

我见过的大多数人都在尝试创建大量线程,这就是他们问题的根源。 但这里的程序只是试图创建一个线程。 我在计算集群上运行它,并在节点上请求了 128GB 的 memory。 据我了解,线程是在 java 堆之外的 memory 中创建的,因此应该仍然有 118GB 可用。 我已经尝试增加我给 java 的 10000M 大小的减小,但这并没有什么不同。 我还添加了-Xss1000M来为线程提供更大的堆栈大小,但又得到了同样的错误。

我用较少的输入数据成功地运行了这个工具,并且只是开始在较大的数据集上遇到这个问题,我只是不知道要转动什么旋钮,以便有足够的 memory 可用。 我已经在顶部观看了该过程,它从未使用超过 10% 的可用 memory,因此 memory 如何在 ZD52387880E1EA22817A72D3759Z21 中分布似乎存在一些问题。 还有什么我可以尝试的,或者此时可能只是该工具需要进行不同的编码才能处理大量数据?

我在 centOS/Red Hat 机器上遇到了同样的问题。 您正在达到线程限制,对于用户、进程或总体限制

就我而言,用户可以拥有的线程数是有限制的。 哪个可以检查,说最大用户进程的行

ulimit -a

您可以使用此命令查看正在运行的线程数

$ ps -elfT | wc -l

要获取您的进程正在运行的线程数(您可以使用 top 或 ps aux 获取进程 pid):

$ ps -p <PROCESS_PID> -lfT | wc -l

/proc/sys/kernel/threads-max 文件为线程数提供了系统范围的限制。 root 用户可以更改该值

要更改限制(在本例中为 4096 个线程):

$ ulimit -u 4096

您可以在此处找到有关 Red Hat/centOs http://www.mastertheboss.com/jboss-server/jboss-monitoring/how-to-solve-javalangoutofmemoryerror-unable-to-create-new-native-thread的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM