Использование памяти процессом Linux

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

ps aux о процессах дай мне следующую информацию

blah1   18634  0.0  0.4 131852 31188 pts/15   Ssl+ 00:27   0:00 myPgm
blah2   18859  0.0  0.3 131292 30656 pts/32   Sl+  01:17   0:00 myPgm
blah3   19813  0.0  0.4 131960 31220 pts/44   Ssl+ 01:17   0:00 myPgm
blah4   20228  0.1  0.3 131728 31036 pts/54   Ssl+ 01:41   0:00 myPgm
blah5   20238  0.0  0.3 131688 30932 pts/20   Sl+  Nov15   0:00 myPgm
blah6   21181  0.0  0.3 131304 30632 pts/25   Sl+  Nov15   0:00 myPgm
blah7   21278  0.0  0.3 131824 31096 pts/61   Ssl+ Nov15   0:00 myPgm
blah8   21821  0.0  0.3 131444 30808 pts/7    Sl+  00:54   0:00 myPgm

Таким образом, VSZ всегда составляет около 130 МБ, а RSS - около 30 МБ. pmap для процессов имеет следующие данные: для 18634:

mapped: 131852K    writeable/private: 59692K    shared: 28K

Для 21181:

mapped: 131304K    writeable/private: 59144K    shared: 28K

и аналогичные значения для других процессов. Хост имеет 7 ГБ физической памяти. Время от времени у меня на хосте работает от 700 до 800 экземпляров одного и того же процесса. Я пытаюсь понять, сколько памяти каждый процесс потребляет в реальности. Если в качестве фактического использования памяти в каждом процессе я выберу "доступный для записи / приватный", то 58 МБ для каждого процесса приведут к 45 ГБ (для 800 процессов), что безумие. Может кто-нибудь объяснить, если я делаю это неправильно, и как должен быть сделан расчет?

Также бесплатно -k дает

             total       used       free     shared    buffers     cached
Mem:       7782580    4802104    2980476          0     380192    1931708
-/+ buffers/cache:    2490204    5292376
Swap:      1048568         32    1048536

Похоже, что не так много подкачки, теперь откуда берется память для каждого процесса? Благодарю.

1 ответ

Вы не знаете, что такое VSZ. Вы думаете, что знаете, но факты говорят об обратном, поэтому вам нужно выяснить, что это такое.

VZS - это размер виртуальной памяти, и это вся память, необходимая для процесса, включая общую память. Вот почему вы не можете просто суммировать (VSZ) и ожидать, что получите меньше физического объема памяти + своп.

Отображаемая память в pmap, вероятно, соответствует VSZ, а доступная для записи / приватная, я думаю, это память, которая используется некоторыми процессами, где каждый из них имеет доступ на запись в эту память (например, выделенный их родительским процессом или около того).

Чтобы понять это, вам нужно понять, как работает распределение памяти и доступ к ней, что сложно. http://emilics.com/blog/article/mconsumption.html эта статья, кажется, объясняет это в некоторых деталях (но я прочитал это только поверхностно)

Другие вопросы по тегам