
Necesito deshacerme del molesto límite "Demasiados archivos abiertos en el sistema" en OS X 10.7.1.
¿Hay alguna manera?
Respuesta1
De acuerdo aeste útil artículo(que recomiendo leer):
De forma predeterminada, la cantidad máxima de archivos que Mac OS X puede abrir está establecida en 12,288 y la cantidad máxima de archivos que puede abrir un proceso determinado es 10,240.
Puedes comprobarlos con:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Puedes aumentar los límites (bajo tu propia responsabilidad) con:
sysctl -w kern.maxfiles=20480
(o el número que elijas)sysctl -w kern.maxfilesperproc=18000
(o el número que elijas)
Para que el cambio sea permanente, use sudo
para poner su configuración /etc/sysctl.conf
(que quizás tenga que crear), así:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Nota: En OS X 10.10 o inferior, puede agregar la configuración /etc/launchd.conf
Me gusta limit maxfiles
y anulará todo lo que coloque aquí.
Nuevamente, del artículo:
Una vez que haya hecho esto, el kernel tendrá una cantidad máxima de archivos, pero es posible que el shell no. Y dado que la mayoría de los procesos que ocuparán tantos archivos serán iniciados por el shell, querrás aumentar eso.
El comando para eso es:
ulimit -S -n 2048 # or whatever number you choose
Ese cambio también es temporal; solo dura la sesión actual de Shell. Puede agregarlo a su archivo de configuración de shell ( .bashrc
, .zshrc
o lo que sea) si desea que se ejecute cada vez que abra un shell.
Respuesta2
¡Parece que existe un método completamente diferente para cambiar el límite de archivos abiertos para cada versión de OS X!
Para OS X Sierra(10.12.X) necesitas:
1.
Cree un archivo /Library/LaunchDaemons/limit.maxfiles.plist
y pegue lo siguiente (siéntase libre de cambiar los dos números (que son los límites suaves y estrictos, respectivamente):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
2. Cambie el propietario de su nuevo archivo:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Cargue estas nuevas configuraciones:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Por último, comprueba que los límites son correctos:
launchctl limit maxfiles
Respuesta3
Otra opción puede ser encontrar al culpable:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Para el último puedes ver qué archivos están abiertos:
sudo lsof -n | grep socketfil
Y finalizar el proceso si así lo desea.
kill $pid
De los comentarios:
Por si sirve de algo, también puede obtener una lista de los ID de proceso con los archivos más abiertos usando
lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
Respuesta4
Amigos, en Mavericks 10.9.4
ulimit -n 2048
funciona bien. Es posible que deba iniciar una nueva sesión de inicio de sesión.