系統文件數限制

目錄

 [隱藏php

背景

工商總局公示系統的前臺業務系統用到tongweb中間件,業務運行期間java進程報出打開文件數過多的問題,修改了/etc/security/limits.conf中的打開文件數限制以下:shell

 *    soft  nofile    65535
 *    hard  nofile    65535

退出登錄後,從新登錄,再用ulimit -a查看,發現65535的修改並未生效, 在網上查找資料後,得知須要修改ssh配置vim

 vi /etc/ssh/sshd_config
 UseLogin yes

重啓ssh服務bash

 /etc/init.d/ssh restart

再次登錄用ulimit -a查看,發現65535的修改生效。
修改後java進程仍然報出打開文件數過多的問題,此時實際的打開文件數在4279個左右,通過排查,發如今Systemd中設置最大打開文件數與SysV的系統下有所區別,須要修改/etc/systemd/system.conf 和 /etc/systemd/user.conf兩個文件都添加以下內容
ssh

 DefaultLimitCORE=infinity
 DefaultLimitNOFILE=65535
 DefaultLimitNPROC=65535

重啓系統,而後再查看以下信息:
ide

 cat /proc/[PID]/limits

此時java進程的最大打開文件數爲65535,java進程也再也不報打開文件數過多的問題。spa

系統文件數限制

相關的配置

一、/proc/sys/fs/file-nr是系統當前打開的文件數,是一個只讀的參數
二、/proc/sys/fs/file-max指定了系統範圍內全部進程能夠打開的文件句柄的數量限制,修改方法以下:
臨時調整file-max:

 echo  6553560 > /proc/sys/fs/file-max

永久調整file-max:

 vim /etc/sysctl.conf, 
 fs.file-max = 6553560

重啓生效

三、ulimit是bash內置命令,提供了對shell及該shell啓動的進程的可用資源控制,資源限制的配置能夠在 /etc/security/limits.conf 設置,示例以下:

 *    soft  nofile    65535
 *    hard  nofile    65535

四、Systemd下的最大打開文件數設置

在Systemd替代了以前的SysV後,/etc/security/limits.conf 文件的配置做用域縮小了一些。limits.conf這裏的配置,只適用於經過PAM認證登陸用戶的資源限制,它對systemd的service的資源限制不生效。對於systemd service的資源限制的配置以下:
全局的配置,放在文件 /etc/systemd/system.conf和/etc/systemd/user.conf

 DefaultLimitCORE=infinity
 DefaultLimitNOFILE=100000
 DefaultLimitNPROC=100000

查看一個進程的limit設置:

 cat /proc/[PID]/limits

針對單個Service,也能夠設置,以nginx爲例。編輯 /usr/lib/systemd/system/nginx.service 文件,或者 /usr/lib/systemd/system/nginx.service.d/my-limit.conf 文件,作以下配置:

 [Service]
 LimitCORE=infinity
 LimitNOFILE=65535
 LimitNPROC=65535

而後運行以下命令,才能生效。

 sudo systemctl daemon-reload
 sudo systemctl restart nginx.service
相關文章
相關標籤/搜索