Solaris

為每個程序的最大文件描述符設置上限有什麼危險?

  • January 28, 2013

我正在開發一個舊的遺留應用程序,我經常會遇到一些 cam 周圍沒有人解釋的設置。

顯然在某些時候,應用程序中的某些程序達到了每個程序允許的最大文件描述符數,然後團隊決定通過將以下內容添加到他們的 shell (.kshrc) 的 init 文件中來增加限制:

((nfd=16#$(/etc/sysdef | grep "file descriptor" | awk '{ print $1 }' | cut -f3 -d "x")))

ulimit -n $nfd

這將輸出ulimit -n從 256 增加到 65536。幾乎我們機器上的每個程序都以這個高軟限制執行。

採用這種粗暴的方法是否有任何風險?校準的正確方法是ulimit什麼?

附帶問題:我如何知道正在執行的程序目前正在使用的 FD 數量?


環境

  • 作業系統:SunOS …. 5.10 Generic_120011-14 sun4u sparc SUNW,Sun-Fire-V215
  • 外殼:KsH 版本 M-11/16/ 88 i

要查看正在執行的程序正在使用的文件描述符的數量,請在pfiles程序 ID 上執行。

增加程序可用的 fd 數量可能會對性能產生影響,具體取決於軟體及其編寫方式。程序可以使用最大數量的 fd 來調整資料結構的大小,例如select(3c)位遮罩數組,或者執行諸如在所有 fd 的循環中關閉之類的操作(儘管為 Solaris 編寫的軟體可以使用該fdwalk(3c)函式僅針對打開的 fd 而不是最大可能值)。

引用自:https://unix.stackexchange.com/questions/47106