This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the unix category.
Last Updated: 2024-11-21
There are limits on how many open files you may have on unix-systems
When developing Project S, I got the following error:
failed to open stream - too many open files
How do we find out what our per-process file limit is?
First find the pid
(e.g. with ps | grep php
revealing, say, 1216).
Then view the /proc/{PID}/limits
entry to show what the limit is on that running process
$ cat /proc/1216/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 7814 7814 processes
# Important bit
Max open files 1024 4096 files
Max locked memory 16777216 16777216 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 7814 7814 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
So only 7814 files as a hard limit. That's not a lot, is it?
Regarding changing this limit, a lot of online tutorials use ulimit
. This,
however, is deprecated in favor of sysctl
.
(sysctl
is used to configure Kernel parameters at run time.)
The limit can thus be increased system-wide by editing the limits file
/etc/sysctl.conf
then running sysctl -p
.
Man page extract for -p
flag:
-p[FILE], --load[=FILE]
Load in sysctl settings from the file specified or /etc/sysctl.conf if none given