簡體   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