Почему использование памяти в "top" не складывается?
Я заметил, что иногда, когда я запускаю top, использование памяти каждым процессом в таблице процессов, по-видимому, не дает общего результата.
Например, в приведенном ниже дампе top говорит, что я использую 16 Гб памяти. Однако таблица процессов показывает только два процесса, использующих чуть более 520 Мб. Как я могу узнать, что потребляет другие 15,5 Гб? (Я использую CentOS.)
$ top вверх - 12:16:34 до 45 дней, 2:28, 3 пользователя, средняя загрузка: 0,24, 0,65, 0,71 Задачи: всего 274, 1 работает, 273 спит, 0 остановлен, 0 зомби ЦП: 2,3% США, 0,2%sy, 0,0%ni, 97,5%id, 0,0%wa, 0,0%hi, 0,0%si, 0,0%st Память: всего 16432032k, использовано 16340144k, 91888k свободно, 21736k буферов Обмен: всего 18481144 КБ, использовано 1112 КБ, 18480032 КБ свободно, 15624488 Кэшировано PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ КОМАНДА 18159 jsmith 15 0 260 м 31 м 4560 S 16,6 0,2 53: 35,64 питон 4795 26 15 0 260 м 6608 4220 S 2,0 0,0 0: 00,06 почтмейстер 1 корень 15 0 10344 680 568 S 0,0 0,0 0: 39,36 init 2 корень RT -5 0 0 0 S 0,0 0,0 0: 00,53 миграция / 0 3 корень 34 19 0 0 0 S 0,0 0,0 0: 00,62 ksoftirqd/0 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /0 5 root RT -5 0 0 0 S 0.0 0.0 0:02.09 миграция / 1 6 корень 34 19 0 0 0 S 0,0 0,0 0: 01,32 ksoftirqd/1 7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер / 1 8 корень RT -5 0 0 0 S 0,0 0,0 0: 00,99 миграция / 2 9 корень 34 19 0 0 0 S 0,0 0,0 0: 01,74 ksoftirqd/2 10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /2 11 root RT -5 0 0 0 S 0.0 0.0 0:02.16 миграция / 3 12 корень 34 19 0 0 0 S 0,0 0,0 0: 01,30 ksoftirqd/3 13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /3 14 root RT -5 0 0 0 S 0,0 0,0 0: 01,94 миграция / 4 15 корень 34 19 0 0 0 S 0,0 0,0 0: 01,78 ksoftirqd/4 16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /4 17 root RT -5 0 0 0 S 0.0 0.0 0:01.92 миграция / 5 18 корень 34 19 0 0 0 S 0,0 0,0 0: 01,30 ksoftirqd/5 19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /5 20 root RT -5 0 0 0 S 0.0 0.0 0:02.06 миграция / 6 21 корень 34 19 0 0 0 S 0,0 0,0 0: 01,83 ksoftirqd/6 22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /6 23 root RT -5 0 0 0 S 0.0 0.0 0:02.31 миграция /7 24 корень 34 19 0 0 0 S 0,0 0,0 0: 01,50 ksoftirqd/7 25 root RT -5 0 0 0 S 0.0 0.0 0:00.00 сторожевой таймер /7 26 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,42 события /0 27 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,28 события / 1 28 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,37 события / 2 29 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,21 события / 3 30 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,38 события / 4 31 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,27 события / 5 32 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,52 события / 6 33 root 10 -5 0 0 0 S 0,0 0,0 0: 00,64 события /7 34 корень 10 -5 0 0 0 S 0,0 0,0 0: 00,00 хелпер
2 ответа
Из строки, посвященной использованию памяти, вверху:
Mem: 16432032k total, 16340144k used, 91888k free, 21736k buffers
Swap: 18481144k total, 1112k used, 18480032k free, 15624488k cached
Давайте проигнорируем обмен. Общая память равна сумме использованной и свободной памяти. С другой стороны, используется сумма "реально используемых приложениями" и кешированных данных и буферов. Итак, в вашем случае это выглядит так:
- Mem = 16432032k = 16340144k + 91888k;
- "Действительно используется приложениями" = Используется - (кэшировано + буферы) = 16340144k - (15624488k + 21736k) = 693920k.
Остальные 15,5 ГБ кэшируются. Это улучшает производительность. Однако в тот самый момент, когда приложению требуется часть кешируемой памяти, оно сразу же отдается ему. Вы заметите это, если запустите какое-нибудь приложение и монитор, требующие памяти top
,
Этот список не похож на 274 total
процессы для меня. Вверху обычно отображается только то, что умещается на вашем терминале / экране. использование ps aux
вместо этого и сложить rss
значение (или любой другой столбец резидентной памяти, отображаемый вашей версией).
Вы также не хотите добавлять размер виртуальной памяти, кажется, вы действительно заинтересованы в резиденте (RES
) столбец.