centos7 修改进程最大文件数

CentOS7 系统服务资源限制调整
本文探讨了在CentOS7中遇到进程打开文件数限制的问题,通过`ulimit -n`查看到的限制与实际运行的程序限制不符。通过分析`/proc/<pid>/limits`发现系统层面的配置并未对服务生效。问题在于`/etc/security/limits.conf`的配置仅适用于通过PAM认证的登录用户,而非systemd服务。为了解决这个问题,文章提出了两种解决方案:1) 在对应的服务`.service`文件中直接添加资源限制;2) 修改`/etc/systemd/system.conf`或`/etc/systemd/user.conf`来设置系统或用户实例的资源限制。

做项目时发现一个问题,通过ulimit -n查看系统限制的单个进程最大句柄数是65535,但是在自己的程序中发现远远达不到这个限制就已经报错了:too many open files。到底是因为一瞬间程序本身确实用掉了这么大的句柄,还是有其他什么原因呢?

解决问题前,先学习了一个查看指定进程资源限制的命令:cat /proc/<pid>/limits

可以发现,系统层面的控制对我的进程来说并不生效。

在我的环境中,是通过 /etc/security/limits.conf中添加了以下两行:

为什么不生效呢? 仔细看limits.conf这个文件的开头:

 

发现了吧?limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。而我的程序正好封装成service了!!

对于systemd service的资源限制,如何配置呢?

有两种方法:

1、单个service的配置。比如我在自己封装的.service文件中添加了一行:

添加后重新加载就行了 (systemctl daemon-reload)

2、全局的配置(这个没有尝试过)

修改/etc/systemd/system.conf或者/etc/systemd/user.conf。这两个文件中有DefaultLimitNOFILE这个配置项。system.conf 是系统实例使用的,user.conf用户实例使用的。一般的sevice,使用system.conf中的配置即可。修改后需要重启系统。

<think>好的,用户想在CentOS 7修改系统的最大件限制,特别是关于ulimit的配置方法。我需要根据提供的引用资料整理出正确的步骤。 首先,引用[1]提到有两个主要配置件:/etc/security/limits.conf和/etc/security/limits.d/20-nproc.conf。需要注意后者会覆盖前者的设置,所以需要同时修改这两个件。引用[3]和[4]都提到要检查系统级别的限制,比如fs.file-max,可能需要修改/etc/sysctl.conf。另外,引用[4]还提到要检查进程的实际限制,通过/proc/${pid}/limits来确认。 接下来,步骤应该分为几个部分。首先是用户级别的ulimit设置,需要修改limits.conf和20-nproc.conf。然后是系统级别的件描述符设置,修改sysctl.conf中的fs.file-max。之后需要应用配置,可能需要重启服务或系统。最后,验证配置是否生效,使用ulimit -n和sysctl命令,以及检查进程的实际限制。 用户可能还需要注意临时修改和永久修改的区别,但问题中明确提到要永久改变,所以应集中在配置件上。此外,需要提醒用户如果修改后不生效,可能需要检查配置件语法,或者是否被其他件覆盖设置,比如limits.d下的其他件。 还要注意,不同的用户可能需要不同的配置,比如针对特定用户或用户组,需要在limits.conf中添加对应的条目。另外,nproc的限制可能在20-nproc.conf中,需要一并调整,避免进程数限制影响件描述符的设置。 最后,生成相关问题的时候,应该围绕系统资源限制的其他方面,比如进程数、临时修改方法、查看方法以及配置件冲突处理等。确保问题覆盖用户可能进一步的需求。</think>### CentOS 7修改系统最大件限制的配置方法 #### 一、修改用户级别限制 1. **编辑`/etc/security/limits.conf`件** 添加以下内容(以`*`表示对所有用户生效,也可指定具体用户): ```bash * soft nofile 65535 * hard nofile 65535 ``` - `soft`表示警告阈值,`hard`为实际限制值 - `nofile`表示最大打开件数[^1][^3] 2. **处理`20-nproc.conf`覆盖问题** 修改`/etc/security/limits.d/20-nproc.conf`件,确保其配置不覆盖主件设置: ```bash * soft nproc 4096 # 添加件描述符配置(如不存在需手动添加) * soft nofile 65535 * hard nofile 65535 ``` [^1] #### 二、修改系统级别限制 1. **编辑`/etc/sysctl.conf`** 添加或修改内核参数: ```bash fs.file-max = 2097152 ``` 执行`sysctl -p`立即生效[^4] #### 三、验证配置 1. **查看用户限制** ```bash ulimit -n # 当前会话限制 ulimit -a # 查看所有资源限制 ``` 2. **查看系统级别限制** ```bash sysctl fs.file-max ``` 3. **检查进程实际限制** ```bash cat /proc/<PID>/limits | grep "Max open files" ``` [^4] #### 四、特殊场景处理 - **服务进程限制**:某些服务(如Nginx/MySQL)有独立配置件,需同步修改 - **即时生效**:`ulimit -n 65535`(临时修改当前会话限制)[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值