Tengo un programa C++/Linux, que dentro de 2-3 segundos de ejecutarse comienza a escupir el error std::bad alloc
en una RAM de 32GB (y se reinicia mediante la llamada envoltura). Lo que realmente me importa es resolver este problema, pero me gustaría ir paso a paso y aumentar mi confianza en mi comprensión del problema.obteniendo el error std :: bad_alloc; Cómo verificar de forma cruzada que el sistema operativo se está quedando sin memoria
Parece que el sistema no puede asignar memoria para una solicitud new
(esto sucedería cuando el sistema operativo se ha quedado sin memoria). Mientras el programa se está ejecutando, en otro terminal ejecuto el comando sar
con el menor intervalo posible (1 segundo), pero veo que kbcached
tiene ~ 24GB de memoria. ¿Por qué el sistema operativo no puede liberar el almacenamiento en caché y hacer que esa memoria esté disponible para la solicitud new
? O bien 1 segundo es demasiado tiempo (en comparación con la velocidad con la que se ejecutan los programas) o estoy haciendo algo mal aquí.
Básicamente me gustaría realizar una verificación cruzada y señalar que el sistema operativo se está quedando sin memoria y por lo tanto no puede asignar memoria, y luego tomar las cosas a partir de este punto. ¿Cómo hacerlo?
Idealmente, me gustaría tener las estadísticas del sistema justo en el momento en que la asignación de memoria falla, como la cantidad de almacenamiento en caché, la memoria total utilizada hasta etc.
Solo una nota .. no tiene nada que ver con la cantidad de RAM que tiene, depende de la cantidad de memoria libre presente en el espacio de direcciones de la memoria virtual de proceso. No obstante, no conozco el comando para verificar el proceso de asignación de la memoria virtual. – Naveen
Supongo que esto será específico del sistema operativo. – sharptooth
¿Cuánta memoria asignó su proceso? ¿Qué restricciones tiene tu proceso? ¿Es de 32 bits? –