https://www.jianshu.com/p/47336fcd22da
https://blog.csdn.net/weixin_33978044/article/details/90591334
查看tomcat打開數
lsof -p $pid|wc -l
linux資源限制配置文件是/etc/security/limits.conf;限制用戶進程的數量對於linux系統的穩定性非常重要。
limits.conf文件限制着用戶可以使用的最大文件數,最大線程,最大內存等資源使用量。
* soft nofile 655350 #任何用戶可以打開的最大的文件描述符數量,默認1024,這里的數值會限制tcp連接 * hard nofile 655350 * soft nproc 655350 #任何用戶可以打開的最大進程數 * hard nproc 650000 @student hard nofile 65535 @student soft nofile 4096 @student hard nproc 50 #學生組中的任何人不能擁有超過50個進程,並且會在擁有30個進程時發出警告 @student soft nproc 30
- hard和soft兩個值都代表什么意思呢?
soft是一個警告值,而hard則是一個真正意義的閥值,超過就會報錯
一、所有用戶創建的進程數:
$ ps h -Led -o user | sort | uniq -c | sort -n 2 shtermuser 11 zabbix 206 elasticsearch 490 root
二、系統最大打開文件描述符數:
- 查看
$ cat /proc/sys/fs/file-max 6553600
- 設置
$ vim /etc/sysctl.conf fs.file-max = 6553600
三、進程最大打開文件描述符數
- 查看
ulimit -n默認查看的是soft limit
$ ulimit -n
170000
- 查看hard limit
$ ulimit -Hn
170000
- 設置
- 臨時設置
#通過ulimit -Sn設置最大打開文件描述符數的soft limit,注意soft limit必須小於hard limit
$ ulimit -Sn 160000
#同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。
$ ulimit -n 180000
- 永久設置
#root權限下,在/etc/security/limits.conf中添加如下兩行,表示所有用戶最大打開文件描述符數的soft limit為102400,hard limit為104800。重啟生效
* soft nofile 102400
* hard nofile 104800
- 注意:設置nofile的hard limit還有一點要注意的就是hard limit不能大於/proc/sys/fs/nr_open,假如hard limit大於nr_open,注銷后將無法正常登錄。
四、查看當前系統使用的打開文件描述符數
$ cat /proc/sys/fs/file-nr 5664 0 186405
其中第一個數表示當前系統已分配使用的打開文件描述符數,第二個數為分配后已釋放的(目前已不再使用),第三個數等於file-max。
五、知道了/etc/security/limits.conf中的參數含義之后,那么如何配置nofile,確定nofile的最大值呢。
解答:使用ulimt -n命令進行測試,如果小於系統允許的最大值,設置成功,大於最大值,系統會報錯提示。
$ ulimit -n 1100000
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 1048576
$ ulimit -n 1048577
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 1048575
$ ulimit -n 1048576
六、ulimit -a/n/H/S 都有什么含義
ulimit -a 顯示當前所有的資源限制
ulimit -H 設置硬件資源限制
ulimit -S 設置軟件資源限制
ulimit -n 設置進程最大打開文件描述符數
ulimit -u <程序數目> 用戶最多可開啟的程序數目
總結
a. 所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max
b. 單個進程打開的文件描述符數不能超過user limit中nofile的soft limit
c. nofile的soft limit不能超過其hard limit
d. nofile的hard limit不能超過/proc/sys/fs/nr_open
我就寫了個小腳本來統計一下所有進程的文件打開數量,從而可以得知到底是哪個進程出現問題,再作進一步的處理,腳本的具體內容如下
-
-
-
# psof.sh
-
# Author:
-
# # ####### # # #######
-
# # # ## # #
-
# # # # # # #
-
### ##### # # # #
-
# # # # # # #
-
# # # # ## #
-
# # ####### # # #
-
# DATE: 2016-10-09
-
# DESCRIPTION: 計算每個進程的Openfiles
-
-
tmpfile=/dev/shm/psof.txt
-
echo "" > $tmpfile
-
for pid in $(ps -eo pid | grep -v PID)
-
do echo $pid":"$(lsof -p $pid|wc -l) >> $tmpfile ;
-
done
-
echo "PID : Openfiles"
-
sort -nrk 2 -t: $tmpfile