chpst 是否支援 ulimit 設定?

chpst 是否支援 ulimit 設定?

目前,我們在 Linux 平台上的基於 JBoss 的伺服器上遇到了問題 - 實際上,我們正​​在耗盡進程內的可用檔案句柄,伺服器會發出嘎嘎聲。

我們已將 ulimit 設定為允許 10000 個開啟的檔案句柄,當開啟的檔案句柄少得多時,伺服器會持續崩潰。

我注意到的一件事是我們的啟動腳本使用 chpst,並且我注意到 chpst 允許您將檔案/進程/記憶體限制設為參數。有沒有人知道如果沒有設定明確命令,chpst 是否尊重現有系統 ulimit,或者它是否使用自己的內部預設值?如果是這樣,我可以在哪裡找到這些?

謝謝

答案1

chpst 甚至不尊重您作為參數傳遞的內容。原始碼確實很難閱讀,但 strace 證實:

execve("/usr/sbin/chpst", ["chpst", "-o", "10000", "/bin/sh", "-c", "sleep 5"], [/* 26 vars */]) = 0
...
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=4*1024}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=4*1024, rlim_max=4*1024}) = 0
execve("/bin/sh", ["/bin/sh", "-c", "sleep 5"], [/* 26 vars */]) = 0
...

我會避免。

答案2

無法為 Olivier Tharan 添加評論,即使這是一個老問題,我認為糾正錯誤的斷言也不錯(特別是如果斷言相對較新)。

在他的 strace 中,getrlimit 說最大硬限制是 4096,他要求 chpst 將軟限制設為 10000。limit.conf 的管理,軟限制不能超過硬限制,硬限制由核心和 root 使用者強制執行。對此唯一可以說的是,也許 chpst 應該列印一條警告,僅此而已。當然不是「我會避免」。

請注意,這意味著原來的問題可能與 chpst 無關,而是與系統配置有關。 chpst 只是一個對單一程序設定任意限制的工具,它不是一個配置核心的工具。

相關內容