Ulimit

lsof 如何報告比 ulimit 所允許的打開文件數量更多的文件?

  • October 22, 2021

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

玩得開心!

引用自:https://serverfault.com/questions/325011