Java中OutOfMemoryError與unable to create new native thread(JVM創(chuàng)建大量線程)的關(guān)系
鏈接:http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html
Java中OutOfMemoryError與unable to create new native thread(JVM創(chuàng)建大量線程)的關(guān)系
2007年03月13日 星期二 13:14
: unable to create new native thread.這種怪事是因?yàn)镴VM已經(jīng)被系統(tǒng)分配了大量的內(nèi)存(比如1.5G),并且它至少要占用可用內(nèi)存的一半。有人發(fā)現(xiàn),在線程個(gè)數(shù)很多的情況下,你分配給JVM的內(nèi)存越多,那么,上述錯誤發(fā)生的可能性就越大。
那么是什么原因造成這種問題呢?
每一個(gè)32位的進(jìn)程最多可以使用2G的可用內(nèi)存,因?yàn)榱硗?G被操作系統(tǒng)保留。這里假設(shè)使用1.5G給JVM,那么還余下500M可用內(nèi)存。這500M內(nèi)存中的一部分必須用于系統(tǒng)dll的加載,那么真正剩下的也許只有400M,現(xiàn)在關(guān)鍵的地方出現(xiàn)了:當(dāng)你使用Java創(chuàng)建一個(gè)線程,在JVM的內(nèi)存里也會創(chuàng)建一個(gè)Thread對象,但是同時(shí)也會在操作系統(tǒng)里創(chuàng)建一個(gè)真正的物理線程(參考JVM規(guī)范),操作系統(tǒng)會在余下的400兆內(nèi)存里創(chuàng)建這個(gè)物理線程,而不是在JVM的1500M的內(nèi)存堆里創(chuàng)建。在jdk1.4里頭,默認(rèn)的棧大小是256KB,但是在jdk1.5里頭,默認(rèn)的棧大小為1M每線程,因此,在余下400M的可用內(nèi)存里邊我們最多也只能創(chuàng)建400個(gè)可用線程。
這樣結(jié)論就出來了,要想創(chuàng)建更多的線程,你必須減少分配給JVM的最大內(nèi)存。還有一種做法是讓JVM宿主在你的JNI代碼里邊。
給出一個(gè)有關(guān)能夠創(chuàng)建線程的最大個(gè)數(shù)的估算公式:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
對于jdk1.5而言,假設(shè)操作系統(tǒng)保留120M內(nèi)存: 1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads 1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads
對于棧大小為256KB的jdk1.4而言, 1.5GB allocated to JVM: ~1520 threads 1.0GB allocated to JVM: ~3520 threads
如果我沒有記錯的話,在2000/XP/2003里頭有一個(gè)啟動選項(xiàng),好像是:/PAE /3G ,可以讓用戶進(jìn)程最大內(nèi)存擴(kuò)充至3G,這時(shí)操作系統(tǒng)只能占用最多1G的虛存。那樣應(yīng)該可以讓JVM創(chuàng)建更多的線程。
|
鏈接:http://dev2dev./bbs/thread.jspa?forumID=81&threadID=1608
另外確定你的HP-UX的補(bǔ)丁,WEBLOGIC7 SP4的補(bǔ)丁包需要操作系統(tǒng)的補(bǔ)丁支持,SP4推薦使用的JDK版本是JDK1.3.1_09這個(gè)在SP4補(bǔ)丁打完后,在WEBLOGIC的安裝目錄內(nèi)就用。 操作系統(tǒng)的參數(shù)設(shè)置與你報(bào)的錯誤沒有直接關(guān)系,錯誤的原因主要是你的WEBLOGIC配置,樓上各位已經(jīng)說了,設(shè)置啟動JVM參數(shù),如果還有問題,就是確定你的JDK或者是WEBLOGIC的補(bǔ)丁是否安裝了 General Information To download supported releases for this platform, see Distribution and Installation Information. For general information about HP-UX, see the Hewlett-Packard website. The HP-UX 11.0 default value for maximum threads per process is 64, which may be too low for the WebLogic Server and many Java server applications in general. When the value is too low, your WebLogic Server may have problems starting up. We recommend that you use the maximum kernel setting for the max_thread_proc and maxusers parameters. Setting maxusers to a higher value increases other machine-wide limits, such as nkthread (the maximum number of kernel threads). For example, we have reconfigured our kernel as follows:
Table 2-1 Recommended HP-UX 11.0 Kernel Settings Parameter Old Value New Value Description
max_thread_proc 64 1024 Maximum threads per process
maxfiles 60 256 Soft file limit per process
maxusers 32 256 Influences other parameters
nkthread 499 3635 Number of threads total on the system
nproc 276 2068 Maximum number of processes
ncallout 292 2084 Number of pending timeouts
WebLogic 7.0 SP4 Operating System HP-UX 11.0 and 11i
Required OS Patches HP-UX patches for JavaTM, see http://www.hp.com/products1/unix/java/patches/index.html
CPU PA-RISC 100MHz or higher
RAM 512 MB minimum
Disk Space 180 MB
Supported Client JVM HP-UX SDK 1.3.1.09 with Java HotSpotTM Server VM, dated April 18, 2003 or later
Supported Server JVM HP-UX SDK 1.3.1.09 with Java HotSpotTM Server VM, dated April 18, 2003 or later
Performance Pack Included.
Node Manager Included.
Oracle jDriver For this Oracle Server version:
Oracle 8.1.7 These Oracle jDriver shared libraries are supported:
lib/hpux11/oci817_8/libweblogicoci38.sl
lib/hpux11/oci817_8/libweblogicoxa38.sl
Oracle 9.0.1 lib/hpux11/oci901_8/libweblogicoci38.sl
lib/hpux11/oci901_8/libweblogicoxa38.sl
Oracle 9.2.0 lib/hpux11/oci920_8/libweblogic38.sl lib/hpux11/oci920_8/libweblogicoca38.sl
NSAPI Plug-ins For this plugin:
iPlanet 4.1 This shared library is supported:
lib/hpux11/libproxy.sl
Sun One 6.0 lib/hpux11/libproxy.sl
Apache Plug-ins For this Apache version:
HP Apache 2.0.45 These shared libraries are supported:
lib/hpux11/mod_wl_20.so
鏈接:http://cszhzleo.spaces./blog/cns!452DDB531E252FF0!203.entry
HP unix 11.0 雙機(jī)集群
一臺WebLogic啟動時(shí),報(bào)錯OutOfMemoryError: unable to create new native thread;而另一臺正常。
經(jīng)過分析為系統(tǒng)開發(fā)線程數(shù)太少,需要修改HP-UNIX內(nèi)核參數(shù) sam kerneal configuration
maxusers 改為400
max_thread_proc 改為1024 退出 重新編譯內(nèi)核 shutdown -ry 0
HP的工程師太馬虎了,就做了一臺機(jī)器。唉......
|