Además de las otras respuestas, puede configurar Linux para que requiera respaldo para cualquier memoria asignada, incluso si los programas no la usan.
Sin embargo, el exceso de memoria y el temor al asesino de OOM no son partes necesarias de la experiencia de Linux. Simplemente establecer el parámetro sysctl vm / overcommit_memory en 2 desactiva el comportamiento de sobrecompromiso y mantiene a raya al asesino OOM para siempre. La mayoría de los sistemas modernos deberían tener suficiente espacio en disco para proporcionar un amplio archivo de intercambio para la mayoría de las situaciones. En lugar de tratar de evitar que se maten los procesos favoritos cuando se agota la memoria comprometida en exceso, podría ser más fácil evitar la situación por completo. [ Respiro del asesino OOM ]
Si un programa asigna memoria, el núcleo puede simplemente marcar más páginas de intercambio como confirmadas. Esta indicación se almacena en el administrador de memoria del kernel, el espacio de disco real aún no se ha tocado. Hasta que se use esa memoria, nada tiene que intercambiarse dentro y fuera. Si nunca se usan, el uso del intercambio fluctuará sin afectar el rendimiento.
Debido a que los procesos se presentan con su propio espacio de direcciones o "vista" (así es como funciona el intercambio en primer lugar), el núcleo tiene mucho margen de maniobra en cómo lo maneja. Utilizando un ejemplo de fork también del artículo vinculado anteriormente, dado que es mucho más probable que haya compartido páginas de memoria que asignar una gran cantidad de memoria no utilizada, la memoria se puede asignar copia en escritura, aumentando el recuento de uso de intercambio. Cuando en realidad está escrito en (lo que podría no suceder), entonces ese "intercambio comprometido" puede reemplazarse por cualquier RAM no utilizada (luego aumenta el uso de RAM y disminuye el uso de intercambio). Imagine un proceso con 500 MB asignados que se bifurca en una máquina con toda o casi toda la RAM en uso. Si hay 500 MB disponibles en el intercambio (y el espacio en disco es barato, ¿qué tan grande es el 1% de las unidades de TB actuales?: P), no se debe copiar memoria (todavía,
Por lo tanto, se evita la posibilidad del asesino OOM, y es mucho más simple diseñar la mayoría del software con la suposición de que las asignaciones de memoria (incluidas las asignaciones "implícitas" a través de algo como fork) tienen éxito o fallan de inmediato, con la práctica de que si la memoria debe ser intercambiado entonces podría afectar el rendimiento. Ese impacto casi siempre es leve, pero en el peor de los casos conduce a una paliza de intercambio (aún a veces preferible a un bloqueo directo del kernel o un asesino OOM).
Aunque no conozco los detalles exactos de cómo funciona el administrador de memoria de Linux, esta respuesta es mi propia comprensión generalizada y lo que recuerdo haber leído a lo largo de los años. Intenté volver a editar esta respuesta, por lo que se requiere una comprensión mínima del diseño del sistema operativo (es considerablemente complejo y no es algo que me interese demasiado), pero parece divagar un poco; avíseme si ve cómo podría mejorarse. Por otro lado, podría no ser una pregunta tan vergonzosamente básica.