Сбой приложения, когда свободного места мало, но доступной памяти много

#linux #memory #sisense

#linux #память #sisense

Вопрос:

Я создаю модели данных с помощью приложения под названием Sisense в Linux. В последнее время процесс завершается с ошибкой нехватки памяти. Запуск free -h я вижу, что сбой происходит, когда свободной памяти мало, но до того, как она фактически достигнет нуля, и даже при том, что доступной памяти все еще достаточно.

Вот исключение:

 Failed to build custom table: Rule_pre; BE#521691 SQL error: SafeModeException:
Safe-Mode triggered due to memory pressure. Pod physical memory: 5.31 GB available, 2.87 GB 
used, 8.19 GB total. Server physical memory: 4.86 GB available, 28.67 GB used, 
33.54 GB total. Application total virtual memory: 2.54 GB. The server exceeded 85% capacity 
(28.67/33.54). Possible ways to reduce memory pressure: increase server memory, adjust data 
modelling (M2M, un-indexed string fields, etc.), reduce number of simultaneous queries
 

И вот результат free -h , на котором вы можете увидеть уменьшение объема памяти в центральном столбце «свободно». Как только свободная память опустилась ниже 235 МБ, я увидел вышеупомянутое исключение.

Вот использование памяти для использования Linux quot;бесплатноquot;

На справочной странице free util содержатся следующие определения для свободной и доступной памяти:

свободная неиспользуемая память (без памяти и без подкачки в /proc/meminfo)

доступная оценка того, сколько памяти доступно для запуска новых приложений, без подкачки. В отличие от данных, предоставляемых полями cache или free, это поле учитывает кэш страниц, а также то, что не все восстанавливаемые блоки памяти будут освобождены из-за используемых элементов (MemAvailable в /proc/ meminfo, доступно на ядрах 3.14, эмулируется на ядрах 2.6.27 , в остальном то же самое, что и free

Как я читал в Интернете, кажется, что проблема нехватки свободной памяти является случайной. Что это не проблема. Но сбой совпадает с нехваткой свободной памяти. Если я понимаю справочную страницу, доступная память предназначена для запуска новых приложений. Тогда я предполагаю, что доступная память недоступна для существующего приложения, которое выходит из строя, и что свободная память действительно имеет значение. Но было бы полезно получить подтверждение от других или дополнительное объяснение. Мне также было бы любопытно узнать мнения о том, может ли это представлять собой утечку памяти или я должен просто как-то выделить больше памяти, возможно, на уровне Linux.

Комментарии:

1. Обратите внимание, что сообщение об ошибке предполагает, что ошибка возникает до полного исчерпания памяти: «Безопасный режим срабатывает из-за нехватки памяти… Сервер превысил 85% емкости (28.67 / 33.54).»

2. @JohnKugelman Означает ли это, что вывод «free -h» не имеет значения? Или вы просто отмечаете, как в этом сообщении должен быть выделен порог памяти приложения в 85%? Я пытаюсь понять, связана ли и как свободная память с исключением. Если порог 85% не существует, будет ли ошибка просто возникать при 100% и будет ли это отображаться в столбце free как нулевое свободное, несмотря на наличие большого количества доступной памяти? Я нахожу это очень запутанным.

3. На самом деле я вижу, что вы отредактировали сообщение и предлагаете объяснение этого. Понял.

4. Какие версии у вашего sisense? Вы это видели? В частности, проверьте страницу на BE#521691

5. да, я видел это. У меня есть версия 8.2.6.4, которая должна включать исправление. Но ошибка все равно происходит. У меня открыт случай с sisense, и я не ожидал здесь конкретного решения. Мой реальный вопрос заключается в различии и влиянии свободной памяти на доступную память, как показано утилитой Linux «free».

Ответ №1:

Я думаю, что у меня здесь достаточно понимания. Свободная память никогда не опускается ниже 200 МБ независимо от того, завершается сборка неудачно или успешно. Похоже, это не показатель проблемы. Успешная сборка также покажет снижение объема свободной памяти до 200 МБ.