ulimit PICKLE: "Operation not permitted" and "Command not found"

22,396

Solution 1

ulimit is a shell built-in, not an external command. It needs to be built in because it acts on the shell process itself, like cd: the limits, like the current directory, are a property of that particular process.

sudo bash -c 'ulimit -n 4096' would work, but it would change the limit for the bash process invoked by sudo only, which would not help you.

There are two values for each limit: the hard limit and the soft limit. Only root can raise the hard limit; anyone can lower the hard limit, and the soft limit can be modified in either direction with the only constraint that it cannot be higher than the hard limit. The soft limit is the actual value that matters.

Therefore you need to arrange that all your processes have a hard limit for open files of at least 4096. You can keep the soft limit at 1024. Before launching that process that requires a lot of files, raise the soft limit. In /etc/security/limits.conf, add the lines

paislee hard nofile 4096
paislee soft nofile 1024

where paislee is the name of the user you want to run your process as. In the shell that launches the process for which you want a higher limit, run

ulimit -Sn unlimited

to raise the soft limit to the hard limit.

Solution 2

open the file /etc/security/limits.conf and add the line <user> soft nofile <value>. for using ulimit change to root user and try the same.

Share:
22,396

Related videos on Youtube

calebds
Author by

calebds

Program writer for a respectable software company.

Updated on September 18, 2022

Comments

  • calebds
    calebds over 1 year

    I'm trying to increase the maximum number of open files for the current user

    > ulimit -n
    1024
    

    I attempt to increase and fail as follows

    > ulimit -n 4096
    bash: ulimit: open files: cannot modify limit: Operation not permitted
    

    So I do the natural thing and try to run with temp permission, but fail

    > sudo ulimit -n 4096
    sudo: ulimit: command not found
    

    Questions

    1. How to increase ulimit?
    2. Why is this happening?

    Using Fedora 14

  • Bram
    Bram about 8 years
    Alternatives to sudo bash -c are sudo -i which starts a login shell and sudo -s whcih starts a shell. The same limitations apply but this might be useful in other circumstances.
  • Tim
    Tim almost 6 years
    Thanks. May I ask some related questions? The other reply and post stackoverflow.com/a/17483998/156458 and unix.stackexchange.com/a/238413/674 and unix.stackexchange.com/a/169035/674 all recommended using sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". But both ulimit -c 1024 and exec su $LOGNAME" only affects the shell created by sudo, so what is the purpose of the command? exec su $LOGNAME" also doesn't do anything meaningful to make use of the changed limit. I am very confused and wonder if I am missing something.
  • schily
    schily almost 6 years
    Please note that ulimit -Sn unlimited does not work on most shells. The right method is to call ulimit -a and then call ulimit -n <number> where <number is the hard limit (the right column).