Solaris
為每個程序的最大文件描述符設置上限有什麼危險?
我正在開發一個舊的遺留應用程序,我經常會遇到一些 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 而不是最大可能值)。