¿Por qué limitar la cantidad de archivos abiertos y procesos en ejecución en Linux?

14

No tengo mucho conocimiento sobre el funcionamiento interno del sistema operativo, entonces, ¿por qué tenemos límites para la cantidad máxima de archivos abiertos y procesos en ejecución en Linux?

Agradecería que alguien pudiera ayudarme a entender.

aka_learner
fuente

Respuestas:

16

Esto es principalmente por razones históricas. En los mainframes de Linux más antiguos, muchos usuarios se conectarían y usarían los recursos del mainframe. Por supuesto, era necesario limitar, y dado que tales operaciones como los identificadores de archivos y los procesos se integraron en el núcleo, allí estaba limitado. También ayuda a limitar los ataques como la bomba tenedor . Aquí se muestra una defensa contra la bomba de forma utilizando los límites del proceso .

También ayuda a mantener controlados los servicios complejos y los demonios al no permitir la bifurcación fugitiva y la apertura de archivos, similar a lo que intenta hacer la bomba tenedor.

También se debe tener en cuenta cosas como la cantidad de RAM y CPU disponibles, y el hecho de que un contador de 32 bits solo puede hacer referencia a tanta cantidad (solo 4294967296 entradas que puede contar un contador de 32 bits), pero esos límites están lejos por encima de los establecidos habitualmente por programadores y administradores de sistemas. De todos modos, mucho antes de que tenga 4294967296 procesos, su máquina probablemente se habría reiniciado, tal como estaba previsto o cuando comenzó a bloquearse debido a la falta de recursos de otro recurso.

A menos que ejecute el Titan con sus 584 TiB de memoria (no lo hará, ya que Linux no se puede ejecutar como una instancia en una supercomputadora), probablemente no alcanzará este límite de proceso en el corto plazo. Incluso entonces, el proceso promedio solo tendría aproximadamente 146 KB de memoria, suponiendo que no hay memoria compartida.

Restablece a Mónica - ζ--
fuente
2
¡+1 para la bomba tenedor, demostró cuán peligrosos pueden ser estos métodos recursivos si se usan sin protección!
aka_learner
9

Hay límites para casi todo, tanto en la vida como en Linux. A veces, los límites son muy altos y no vale la pena preocuparse, y a veces son demasiado bajos, establecidos arbitrariamente por un programador perezoso, o establecidos por límites al hardware.

Los límites arbitrarios se producen cuando un programador toma una decisión, como la cantidad máxima de caracteres permitidos en un campo, como una dirección. Es mucho más fácil establecer un límite arbitrario que asignar memoria dinámicamente según sea necesario. No desea asignar toda la memoria disponible a un campo de entrada simple, pero tampoco desea permitir que la entrada sobrescriba otra memoria que pueda ser importante. Para archivos y procesos abiertos, puede haber un límite arbitrario, o puede estar limitado por la memoria disponible. Si es esto último, las cosas malas comenzarán a suceder a medida que se acerque al límite, y el sistema puede bloquearse, por lo que a menudo es bueno tener un límite que entre en juego antes de que eso suceda. A veces, los límites arbitrarios pueden determinarse al inicio dependiendo de la memoria o el espacio en disco, y generalmente son bastante inteligentes,

Luego, hay límites establecidos por hardware, como el tamaño de un entero o carácter. Si tiene un sistema de 32 bits, existen límites establecidos por el tamaño máximo de un entero (4,294,967,295 si no está firmado, o la mitad si está firmado).

Marty Fried
fuente
1
Los límites que parecen arbitrarios pueden estar basados ​​en estándares. Norma internacional limita las líneas de dirección postal a 39 caracteres. Tal límite puede parecer arbitrario. Un límite de 60 caracteres para una dirección probablemente sería arbitrario. Desafortunadamente, muy pocos programadores verifican los estándares, tantos límites (a veces correctos) se deciden arbitrariamente.
BillThor
Estoy de acuerdo; cuando todavía trabajaba como programador, pasaba mucho tiempo buscando los límites establecidos, como dijiste, o definidos en el sistema operativo como una macro (como max_path, etc.). Pero debo decir que los límites arbitrarios suelen ser mejores que ningún límite, especialmente para las longitudes de campo. :)
Marty Fried
7

Para los procesos, / proc / sys / kernel / pid_max es el pid máximo permitido, por lo que este es el límite estricto del número de procesos que pueden ejecutarse en cualquier instante. Sin embargo, los límites de memoria normalmente entran en juego mucho antes de eso.

Para el límite superior de archivos abiertos en toda la máquina, / proc / sys / fs / file-max es el límite rígido; esto se basa en la cantidad de memoria en la máquina, por lo que variará. El núcleo establece que esto sea:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

que resulta ser aproximadamente 100 por cada 1 MB de RAM.

Los límites por proceso son diferentes. ulimit los definirá.

Colin Ian King
fuente
-5

Tenemos un límite porque las computadoras tienen límites, tengo 4 GB de RAM, así que no puedo ejecutar 15 juegos ahora, ¿verdad?

Lo más probable es que pueda ejecutarlo con algo de retraso, pero no sería humano. Es el límite en su PC y en el Kernal de Linux. Necesitaría un mejor kernal y mucha RAM para poder contener cualquier programa que se le arroje .

Al igual que mi computadora portátil cuando ejecuté Windows 7, pude jugar Battlefield, pero me costó el 80% de mi RAM, así que si traté de jugar "Need For Speed", eso requiere un 60% Usualmente, puedo abrir ambos, pero todo mi sistema es ralentizado ya que estoy ejecutando 2 programas de servicio pesado, ambos están luchando por RAM (memoria de acceso aleatorio)

En pocas palabras, una computadora normal no puede ejecutar muchos programas a la vez Música, Bloc de notas, Navegador, Correo electrónico, Juego, Crees que eso es mucho en una computadora, pero eso es simple, Un juego como World of Warcraft toma mucha más RAM y hace que su computadora tenga problemas (¡a menos que tenga 8-16 GB de RAM como lo hacen las computadoras portátiles caras!)

Ubisoft Terzuz
fuente
Gracias por la información sobre los procesos, ya que sabemos que habrá una gran carga de CPU si muchos procesos se ejecutan simultáneamente, y el tráfico en los núcleos de la CPU será tan alto para manejarlo y con el tiempo su sistema entrará en estado de bloqueo, sin dar ningún correcto intervalo de tiempo a cualquiera de los procesos para ejecutar, supongo que si no estoy equivocado. Pero, ¿por qué también hay un límite para los archivos abiertos en Linux?
aka_learner
No sé acerca de un límite de archivos abiertos, no lo he experimentado en absoluto, tal vez son sus computadoras limitadas en comparación con las mías, no estoy seguro de eso. Siempre tengo unos 10 archivos abiertos, luego un navegador web, un reproductor de música y la Terminal abierta.
Ubisoft Terzuz
Generalmente sucede conmigo cuando mi base de datos mysql me da el siguiente "120428 20:30:01 [ERROR] / usr / sbin / mysqld: No se puede abrir el archivo: './djlabo_open/cart_layout.frm' (errno: 24)" error en su registro de errores porque Linux no le permite abrir este archivo de base de datos.
aka_learner
Probablemente sea algo muy diferente al límite del sistema operativo para abrir archivos.
Nanne
1
@Terzuz Realmente se basa en si las personas consideran que las respuestas de los demás son correctas. Muchas personas (incluyéndome a mí, desafortunadamente) sienten que esta respuesta puede no estar realmente abordando los límites mencionados en la pregunta, sino otros límites.
Restablece a Mónica - ζ--