centos 7 systemd service 设置limit,不生效问题

本文介绍了解决CentOS7下系统最大文件打开数设置不生效的问题。通过修改/etc/security/limits.conf文件来调整限制,但发现这种方法不适用于systemd启动的服务。文章详细解释了原因并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博文:
 
问题简述:Centos7下修改系统的最大文件打开数的时候,对系统启动的进程不生效
 
问题详述:Centos7下需修改系统最大文件打开数为100000,进程数为50000,于是做了如下操作
 
说       明:此问题只出现在centos7下,centos6版本不存在此问题
 
1:记录未修改之前的ulimit值
 
 
 
2:修改配置文件
  
vim  /etc/security/limits.conf   在后面添加
*      soft    nofile  100000
*      hard    nofile  100000
*      soft    nproc   65535
*      hard    nproc   65535

 

重启机器,修改 /etc/security/limits.conf 里的配置后,需重启机器才能生效
      
 
3:查看修改后的ulimit值
 
 
  
4:在这里看起来一切都很正常,也许一不小心就入坑了。为了对比现象,需要安装两个nginx,一个源码安装,一个yum安装
      
源码安装:(简单安装,只是为了验证和测试,不指定安装路径,默认是在/usr/local/nginx下)     
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure
make && make install

 

yum安装
yum -y install nginx

  

5:现象
 
1)先启动源码编译的nginx,并查看进程号及limit值,如下
 
启动nginx:   /usr/local/nginx/sbin/nginx
查看进程:     ps -ef |grep nginx
查看某个进程的limit值: cat /proc/进程号/limits
     
 
 
2)yum安装nginx启动
 
启动方法:systemctl start nginx.service ,然后查看进程号及其limit值,如下:
             
 
 
到这里问题就来了,为什么通过systemctl启动的nginx对limit的设置不生效 ?????
然后查看了1号进程的limit值( cat /proc/1/limits ),发现也是对修改/etc/security/limits.conf文件里的最大文件打开数和最大进程数没有生效
 
6:原因
 
仔细查看/etc/security/limits.conf文件的注释,说明了对系统服务不生效
 
 
7:解决办法
 
在Centos7系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf与/etc/security/limits.d下的文件设置即可。
 
对于systemd service的资源设置,则需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同时也会加载两个对应目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf和/etc/systemd/user.conf.d/*.conf。system.conf是系统实例使用的,user.conf是用户实例使用的。
 
vim /etc/systemd/system.conf
DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535

 

重启后,systemctl start nginx启动,然后根号进程号查看资源限制,得到
 
 
8:用到的相关命令
    
1)查看当前进程的最大可以打开的文件数
 
     cat /proc/进程ID/limits
 
2)查看当前进程实时打开的文件数
 
     lsof -p PID |wc -l
 
3)查看系统总限制打开文件的最大数量
 
     cat /proc/sys/fs/file-max
 
注:若设置不生效,查看包含的目录下的配置文件是否覆盖,如/etc/security/limits.d/下的文件是否覆盖了/etc/security/limits.conf设置的值 

转载至https://www.cnblogs.com/lemon-le/p/8505089.html


### CentOS中 `ulimit -n` 设置失败的解决方案 在CentOS系统中,`ulimit -n` 命令用于设置进程可以打开的最大文件描述符数量。如果发现该命令设置失败,可能是因为系统的软限制和硬限制未正确配置,或者相关的配置文件未被正确修改。 #### 1. 检查当前限制 首先,可以通过以下命令检查当前的文件描述符限制: ```bash ulimit -Sn # 查看当前软限制 ulimit -Hn # 查看当前硬限制 ``` 如果软限制或硬限制值低于预期值,则需要进行调整[^1]。 #### 2. 使用临时方法调整限制 可以通过以下命令临时调整文件描述符限制: ```bash ulimit -Sn <value> # 设置软限制 ulimit -Hn <value> # 设置硬限制 ``` 例如: ```bash ulimit -Sn 1048576 ulimit -Hn 1048576 ``` 注意:这种方式仅在当前会话中有效,退出终端后失效[^1]。 #### 3. 修改系统配置文件以永久生效 为了使更改永久生效,需要编辑系统配置文件。以下是具体步骤: - **修改 `/etc/security/limits.conf` 文件** 使用文本编辑器(如 `vim`)打开 `/etc/security/limits.conf` 文件,并添加以下内容: ```bash * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 ``` 这里的 `*` 表示对所有用户生效。如果需要针对特定用户(如 `root`),可以将 `*` 替换为具体的用户名[^2]。 - **修改 `/etc/systemd/user.conf` 和 `/etc/systemd/system.conf` 文件** 如果使用的是 systemd 管理的系统,还需要编辑以下两个文件: ```bash /etc/systemd/user.conf /etc/systemd/system.conf ``` 在这两个文件中找到 `DefaultLimitNOFILE` 参数,并将其值设置为期望的数值,例如: ```bash DefaultLimitNOFILE=65535 ``` - **修改 `/etc/security/limits.d/` 目录下的配置文件** 某些系统可能会在 `/etc/security/limits.d/` 目录下有额外的配置文件。确保这些文件中的设置与 `/etc/security/limits.conf` 一致。 #### 4. 重启服务或系统 完成上述配置后,需要重启相关服务或整个系统以使更改生效。可以尝试以下命令重启服务: ```bash systemctl daemon-reload systemctl restart <service_name> ``` 如果问题仍未解决,建议直接重启系统。 #### 5. 验证设置是否成功 最后,再次运行以下命令验证设置是否成功: ```bash ulimit -Sn ulimit -Hn ``` 如果显示的值与预期一致,则说明设置成功。 --- ### 注意事项 - 软限制(soft limit)不能超过硬限制(hard limit)。如果硬限制较低,即使设置了较高的软限制,也不会生效。 - 修改配置文件后,建议检查语法是否正确,避免因错误配置导致系统异常。 - 如果仍然无法解决问题,可以检查是否存在其他限制因素,例如内核参数 `fs.file-max` 的值是否足够大。可以通过以下命令查看和调整: ```bash sysctl fs.file-max sysctl -w fs.file-max=<value> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值