临时更改
- 临时更改(仅当前会话有效)可以直接使用
ulimit
命令,这种方式仅适用于当前 Shell 会话,退出终端或者系统重启后会恢复默认值
永久更改
第一步
- (1) 编辑
/etc/security/limits.conf
配置文件,添加以下两行内容
1
| sudo vi /etc/security/limits.conf
|
1 2
| * soft nofile 1048576 * hard nofile 1048576
|
- (2) 编辑
/etc/sysctl.conf
配置文件,添加以下一行内容
1
| sudo vi /etc/sysctl.conf
|
第二步
- (1) 编辑
/etc/pam.d/login
配置文件,添加以下一行内容(必须确保没有该配置项才添加)
1
| sudo vi /etc/pam.d/login
|
1
| session required pam_limits.so
|
- (2) 编辑
/etc/pam.d/common-session
配置文件,添加以下一行内容(必须确保没有该配置项才添加)
1
| sudo vi /etc/pam.d/common-session
|
1
| session required pam_limits.so
|
- (3) 编辑
/etc/pam.d/common-session-noninteractive
配置文件,添加以下一行内容(必须确保没有该配置项才添加)
1
| sudo vi /etc/pam.d/common-session-noninteractive
|
1
| session required pam_limits.so
|
第四步
如果运行的是 systemd
服务(比如 Nginx、MySQL),则需要更改 systemd
的配置。
1 2 3 4 5
| sudo mkdir -p /etc/systemd/system.conf.d
sudo vi /etc/systemd/system.conf.d/limits.conf
|
1 2 3 4
| [Manager] DefaultLimitNOFILE=1048576 DefaultLimitNOFILESoft=1048576 DefaultLimitNOFILEHard=1048576
|
1 2
| sudo systemctl daemon-reload
|
- (2) 为特定服务更改(可选操作),比如想更改像 Nginx 这样的
systemd
服务
1 2
| sudo systemctl edit nginx.service
|
1 2
| [Service] LimitNOFILE=1048576
|
1 2 3 4 5 6 7 8
| sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo systemctl show nginx --property=LimitNOFILE
|
验证更改
1
| cat /proc/sys/fs/file-max
|
1
| systemctl show --property=DefaultLimitNOFILE
|
常见问题
永久更改后 ulimit 不生效
根据上面的操作步骤更改系统的最大文件描述符数,并重启系统后,发现 ulimit -n
命令的执行输出和结果依旧是 1024
,即更改不生效。解决步骤如下:
- (1) 编辑
/etc/profile
配置文件,在文件末尾添加以下一行内容
1 2
| sudo source /etc/profile
|
- (2) 编辑
/etc/bash.bashrc
配置文件,在文件末尾添加以下一行内容
1
| sudo vi /etc/bash.bashrc
|
1 2
| sudo source /etc/bash.bashrc
|
参考资料