打开文件限制未反映配置更改

打开文件限制未反映配置更改

我正在尝试增加 指示的最大打开文件硬限制(和软限制)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。

相关内容