RedHat对进程打开文件句柄数主要经过设置全局值和登录用户分别管理。其中/proc/sys/fs下设置全局最大文件句柄数和用户进程能打开的最大文件句柄数,这两个参数通常状况下不须要修改。shell
对于普通用户或者进程经过/etc/security/limits.conf和/etc/security/limits.d/*.conf进行管理。或者经过ulimit 命令进行设置,但经过ulimit设置只对当前shell启动的进程有效。二者的设置生效范围和设置时机不一样,详见三 操做系统limits.conf生效机制。vim
Redhat 7 之后对Systemd启动的服务的最大句柄数经过/etc/systemd/system.conf和/etc/systemd/user.conf进行管理。操作系统
一 、操做系统全局设置3d
1.查看系统的初始设置,默认为1024*1024=1048576blog
2.查看/etc/sysctl.conf和/etc/sysctl.con./*.conf的设置,若是须要修改sysctl.conf,则修改后须执行sysctl –p使修改生效。进程
3.查看/etc/security/limits.conf 以及/etc/security/limits.d/*.conf 。操做系统默认先加载limits.conf后加载limits.d/*.conf,因此相同配置后面会覆盖前面。资源
以上参数设置的关系it
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
注:soft limit表示对当前用户生效的值,用户能够经过命令或者脚本进行修改,可是不能超过hard limit。而hard limit 只用root才能修改,且不能超过nr_open数。
2、 对Systemd启动程序的设置
Red Hat 7使用Systemd代替了SysV,所以systemd启动的服务使用配置文件/etc/systemd/system.conf和/etc/systemd/user.conf进行管理,不受limits.conf限制。若是存在/etc/system/system.conf.d/*.conf 则一样会覆盖system.conf相同配置项。修改该配置文件后重启系统后生效。主要使用如下两个选项进行限制:
DefaultLimitNOFILE #限制systemd启动进程打开文件数
DefaultLimitNPROC #限制systemd 建立进程数
系统限制
普通用户
systemctl启动的单个服务如何修改打开句柄数:
1.经过命令查看服务对应的配置文件:
systemctl status example.service
2.编辑对应的配置文件,添加以下内容:
vim /usr/lib/systemd/system/example.service
3.经过如下命令使配置生效
sudo systemctl deamon-reload
三 、操做系统limis.conf生效机制
ulimit –a显示以下,其中-n后面的为进程能够打开的最大文件句柄数。其余值为系统默认值。经过ulimit -n设置的值只限制当前shell启动进程能够打开的文件句柄数。
Linux对用户使用资源的限制经过PAM对登录用户进行身份验证并设置相应的限制。
具体顺序以下。从用户登录开始,操做系统会依次执行以下三部
1. /etc/pam.d/login
2. /etc/pam.d/system-auth
3. /lib64/security/pam_limits.so
具体内容以下:
1.在/etc/pam.d/login 中调用system-auth
2. 在/etc/pam.d/system-auth 调用pam_limits.so
3. 经过grep查看/lib64/security/pam_limits.so 能够看到limits.conf和limits.d/*.conf
4.在rc.local中设置ulimit -n 6635是否能够呢?
先说答案,可能不行。主要是操做系统加载顺序致使的,操做系统在启动时加载rc.local,而后在用户登录时执行 limits.conf,最后在设置用户环境变量时执行/etc/profile 。所以后面的limits.conf和/etc/profile 中的 ulimit 命令设置都可能覆盖之前的设置。
四 结论
每次用户登陆时会先加载/etc/security/limits.conf 以及/etc/security/limits.d/*.conf的配置,再执行/etc/profile 中的设置,所以在更改进程打开最大文件句柄数限制时有两种方案:
1.按格式修改/etc/security/limits.conf,从新登录使limits.conf生效,而后再启动服务程序;
2.在/etc/profile 添加ulimit –n 65535 设置,从新登录或者执行source /etc/profile命令,而后启动服务程序;
针对设置了免密登录的状况,因为没有了了用户登录验证过程,因此不会加载limits.conf文件,所以建议经过/etc/profile 中添加ulimit –n 65535命令设置,而后在启动服务程序以前执行source命令使该设置生效。