Mi aplicación se cierra en un punto de estrés relativamente bajo cuando ejecuto la prueba de carga en ella. Para las pruebas, uso este paquete npm loadtest .
Ejecuto la prueba a 1000 solicitudes por segundo con 10 de simultaneidad durante 10 segundos.
loadtest http://localhost:3000/my/api -t 10 -c 10 --rps 1000
La aplicación se cierra después de unos dos segundos y da el siguiente error que no es muy útil.
events.js:163 throw er; // Unhandled 'error' event ^ Error: accept ENFILE at exports._errnoException (util.js:1050:11) at TCP.onconnection (net.js:1462:24)
Aparentemente, esto está relacionado con la cantidad de archivos abiertos. Probé este comando ulimit -n <number>
pero no ayuda. Está limitado a 9999 (no puedo configurarlo por encima de eso).
La aplicación puede manejar alrededor de 400 rps en 10 concurrencias.
Mi máquina local es Mac OS Sierra, CPU: 1,6 GHz, RAM: 8 GB.
macOS establece límites de kernel bastante bajos en la cantidad permitida de descriptores de archivos abiertos (tanto en total como por proceso). Tuve que verificar en la Mac de mi esposa, y el límite por proceso predeterminado es 10240, que básicamente es exacto a lo que está limitado a usar ulimit
( ulimit
no puede ir más allá del límite impuesto por el kernel).
Sin embargo, es fácil aumentar estos valores ejecutando el comando sysctl
:
sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400
(esos son los valores que estoy usando en mi Mac, son bastante arbitrarios pero funcionan bien para mí)
Si desea que se mantengan después de reiniciar, agregue las siguientes dos líneas al archivo /etc/sysctl.conf
(si aún no existe, simplemente créelo):
kern.maxfiles=122880 kern.maxfilesperproc=102400