Linux /etc/security/limits.conf explicación


9

¿Alguien puede explicar (o saber de una fuente) que proporcione detalles sobre los elementos en limits.conf? La página del manual no da muchos detalles.

Por ejemplo dice:

rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

¿Cómo son estos diferentes? ¿Qué valores pueden tomar? ¿Qué hacen por defecto?

Algunos de los elementos son obvios, pero ¿dónde puedo encontrar mejores explicaciones (valores predeterminados, rangos, lo que realmente significan, etc.) de:

data 
maximum data size (KB) 

fsize 
maximum filesize (KB) 

memlock 
maximum locked-in-memory address space (KB) 

cpu 
maximum CPU time (minutes) 

nice 
maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] 

¿Qué sucede cuando se excede la CPU? Los procesos se matan? ¿Solo un proceso o todo el usuario tiene prohibido usar la CPU? ¿Es esto por una sesión o por un tiempo máximo en cada minuto?

Traté de encontrar respuestas, pero todo lo que puedo encontrar es la página de manual que casi no proporciona detalles.


El rute es una excelente introducción a la Administración de Linux, aunque no proporciona muchos detalles sobre los límites.conf, le dice dónde encontrar esta información - rute.2038bug.com/index.html.gz
symcbean

Respuestas:


18
rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

¿Por qué son diferentes?

Hay diferentes clases de planificadores de procesos en Linux. El predeterminado (CFQ) básicamente le da la misma cantidad de tiempo a cada proceso que desea ejecutar y pone en cola las tareas ejecutables de tal manera que todos esperen en promedio la misma cantidad de tiempo por su turno. Existen algunas excepciones a esta regla, pero esa es la idea básica.

Otra clase de planificador es el planificador en tiempo real. El tiempo real es un poco diferente, en lugar de poner en cola las tareas ejecutables en un esquema de colas justo, el proceso en tiempo real obtendrá el tiempo de CPU tan pronto como sea necesario para el proceso, esto desaloja un proceso en ejecución de la CPU para dejar espacio para el 'tiempo real 'proceso.

¿Qué valores pueden tomar?

Lo que hace 'prioridad' es alterar la simplicidad del proceso para que, al iniciar sesión, su proceso principal comience con una cierta amabilidad, cualquier proceso hijo que genere también comience con la misma amabilidad.

Esto tiene el efecto de hacer que sea más probable que se programe a favor de otros procesos competitivos y se puede hacer que la experiencia del usuario sea más receptiva / interactiva para los valores de bondad más bajos y menos receptiva / interactiva si se eleva la simpatía.

Puede ser importante que los usuarios normales de inicio de sesión tengan una prioridad más baja que los demonios reparables, por ejemplo, o que el usuario root tenga una prioridad de inicio de sesión más alta que todo lo demás.

En cuanto al tiempo real, la contención se maneja con el campo 'rtprio'. Si tiene dos tareas en tiempo real que desean ejecutarse, el valor 'rtprio' se usa para determinar cuál de los procesos elegir primero para prioridad. Un rtprio superior produce tareas de mayor prioridad.

Establecer esto en los límites.conf permite que las tareas en tiempo real se establezcan en una banda de prioridad particular sin necesidad de root para establecer el valor. Esto no tiene ningún efecto en las tareas que no están configuradas para ejecutarse utilizando un programador en tiempo real.

El valor 'agradable' debería hacer lo mismo que 'rtprio' pero para la programación CFQ estándar. Aunque nunca lo he intentado. Establece el proceso inicial generado cuando PAM establece estos límites en ese buen valor, un usuario normal puede ir a ese buen nivel o más alto sin necesidad de root para establecerlos. Si no renice explícitamente, significa que todos los procesos generados a partir de un shell a partir de ese inicio de sesión (por ejemplo) heredarán el valor agradable establecido en los límites.conf del proceso principal que se creó inicialmente.

¿Cuáles son los valores predeterminados?

Los límites `` predeterminados '': técnicamente, todos se establecen en lo que es pid 1 a menos que se establezca explícitamente, los límites de recursos se heredan del proceso padre, si no se han definido o anulado límites en ningún lugar, entonces la herencia de inites la predeterminada.

Otros valores

data 
maximum data size (KB) 

Cuando se inicializa un proceso, asigna algo de memoria conocida como el 'segmento de datos' cuando el proceso se copia en la memoria, aquí es donde vive el espacio para los globales, tal vez algunos otros datos y memoria inicializados asignados del montón. El límite controla la cantidad máxima asignada que puede tomar un proceso.

Es poco probable que llegue a este límite porque malloc () rara vez usa en exceso el segmento de datos para almacenar datos.

fsize 
maximum filesize (KB) 

Literalmente, esto solo establece el tamaño máximo en el que se puede escribir un archivo como con ese usuario.

memlock 
maximum locked-in-memory address space (KB) 

Casi toda la memoria que ha adquirido una aplicación es 'desalojable'. Eso se puede intercambiar. La memoria bloqueada nunca se puede intercambiar y permanece residente. Este valor está estrictamente controlado porque las personas pueden abusar de él para privar a un sistema de memoria y provocar el intercambio. Por lo general, es útil con aplicaciones de seguridad (que nunca quieren que se intercambien sus páginas, y que se puedan leer desde la partición de intercambio).

cpu 
maximum CPU time (minutes) 

Esto representa la cantidad total de tiempo que un proceso puede consumir en una CPU. Un proceso que excede este valor es eliminado. Tenga en cuenta que esto NO es lo mismo que el tiempo transcurrido desde que se inició el proceso. Es decir, un límite de tiempo de procesamiento de 1 minuto tardaría 1 minuto en consumirse si el proceso tuviera un 100% de utilización de la CPU, pero 2 minutos en consumirse si el proceso utilizara un 50% de utilización.

¿Qué sucede cuando se excede la CPU?

El proceso recibe una señal de SIGXCPUinterrupción que finaliza el proceso. Esto puede ser atrapado por el proceso padre y manejado allí.

¿Solo un proceso o todo el usuario tiene prohibido usar la CPU?

Casi todos los límites a los que se hace referencia se manejan por proceso. Tiempo de CPU incluido. Creo que los únicos que no lo son son el número total de inicios de sesión y el número total de procesos realizados por ese usuario.

Algunos otros problemas con límites son:

  • Max procesos incluye el número de subprocesos ligeros.
  • El límite de RSS no hace nada y no lo ha hecho durante varios años, no tiene sentido establecerlo.

1

Esto es para el pam_limitsmódulo ... es setrlimit(2)y sysctl(8)valores. Mi búsqueda no descubrió ningún límite difícil, pero las páginas de manual citadas dan algunas explicaciones.


1

Las respuestas rápidas son buenas respuestas, así que aquí va.

  • Descubra los valores mínimo y máximo para las prioridades con schedtool -r; y
  • consultar los límites actuales con ulimit -a.

No olvide establecer los límites blandos y duros, incluso si tendrían el mismo valor. En mis pruebas, esto era lo único que mostraría una diferencia en el comando ulimit.

Espero que esto te ayude.

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.