Monitor open files limits, etc

We've been hitting the max open files limit on a few services recently. There are also a bunch of other limits in place. Is there a way to monitor how close processes are to these limits so we can be alerted when it's time to either up the limits or fix the root cause? On the same note, is it possible to view a log of these events so we know when a crash occurs it's because of hitting one of these limits?


Yes, you can. /proc/<pid>/fd lists all open file descriptors. Memory usage can be seen in /proc/<pid>/{maps,smaps}. Just browse thorugh /proc/<pid> a bit and google files you don't understand :)


Assuming a linux server.

see global max open files:

cat /proc/sys/fs/file-max

see global current open files:

cat /proc/sys/fs/file-nr

change global max open files:

sysctl -w fs.file-max=1000000 or edit sysctl.conf

see limit on current user:

ulimit -Hn   (hard limit)
ulimit -Sn   (soft limit)

change limit on user: edit /etc/security/limit.conf to set limits for a webserver for example

apache2 soft nofile 4096
apache2 hard nofile 10000

You can have a script go through /proc and gives you some statistics:

for pid in $(pgrep apache2); do ls /proc/$pid/fd | wc -l; done