Использование памяти процессом 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 эта статья, кажется, объясняет это в некоторых деталях (но я прочитал это только поверхностно)