¿Cómo verifico el ulimit para otro usuario y cambio los archivos abiertos?

18

Tengo un proceso ejecutándose como usuario de Gearman y quiero cambiar open filespara evitar este desagradable error:

ERROR 2014-09-12 17: 49: 14.000000 [main] accept (Demasiados archivos abiertos) -> libgearman-server / gearmand.cc: 788

¿Cómo puedo ejecutar ulimit como otro usuario en Ubuntu y cambiar los archivos abiertos? Actualmente no inicio sesión como gearman pero sí tengo acceso de root. Intenté hacer esto:

su gearman --shell /bin/bash --command "ulimit -n"

como se recomienda aquí, pero nada obtiene la salida:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$
Tony
fuente

Respuestas:

25

Revisando esto solo porque me topé con él durante una búsqueda en Google y encontré que el comentario de Tony era útil: si bien es cierto que los límites se colocan en el nivel del proceso, la forma en que determinaría los límites establecidos para un usuario en particular sería encuentre los procesos que han comenzado y luego verifique el proc/${id}/limits.

Específicamente:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID
phette23
fuente
2
Esta debería ser la respuesta aceptada, la usó para averiguar el ulimit actual para el usuario redis en Debian.
Tholu
6

Cuando ejecuta el ulimitcomando, solo afecta el proceso que se está ejecutando ulimit(el shell) y todos los subprocesos. Entonces, cuando ejecuta bash --command "ulimit -n", solo afecta la cantidad de archivos abiertos para esa instancia de bash, luego bash sale, por lo que los procesos futuros no se ven afectados.

Por lo tanto, para lograr lo que desea (aumentar el límite de archivos abiertos para su proceso real), probablemente tenga más sentido editar limits.confpara aumentar el límite de archivos abiertos para su usuario de Gearman específico.

Ver ejemplos de limits.conf en otro lugar o aquí .

BIOSCMOS
fuente
Eso es también lo que encontré, pero me encantaría poder comprobar si "entró en vigencia". Ya no tengo el problema que tenía, así que estoy seguro de que lo hizo
Tony
10
Así es como se verifica more /proc/<proc_id>/limits ... tal vez valga la pena agregar a la respuesta
Tony
55
Vale la pena mencionar la ubicación de los límites.conf también:/etc/security/limits.conf
UpTheCreek
1

Intenta usarlo su - <USERNAME> -c ulimit' -Hn'. Lo acabo de probar en CEntOS 7 y funciona.

Christian Jürgens
fuente
1
Esto no funcionará si <USERNAME>no puede iniciar sesión (tiene el shell nologin).
dr01