26

Я заметил, что иногда, когда я запускаю top, использование памяти каждым процессом в таблице процессов, по-видимому, не дает общего результата.

Например, в приведенном ниже дампе top говорит, что я использую 16 Гб памяти. Однако таблица процессов показывает только два процесса, использующих чуть более 520 Мб. Как я могу узнать, что потребляет другие 15,5 Гб? (Я использую CentOS.)

$ top

top - 12:16:34 up 45 days,  2:28,  3 users,  load average: 0.24, 0.65, 0.71
Tasks: 274 total,   1 running, 273 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3%us,  0.2%sy,  0.0%ni, 97.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16432032k total, 16340144k used,    91888k free,    21736k buffers
Swap: 18481144k total,     1112k used, 18480032k free, 15624488k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18159 jsmith    15   0  260m  31m 4560 S 16.6  0.2  53:35.64 python
 4795 26        15   0  260m 6608 4220 S  2.0  0.0   0:00.06 postmaster
    1 root      15   0 10344  680  568 S  0.0  0.0   0:39.36 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.53 migration/0
    3 root      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 watchdog/0
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:02.09 migration/1
    6 root      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 watchdog/1
    8 root      RT  -5     0    0    0 S  0.0  0.0   0:00.99 migration/2
    9 root      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 watchdog/2
   11 root      RT  -5     0    0    0 S  0.0  0.0   0:02.16 migration/3
   12 root      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 watchdog/3
   14 root      RT  -5     0    0    0 S  0.0  0.0   0:01.94 migration/4
   15 root      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 watchdog/4
   17 root      RT  -5     0    0    0 S  0.0  0.0   0:01.92 migration/5
   18 root      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 watchdog/5
   20 root      RT  -5     0    0    0 S  0.0  0.0   0:02.06 migration/6
   21 root      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 watchdog/6
   23 root      RT  -5     0    0    0 S  0.0  0.0   0:02.31 migration/7
   24 root      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 watchdog/7
   26 root      10  -5     0    0    0 S  0.0  0.0   0:00.42 events/0
   27 root      10  -5     0    0    0 S  0.0  0.0   0:00.28 events/1
   28 root      10  -5     0    0    0 S  0.0  0.0   0:00.37 events/2
   29 root      10  -5     0    0    0 S  0.0  0.0   0:00.21 events/3
   30 root      10  -5     0    0    0 S  0.0  0.0   0:00.38 events/4
   31 root      10  -5     0    0    0 S  0.0  0.0   0:00.27 events/5
   32 root      10  -5     0    0    0 S  0.0  0.0   0:00.52 events/6
   33 root      10  -5     0    0    0 S  0.0  0.0   0:00.64 events/7
   34 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khelper

2 ответа2

24

Из строк, связанных с использованием памяти вверху:

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 монитора.

1

Этот список не похож на 274 total процесса для меня. Вверху обычно отображается только то, что умещается на вашем терминале / экране. Вместо этого используйте ps aux и добавьте значение rss (или любой другой столбец резидентной памяти, отображаемый в вашей версии).

Вы также не хотите добавлять размер виртуальной памяти, кажется, вы действительно заинтересованы в столбце резидент (RES).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .