получение ошибки std::bad_alloc ; Как перекрестно проверить, что ОС действительно не хватает памяти

У меня есть программа на C++/Linux, которая через 2-3 секунды запуска начинает выдавать ошибку std::bad allocна 32 ГБ ОЗУ ( и перезапускается вызывающей оболочкой). Что меня действительно волнует, так это решить эту проблему, но я хотел бы идти шаг за шагом и укреплять свою уверенность в своем понимании проблемы.

Похоже, что система не может выделить память для новогозапроса (это может случиться, когда в ОС закончится память). Во время работы программы на другом терминале я запускаю команду sarс наименьшим возможным интервалом (1 секунда), но вижу, что kbcachedзанимает ~24 ГБ памяти. Почему ОС не может освободить кэширование и сделать эту память доступной для запроса new? Либо 1 секунда слишком много времени (по сравнению с тем, как быстро работают программы), либо я делаю что-то не так.

По сути, я хотел бы перекрестно проверить и указать, что ОС действительно не хватает памяти и, следовательно, не может выделить память, а затем взять вещи с этого момента. Как это сделать?

В идеале я хотел бы иметь системную статистику прямо в тот момент, когда происходит сбой выделения памяти, например объем кэширования, общий объем использованной памяти и т. д.

8
задан Eitan T 18 June 2012 в 07:43
поделиться