Назад | Перейти на главную страницу

В новой 64-битной системе Linux есть обычные процессы (ps, grep и т. Д.), Занимающие слишком много памяти VIRT

Мы только что перешли с 32-битной машины на 64-битную. У нас быстро закончилась память, несмотря на то, что в новых ящиках вдвое больше оперативной памяти, чем в старых.

Выполнение простой команды ps проиллюстрирует проблему.

Новая машина:

132 prod-Charlotte1-node1 ~/public_html/rearch/cgi-bin> ps aux | grep ps
root       293  0.0  0.0      0     0 ?        S<   May09   0:00 [kpsmoused]
xamine    2267  1.0  0.0  63728   928 pts/3    R+   16:50   0:00 ps aux
xamine    2268  0.0  0.0  61172   752 pts/3    S+   16:50   0:00 grep ps

Старая машина:

132 prod-116431-node1:/home/xamine> ps aux | grep ps
xamine   23191  0.0  0.0  2332  768 pts/6    R+   15:41   0:00 ps aux
xamine   23192  0.0  0.0  3668  692 pts/6    S+   15:41   0:00 grep ps

Обратите внимание, что процесс ps использует 63M памяти VIRT против 2 на старой машине.

Новая машина:

Старая машина:

Номер виртуальной памяти вводит в заблуждение. Он включает размер всех разделяемых библиотек, с которыми связана программа. Эти библиотеки в силу того, что они являются общими, загружаются в системную память только один раз для всех программ, которые их используют.

Лучшим показателем использования памяти для вашего процесса в этом случае является размер резидентного набора (RSS), который является столбцом после виртуальной памяти. Это объем физической памяти, который использует ваше приложение. Предполагая, что вы не собираетесь выполнять свопинг, что для такой программы, как ps, маловероятно, это хороший показатель того, сколько «фактической» памяти приложение использует в данном случае. По этому показателю разница в значительной степени незначительна.

Причина большой разницы в виртуальном размере может быть по любому количеству причин. Частично это, вероятно, связано с большим размером типов, особенно указателей, в 64-битной системе по сравнению с 32-битной. Другая причина может быть просто в увеличении размера библиотек или, возможно, в связи с другим количеством библиотек.

Может быть, если вы дадите более репрезентативную выборку того, что на самом деле работает на этих машинах, это будет более полезно для определения того, почему у вас не хватает памяти.

Зависит от того, как вы считаете использованную память. Если вы ищете "бесплатно", не забудьте не использовать кэширование и используемые буферы.

Linux пытается кэшировать как можно больше дисковой активности, чтобы последующий доступ к этим файлам был намного быстрее, чем необходимость повторного обращения к диску. Если требуется память, кэш-память будет освобождена для удовлетворения нового запроса.

Например:

# free
         total       used       free     shared    buffers     cached
Mem:       3973040    3944864      28176          0     433448    3123468
-/+ buffers/cache:     387948    3585092
Swap:      2040244      72080    1968164

В этом случае, хотя система сообщает, что почти вся используемая память 4G используется, более тщательное изучение показывает, что 3G ее «кэшируется», что означает, что на самом деле доступно много памяти. Вторая строка free вывод представляет этот расчет - без учета буферов и кеша доступно 3,5 ГБ памяти.