linux系統下too many files open如何定位與解決
當應用進程打開的文件句柄數大於系統設置的句柄數,服務就會報錯too many files open,那麽如何解決這個問題呢?
1:查看當前系統設置的最大句柄數
命令:ulimit -a;可以看見系統設置的最大句柄數為:65535
2:統計系統中當前打開的總文件句柄數
lsof|awk ‘{print $2}’ |wc -l
3:根據打開文件句柄的數量降序排列,其中第一行是打開的文件句柄數量,第二行是進程號。可以看出來進程28811打開的進程數是:612
命令:lsof -n|awk ‘{print $2}‘|sort|uniq -c |sort -nr|more
4:查看該應用進程的詳細信息,可以查看是哪個應用占用的句柄數最大
命令:ps -ef|grep 28811
5:設置單個進程句柄數
如果系統並發特別大,單個進程設置的句柄數不合理,這時候就必須要調整系統參數,以適應應用變化。
5.1:臨時設置:把當前用戶的最大允許打開文件數量設置為2048了,但這種設置方法在重啟後會還原為默認值
命令:ulimit -n 2048
5.2:永久設置方法
命令:vim /etc/security/limits.conf ;然後在文件最後加入:* soft nofile 65535、* hard nofile 65535即可生效
另:Linux /proc目錄詳解
Linux系統上的/proc目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是,/proc是一種偽文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬件及當前正在運行進程的信息,甚至可以通過更改其中某些文件來改變內核的運行狀態。
linux打開文件通常都是open返回一個fd的形式,操作系統會維護當前進程打開文件的記錄,但是數量是被限制的,操作系統能打開的fd總和也是有限的,如果進程一直打開文件而不關閉,那麽當調用open時操作系統將會返回失敗。所以特別實在服務型進程和常駐內存的進程中,打開了文件就要記得在不用時關閉,否則只打開不關閉將會泄露句柄。當然進程結束,操作系統會自己關閉回收fd的,所以如果進程執行時間短就結束了,打開fd少,理論上也可以不顯式關閉,但是調用close還是一種良好的習慣。
1:查看某個進程打開的文件文件描述符
/proc/pid/fd文件夾是Linux掛載的記錄當前打開文件描述符(fd)信息的,每打開一個fd就會有一個以fd為文件名的文件產生
命令:root用戶下:cd /proc/28316(pid)/fd
參考文檔:https://blog.csdn.net/oujiangping/article/details/77025953
參考文檔:https://www.cnblogs.com/sparkbj/p/7161669.html(lfos常用命令)
參考文檔:https://www.cnblogs.com/taosim/articles/2828002.html
linux系統下too many files open如何定位與解決