Ubuntu – Permanently raising nofile limits in Ubuntu 14.04 LTS

cronpamsshulimit

I cannot seem to figure out what exactly is needed to allow the maximum number of file descriptors to be raised permanently for all users.

/etc/security/limits.conf:

root    hard    nofile    1500000
root    soft    nofile    1000000
root    hard    nproc     15000
root    soft    nproc     10000
*       hard    nofile    1500000
*       soft    nofile    1000000
*       hard    nproc     15000
*       soft    nproc     10000

I have placed the following in the /etc/pam.d/common-session:

session required pam_limits.so

After a reboot, logging in as any user and issuing ulimit -n resulted in 1024.

After that, I tried requiring pam_limits.so into every file under /etc/pam.d. Rebooted. Logged in. No such luck.

If I issue the command ulimit -n 1000000, then check, the limit is set as expected. So, I placed @reboot ulimit -n 1000000 into crontab -e. Rebooted. Logged in. No luck.

I checked /etc/ssh/sshd_config and PAM is enabled.

I have tried setting the limits on every reboot with:

/sbin/sysctl -w fs.file-max=1000000
/sbin/sysctl -p

No luck.

I have a server that has a ton of concurrent traffic, and need those limits that high, because it takes the server a very long time to clear out file descriptors. What do I have to do in order to permanently raise the file descriptor limit?

Best Answer

  • I increased the number of files limits for everyone this way (segment from /etc/security/limits.conf):

    #        - memlock - max locked-in-memory address space (KB)
    #        - nofile - max number of open files (Doug: - so Samba will not complain)
    * - nofile 16384
    #        - rss - max resident set size (KB)
    #        - stack - max stack size (KB)
    

    That was on a 12.04 server. However, I tested 100000 on my 14.04 server and it worked fine. (Edit: also checked on 20.04)

    ~/config/security$ ulimit -n
    16384
    

    EDIT: For most applications that is enough, but it doesn't change the default value for root:

    # ulimit -n
    1024
    

    If the number also needs to be changed for root, then (2020.09.04 - I now use 131,072):

    #        - memlock - max locked-in-memory address space (KB)
    #        - nofile - max number of open file descriptors
    * - nofile 131072
    root - nofile 131072
    #        - rss - max resident set size (KB)
    #        - stack - max stack size (KB)
    

    And so:

    $ sudo su
    # ulimit -n
    131072
    
  • Related Question