Почему использование памяти в "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) столбец.