– 合理配置Linux同時可開啟檔案控制代碼數限制及lsof命令使用
今天一上班就看到一來自效能測試組的一個系統錯誤報表,Linux系統下的應用在壓力下會出現”Too many open files”的錯誤並導致服務停止。
其中這是老問題,就是需要合理配置Linux同時可開啟檔案控制代碼數限制。
當然,如果應用程式有bug,濫用資源是另一個問題了。
Linux把大部分資源都會虛擬成檔案,象開啟網路連接也都會佔用檔案控制代碼,Linux的預設限制一般是1024,這個限制對一般個人使用是沒有問題的,但對一個特殊應用或都在大並發訪問下是不夠的。
使用者級:
Linux限制每個登入使用者的可串連檔案數。可通過 ulimit -n來查看當前有效設定。如果想修改這個值就使用 ulimit -n 命令。
對於檔案描述符增加的比例,資料推薦是以2的冪次為參考。如當前檔案描述符數量是1024,可增加到2048,如果不夠,可設定到4096,依此類推。
系統級:
系統級設定對所有使用者有效。可通過兩種方式查看系統最大檔案限制
1 cat /proc/sys/fs/file-max
2 sysctl -a 查看結果中fs.file-max這項的配置數量
如果需要增加配置數量就修改/etc/sysctl.conf檔案,配置fs.file-max屬性,如果屬性不存在就添加。
配置完成後使用sysctl -p來通知系統啟用這項配置
1 cat /proc/sys/fs/file-max
2 sysctl -a
查看結果中fs.file-max這項的配置數量
如果需要增加配置數量就修改/etc/sysctl.conf檔案,配置fs.file-max屬性,如果屬性不存在就添加。
配置完成後使用sysctl -p來通知系統啟用這項配置
如果想查看檔案控制代碼的具體使用方式,可以使用lsof命令,給幾個例子:
1. 查看某進程(pid)在使用的檔案
lsof -p pid
2. 尋找誰在使用某個檔案
lsof /var/run/sendmail.pid
3. 尋找監聽連接埠25的進程
lsof -i :25
呵呵,功能還是很強大的。