2 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
ulimit
命令更新當(dāng)前進(jìn)程和所有繼承進(jìn)程的限制。調(diào)用 using 或 時(shí),它會(huì)啟動(dòng)一個(gè)新進(jìn)程并更新此新進(jìn)程的限制,而不會(huì)影響當(dāng)前的 Java 進(jìn)程。ulimit
Runtime.exec
ProcessBuilder
為了對(duì)自身應(yīng)用新的限制,Java 進(jìn)程應(yīng)該在自己的上下文中調(diào)用 setrlimit
函數(shù)。由于此函數(shù)沒(méi)有 Java 包裝器,因此只能通過(guò)本機(jī)接口調(diào)用它:JNI、JNA 或 JNR。
但是,如果Java在非特權(quán)用戶下運(yùn)行,則更新文件限制()無(wú)論如何都是無(wú)用的,因?yàn)镠otSpot JVM會(huì)自動(dòng)將此限制更新為最大允許值 - 請(qǐng)參閱此問(wèn)題。ulimit -n

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
我做了一個(gè)有效的解決方法。我使用的是執(zhí)行java程序的shell腳本。因此,我在 shell 腳本執(zhí)行運(yùn)行 java 部分之前設(shè)置了 ulimit。正如@apangin所回答的,這集合了 shell 進(jìn)程的 ulimit 和從這個(gè) shell 進(jìn)程生成的 java 進(jìn)程,繼承了這個(gè) ulimit。
添加回答
舉報(bào)