Ulimit
lsof 如何報告比 ulimit 所允許的打開文件數量更多的文件?
lsof 如何報告比 ulimit 所說的限制更多的打開文件?
prod_web3(i-ca0b05aa):~$ sudo lsof | wc -l 4399 prod_web3(i-ca0b05aa):~$ ulimit -n 1024
從 ulimit 內置手冊頁
The ulimit builtin provides control over the resources available to the shell and to processes started by it on systems that allow such control.
您的
lsof
命令列出了系統上所有使用者的所有程序的所有打開文件。你不是在比較喜歡和喜歡。
將原始
lsof
呼叫的結果與假設的限制進行比較是一個常見的錯誤。對於全域限制 (
/proc/sys/fs/file-max
),您應該查看/proc/sys/fs/file-nr
-> 第一個值表示使用的是什麼,最後一個值是限制OpenFile 限制適用於每個程序,但它是在使用者上定義的,請參閱命令
ulimit -Hn
了解使用者限制並了解/etc/security/limits.conf
定義。通常與“app user”一起使用,例如:“tomcat”:將使用者tomcat的限制設置為65000,這將應用於它執行的java程序。如果要檢查對程序應用的限制,請獲取其 PID,然後執行:
cat /proc/${PID}/limits
如果要檢查程序打開了多少文件,請獲取其 PID,然後獲取 od:(ls -1 /proc/${PID}/fd | wc -l
注意:對於 ls,它是“減一”,不要與“減號”相混淆)如果您想了解
lsof
但僅限於那些計入限制的文件處理程序的詳細資訊,請嘗試使用這些命令:
lsof -p ${PID} | grep -P "^(\w+\s+){3}\d+\D+"
lsof -p ${PID} -d '^cwd,^err,^ltx,^mem,^mmap,^pd,^rtd,^txt' -a
備註:“文件”是文件/管道/TCP連接/等。
請注意,有時您可能需要成為 root 或使用
sudo
才能獲得命令的正確結果。沒有特權,有時你沒有錯誤,只是更少的結果。最後,如果您想知道程序訪問文件系統上的哪些“文件”,請查看:
lsof -p ${PID} | grep / | awk '{print $9}' | sort | uniq
玩得開心!