Мы только что перешли с 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 ГБ памяти.