ulimit PICKLE: "Operation not permitted" and "Command not found"
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.
Related videos on Youtube
Comments
-
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
- How to increase ulimit?
- Why is this happening?
Using Fedora 14
-
Admin over 12 yearsReponse to deleted comment:
ulimit 4096
doesn't work. I think-n
is correct. As a proof of concept it works if I firstsudo su - root
(but only changes for root). -
Admin over 8 yearsWhat is PICKLE? SU superuser.com/questions/79717/…
-
Admin over 8 years
-
Bram about 8 yearsAlternatives to
sudo bash -c
aresudo -i
which starts a login shell andsudo -s
whcih starts a shell. The same limitations apply but this might be useful in other circumstances. -
Tim almost 6 yearsThanks. 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 bothulimit -c 1024
andexec su $LOGNAME"
only affects the shell created bysudo
, 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 almost 6 yearsPlease note that
ulimit -Sn unlimited
does not work on most shells. The right method is to callulimit -a
and then callulimit -n <number>
where <number is the hard limit (the right column).