У нас проблемы с выделением памяти при работе программы под Linux. Мы используем утилиту top, чтобы попытаться определить причину проблемы. Одна вещь, которую мы заметили, состоит в том, что один процесс имеет слишком высокое значение для разделяемой памяти (столбец SHR вверху).

Чтение страницы MAN для top заставляет меня поверить, что столбец SHR представляет объем памяти для межпроцессного взаимодействия через разделяемую память. Это правильно?

Если это так, то имеет ли смысл для ЛЮБОГО процесса выделять 50 - 60 мегабайт разделяемой памяти (X11 выделяет только 11 МБ, что кажется разумным исходя из того, что он должен делать).

Спасибо...

2 ответа2

3

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

Из ядра Linux: Управление памятью:

Общая виртуальная память

Хотя виртуальная память позволяет процессам иметь отдельные (виртуальные) адресные пространства, бывают случаи, когда вам нужны процессы для совместного использования памяти. Например, в системе может быть несколько процессов, выполняющих командную оболочку bash. Вместо того, чтобы иметь несколько копий bash, по одной в каждом виртуальном адресном пространстве процессов, лучше иметь только одну копию в физической памяти, и все процессы, выполняющие bash, совместно используют ее. Динамические библиотеки являются еще одним распространенным примером выполнения кода, совместно используемого несколькими процессами.

Совместно используемая память также может использоваться в качестве механизма межпроцессного взаимодействия (IPC), когда два или более процессов обмениваются информацией через общую для них память. Linux поддерживает IPC с общей памятью Unix TM System V.

Что верхняя страница руководства говорит об этом столбце:

   t: SHR  --  Shared Mem size (kb)
      The amount of shared memory used by a task.  It simply reflects mem‐
      ory that could be potentially shared with other processes.
1

имеет ли смысл для ЛЮБОГО процесса выделять 50 - 60 мегабайт разделяемой памяти

Да.

Например, в руководствах по настройке Oracle рекомендованы размеры общей памяти в гигабайтах.

Тем не менее, если процесс "кошка", это, вероятно, не имеет особого смысла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .