System Level
$ sysctl -a |grep files
kern.maxfiles: 780418
kern.maxfilesperproc: 702369
kern.openfiles: 627
p1003_1b.mapped_files: 200112
To make the change permanent, use sudo
to put your settings in /etc/sysctl.conf
(which you may have to create), like this:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Session/Shell Level
$ ulimit -n
702369
$ limits
Resource limits (current):
cputime infinity secs
filesize infinity kB
datasize 33554432 kB
stacksize 524288 kB
coredumpsize infinity kB
memoryuse infinity kB
memorylocked infinity kB
maxprocesses 26802
openfiles 702369
sbsize infinity bytes
vmemoryuse infinity kB
pseudo-terminals infinity
swapuse infinity kB
kqueues infinity
umtxp infinity
Debug
$ lsof -n | awk '{print $2 "\t" $1}' | sort | uniq -c | sort
# lsof outputs open file info, awk then gives us the PID and proc name which gets sorted and uniq gives a count of each which we sort to have the largest file count at the bottom of the list. What you end up with is a list of two numbers and a name - count of files open followed by the PID and proc name that has them open.
# The catch is that it also includes network connections (I know how to list only network but not sure how to exclude them)
# show you the full program name if it has been shortened.
$ ps ax | grep PID
# show all the open files for PID
$ lsof -p PID
Reference
- https://unix.stackexchange.com/questions/66863/freebsd-too-many-open-files-but-should-be-able-to-open-another-160-000-files
- https://lists.freebsd.org/pipermail/freebsd-stable/2012-March/066983.html