2010-09-17 16 views
11

¿Es posible aumentar el parámetro "Max open files" para el proceso de trabajo? me refiero a este parámetro:"Máx. Archivos abiertos" para el proceso de trabajo

cat /proc/<pid>/limits | grep files 

Gracias por sus consejos

+0

Información adicional: mi proceso es 'java'. Necesito aumentar "Máx. Archivos abiertos" sin detener el proceso. – wako

Respuesta

21

Como administrador del sistema: El archivo /etc/security/limits.conf controla esto en la mayoría de las instalaciones Linux; te permite establecer límites por usuario. Querrá una línea como myuser - nofile 1000.

Dentro de un proceso: The getrlimit and setrlimit calls controla la mayoría de los límites de asignación de recursos por proceso. RLIMIT_NOFILE controla la cantidad máxima de descriptores de archivos. Necesitará los permisos apropiados para llamarlo.

+0

Parece que esto es lo que necesito.¿Puedo establecer "setrlimit (RLIMIT_NOFILE, ...)" para algún proceso externo? – wako

+0

No conozco ninguno. Si lo hay, sospecho que lo encontrarás enterrado profundamente en alguna guía de programación específica de Linux, porque no puedo entender en qué otro lugar lo colocaría el estándar POSIX. –

+0

A veces 'limits.conf' no se tiene en cuenta y debe establecer' DefaultLimitNOFILE' en '/ etc/systemd/system.conf' y' user.conf'. – Xdg

4

This link detalles cómo cambiar este sistema amplia o por usuario.

+0

Gracias por un enlace. Pero lo he encontrado antes de preguntar :-) Pero el problema es cambiar el parámetro sin detener el proceso (en tiempo de ejecución) y para todo el proceso. – wako

+0

@wako: No se puede hacer desde fuera del proceso (a menos que esté ejecutando uno de los núcleos de desarrollo más recientes, lo que es poco probable) – caf

+0

@caf: Gracias. Esto es exactamente lo que quería escuchar. – wako

6

Tema viejo, lo sé.

Puede usar gdb, entrar en el proceso, llamar a las llamadas de sistema antes mencionadas para aumentar el límite que le interesa, luego continuar el trabajo y salir de gdb. He editado cosas sobre la marcha de esta manera un par de veces.

Su aplicación no estaría inactiva, pero se congeló por el momento mientras realizaba la llamada. si eres rápido (¡o lo escribes!), es probable que no se note.

+0

¡Gracias por el consejo! –

+0

+1 Gran sugerencia, [esta publicación] (http://superuser.com/a/441758/81173) y [este blog] (http://gregchapple.com/updating-ulimit-on-running-linux-process /) describe cómo hacerlo. –

+0

Sí, esto es algo así como ajustar Matrix para hacer que las cosas funcionen ... detener el mundo, editar una variable, continuar el mundo ... ¡oh! ¡Deja Vu! ¡Yo soy el Único! (bueno, cuando tengo gdb!) – lornix

3

Sí, es posible aumentar los límites en /proc/<pid>/limits en tiempo de ejecución. Sólo tiene que encontrar el PID y ejecutar a continuación comando:

echo -n "Max open files=20:20" > /proc/$pid/limits 
+2

No se está ejecutando en Ubuntu 14.04.2 LTS. –

3
echo -n "Max open files=20:20" > /proc/$pid/limits 

... trabaja en RHEL5.5 y RHEL6.7.

Tenga en cuenta que la "-n" es obligatoria; una línea nueva final generará una queja sobre argumentos inválidos.

12

Otra opción es usar el comando prlimit (del paquete util-linux). Por ejemplo, si desea establecer el número máximo de archivos abiertos para un proceso:

prlimit -n4096 -p pid_of_process

+0

o debian, o ubuntu, o ... – t2d

+0

Estoy usando linux mint (basado en Ubuntu) y no puedo encontrarlo en la instalación predeterminada. Normalmente es parte del paquete util-linux pero este paquete en Mint no trae este comando. – redobot

+0

➜ ~ lsb_release -d Descripción: \t Ubuntu 16.04.1 LTS ➜ ~ whereis prlimit prlimit:/usr/bin/prlimit /usr/share/man/man2/prlimit.2.gz/usr/share/man/man1/prlimit.1.g – t2d

3

Los siguientes comandos dan el Número máximo de archivos abiertos por proceso permitida por defecto límites (blando y duro respectivamente):

ulimit -Sa 
ulimit -Ha 

Puede usar un programa o un comando para cambiar estos límites. Mira ulimit (man ulimit).

Cuestiones relacionadas