Чем больше я читаю, тем больше запутываюсь Я хочу сформировать список процессов и их потребление памяти (физическое + виртуальное).
Пока что это то, что я сделал:
- Я беру VSZ каждого процесса и умножаю его на 1024 (в байтах)
- Я беру RSS и делаю то же самое
- Тогда я вычитаю VSZ с RSS, поскольку VSZ уже содержит RSS
Вместо того, чтобы показывать все потоки, я суммирую процессы с одним и тем же пользователем + комм.
Это дает мне список, похожий на этот:
MEM VMEM PMEM User Command
16.27 GB 15.47 GB 811.73 MB apache httpd
2.37 GB 2.19 GB 186.12 MB mysql mysqld
372.99 MB 320.18 MB 52.81 MB memcached memcached
985.78 MB 954.60 MB 31.18 MB root httpd
MEM столбец в основном VMEM (VSZ - RSS) + PMEM (RSS).
Но я был немного озадачен этим .. Apache порождает ~ 10 потоков, и этот список говорит, что он потребляет 16 ГБ памяти. Жесткий диск составляет всего ~ 14 ГБ, а у нас 8 ГБ оперативной памяти.
И тогда я подумал: «Несмотря на то, что VSZ различен для каждого потока, возможно, он отбирает абсолютное значение для каждого потока». Поэтому, если я взял столбец VSZ и вычел RSS каждого потока, я получил это:
MEM VMEM PMEM User Command
1.38 GB 680.54 MB 737.68 MB apache httpd
2.55 GB 2.37 GB 186.09 MB mysql mysqld
425.80 MB 372.99 MB 52.81 MB memcached memcached
1016.96 MB 985.78 MB 31.18 MB root httpd
И я думаю: «Ну, это должно быть правдой!».
Вопрос в том, прав ли я? Я просто не могу поверить, что apache потребляет 16 ГБ памяти.
Я делаю что-то ужасное не так здесь?
Обновлено: я получаю те же значения при использовании top
. Это также машина CentOS.