Tengo un proceso de larga ejecución que finalmente alcanzará el límite máximo de archivos abiertos. Sé cómo cambiar eso después de que falla, pero ¿hay alguna manera de cambiar eso para el proceso en ejecución, desde la línea de comandos?
27
Como se documenta aquí , el
prlimit
comando, introducido con util-linux 2.21 le permite leer y cambiar los límites de los procesos en ejecución.Este es un seguimiento de la escritura
/proc/<pid>/limits
, que no se integró en el núcleo de la línea principal. Esta solución debería funcionar.Si aún no lo
prlimit(1)
ha hecho, puede encontrar el código para una versión minimalista en la página deprlimit(2)
manual .fuente
En la versión más reciente de util-linux-ng, puede usar el comando prlimit, para obtener más información, lea este enlace /superuser/404239/setting-ulimit-on-a-running-process
fuente
Puede probar ulimit
man ulimit
con la opción -n, sin embargo, la página mag no admite la mayoría de los sistemas operativos y no permite que esto se configure.Puede establecer un límite de descripciones de archivo de todo el sistema utilizando
sysctl -w fs.file-max=N
y hacer que los cambios persistan después del arranque en/etc/sysctl.conf
Sin embargo, también sugeriría mirar el proceso para ver si realmente necesita tener tantos archivos abiertos en un momento dado, y si de hecho puede cerrar algunos archivos y ser más eficiente en el proceso.
fuente
ulimit
no aplica la configuración a los procesos en ejecución .El proceso podría cambiar sus propios límites flexibles si está programado para hacerlo (o si logra piratearlo), pero no puede aumentar sus límites estrictos a menos que tenga la capacidad CAP_SYS_RESOURCE. Puede inspeccionar los límites en tiempo de ejecución en
/proc/$pid/limits
.fuente