近期遇到一個問題,寫的代碼同一時間維護的tcp鏈接過多,導致linux的文件句柄達到上限,出現Too many open files的問題。網上大多回答混亂,在這裏做個總結,提醒日後使用。
1.查看命令
ulimit -a
2.臨時的修改,關閉終端失效
ulimit -n 204800
或
ulimit -SHn 204800 //S代表soft,超過該值則warning;H代表hard,超過則error;這是同時設置兩個值,也可以分開設置
ulimit -Sn 102400
ulimit -Hn 204800
3.永久設置
[處理非圖像登錄]
sudo vim /etc/security/limits.conf
打開後,在文件最後添加:
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
ubuntu系統下,一定要把*改爲你自己的用戶名。好像是識別不了通配符。centos就沒問題。
保存退出。
[處理非圖像登錄]
然後,在下面的兩文件中加入:DefaultLimitNOFILE=204800
sudo vim /etc/systemd/user.conf
sudo vim /etc/systemd/system.conf
保存退出即可。
4.重啓機器
重啓後,測試下
輸入 ulimit -n ,查看系統級是否修改成功
輸入 su - usrname -c 'ulimit -aHS' -s '/bin/bash' 查看用戶級是否修改成功
輸入 cat /proc/[PID]/limits 查看進程級是否修改成功
注意:同一時間打開文件上限數量,根據自己的實際需要設定。
————————————————
一年之內毫無半點成績,想起來做人真是沒趣。
原文鏈接:https://blog.csdn.net/qq_26039331/article/details/115253574