在 Ubuntu 22.04 中,可以通过修改系统配置来调整进程启动后能够打开的文件数软限制。软限制是指操作系统允许单个进程打开的文件描述符的最大数量。以下是调整该限制的方法:
1. 查看当前限制
首先,你可以通过 ulimit
命令查看当前的软限制和硬限制:
ulimit -n
这个命令会返回当前进程可以打开的最大文件数(软限制)。
2. 临时调整(仅对当前会话有效)
你可以使用 ulimit
命令来临时调整当前 shell 会话中的文件打开限制:
ulimit -n 65535
这将把软限制设置为 65535。请注意,这个限制仅在当前终端会话中有效,退出会话后会恢复默认设置。
3. 永久调整
要永久修改文件打开限制,需要修改系统配置文件,确保新的设置在每次系统启动时生效。
(a) 修改 /etc/security/limits.conf
编辑 /etc/security/limits.conf
文件,设置适当的软限制和硬限制。打开该文件进行编辑:
sudo nano /etc/security/limits.conf
然后添加如下行:
root soft nofile 65535
root hard nofile 65535
这将设置root用户的软限制和硬限制都为 65535。
注意
1)我尝试了 * soft nofile 65535,本来想设置所有用户,但没有成功。
2)如果是nginx,则需要添加(nginx是以nginx启动的)
nginx soft nofile 65535
nginx hard nofile 65535
(b) 修改 /etc/pam.d/common-session
和 /etc/pam.d/common-session-noninteractive
确保 PAM(可插拔认证模块)能够应用这些限制。编辑以下文件:
sudo nano /etc/pam.d/common-session
在文件的末尾添加以下行:
session required pam_limits.so
这将确保 PAM 模块在会话启动时加载限制配置。
© 修改 /etc/sysctl.conf
(可选)
有时候,内核级别的限制可能会影响文件描述符的上限。如果需要,你还可以调整内核参数:
sudo nano /etc/sysctl.conf
添加以下行:
fs.file-max = 1000000
然后应用更改:
sudo sysctl -p
4. 重启系统
为了确保所有更改生效,最好重启计算机或重新登录。
5. 验证
重启后,可以使用以下命令验证设置是否成功:
ulimit -n
或者查看系统级别的文件描述符限制:
cat /proc/sys/fs/file-max
这样,你就可以根据需要调整 Ubuntu 22.04 中进程的文件打开数软限制了。
6. 对于 systemd
启动的服务
如果你的进程是通过 systemd
启动的(例如作为服务或后台进程),limits.conf
配置也可能不会直接生效。这是因为 systemd
管理的进程有自己的资源限制机制。
-
要为
systemd
管理的服务设置文件描述符限制,你需要编辑相应服务的配置文件(如/etc/systemd/system/your-service.service
),并在[Service]
部分中设置LimitNOFILE
:[Service] LimitNOFILE=65535
然后重新加载
systemd
配置并重启服务:sudo systemctl daemon-reload sudo systemctl restart your-service
如何判定某个进程的文件数打开限制:
cat /proc/$(pgrep nginx | head -n 1)/limits | grep ‘Max open files’