ULIMIT PICKLE: "Operación no permitida" y "Comando no encontrado"


15

Estoy tratando de aumentar la cantidad máxima de archivos abiertos para el usuario actual

> ulimit -n
1024

Intento aumentar y fallar de la siguiente manera

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Entonces hago lo natural e intento correr con permiso temporal, pero fallo

> sudo ulimit -n 4096
sudo: ulimit: command not found

Preguntas

  1. ¿Cómo aumentar ulimit?
  2. ¿Por qué está pasando esto?

Usando Fedora 14


Respuesta al comentario eliminado: ulimit 4096no funciona. Creo que -nes correcto Como prueba de concepto, funciona si primero sudo su - root(pero solo cambia para root).
paislee


Respuestas:


17

ulimites un shell incorporado, no un comando externo. Debe integrarse porque actúa sobre el proceso de shell en sí, como cd: los límites, como el directorio actual, son propiedad de ese proceso en particular.

sudo bash -c 'ulimit -n 4096'funcionaría, pero cambiaría el límite para el proceso bash invocado por sudosolo, lo que no lo ayudaría.

Hay dos valores para cada límite: el límite rígido y el límite flexible. Solo la raíz puede elevar el límite duro; cualquiera puede bajar el límite duro, y el límite suave se puede modificar en cualquier dirección con la única restricción de que no puede ser mayor que el límite duro. El límite blando es el valor real que importa.

Por lo tanto, debe organizar que todos sus procesos tengan un límite estricto para los archivos abiertos de al menos 4096. Puede mantener el límite flexible en 1024. Antes de iniciar ese proceso que requiere muchos archivos, aumente el límite flexible. En /etc/security/limits.conf, agregue las líneas

paislee hard nofile 4096
paislee soft nofile 1024

donde paisleeestá el nombre del usuario con el que desea ejecutar su proceso. En el shell que inicia el proceso para el que desea un límite superior, ejecute

ulimit -Sn unlimited

elevar el límite suave al límite duro.


1
Alternativas a sudo bash -cson las sudo -ique inician un shell de inicio de sesión y sudo -swhcih inicia un shell. Se aplican las mismas limitaciones, pero esto podría ser útil en otras circunstancias.
Bram

Gracias. ¿Puedo hacer algunas preguntas relacionadas? La otra respuesta y publicación stackoverflow.com/a/17483998/156458 y unix.stackexchange.com/a/238413/674 y unix.stackexchange.com/a/169035/674 se recomienda usar sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Pero ambos ulimit -c 1024y exec su $LOGNAME" solo afectan el shell creado por sudo, entonces, ¿cuál es el propósito del comando? exec su $LOGNAME"tampoco hace nada significativo para hacer uso del límite modificado. Estoy muy confundido y me pregunto si me falta algo.
Tim

Tenga en cuenta que ulimit -Sn unlimitedno funciona en la mayoría de los depósitos. El método correcto es llamar ulimit -ay luego llamar ulimit -n <number>donde <número es el límite rígido (la columna derecha).
schily

3

abra el archivo /etc/security/limits.confy agregue la línea <user> soft nofile <value>. para usar ulimitchange to root user e intente lo mismo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.