我正在尝试增加 指示的最大打开文件硬限制(和软限制)ulimit -Hn
。但无论我更改什么配置,它4096
在重启后仍然保持开启状态。
在我的 中/etc/security/limits.conf
,我有以下条目(其他所有内容都被注释掉了):
* soft nofile 10000
* hard nofile 50000
我的/etc/pam.d/common-session
样子如下:
session [default=1] pam_permit.so
session requisit pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session required pam_limits.so
session optional pam_systemd.so
session optional pam_cgfs.so -c freezer,memory,name=systemd
为什么不将硬限制改为50000
,即是否有其他机制影响它?
更新:
奇怪的是,当su
我先对自己说“我”时,它的行为有所不同,即
$ whoami && ulimit -Hn
jdoe
4096
$ su - jdoe
$ whoami && ulimit -Hn
jdoe
50000
这怎么可能?
答案1
过了很久,我发现你需要添加
DefaultLimitNOFILE=65535
到/etc/systemd/system.conf
以及/etc/systemd/user.conf
也一样。
答案2
您还应该使用 prlimit 并更新您所在的当前会话(Bash)的值。尝试运行以下脚本。
echo "add openfiles limit..........................."
sudo cp /etc/security/limits.conf /etc/security/orig_limits.conf
sudo cat <<EOT >> /etc/security/limits.conf
* hard nofile 33000
* soft nofile 33000
root hard nofile 33000
root soft nofile 33000
EOT
sudo echo "session required pam_limits.so" > /etc/pam.d/common-session
sudo ulimit -n 33000
ulimit -u unlimited
update_ulimit_per_pid(){
sudo echo "prlimit for pid "$pid" before updating is "$(ulimit -n)
sudo echo "Updating ulimit for pid: "$pid
sudo prlimit --pid $pid --nofile=33000:33000
sudo echo "prlimit for pid "$pid" after updating is "$(ulimit -n)
}
for pid in `ps -ef | grep 'bash' | awk '{print $2}'` ; do update_ulimit_per_pid ; done
这应该可以工作。这不仅会在您重新登录时更新 ulimit,还会更新您所在的 bash 会话中的 ulimit。