Как top вычисляет цифры памяти в Linux?

2696
jarnoan

Я немного запутался в том, как цифры памяти складываются сверху.

Если я правильно понял, то количество «действительно» используется память общее - бесплатно - буфера - кэшируется . В приведенном ниже примере это будет 14370248k - 75736k - 178892k - 10459552k = 3656068k, что составляет 25% от общего объема памяти (3656068/14370248).

Опять же, если я правильно понял, числа, показанные в столбцах RES и % MEM, показывают объем физической памяти, который процесс "реально" использует. Сумма значений RES только процессов httpd составляет 7254 млн. Или 7428096 тыс. (7254 * 1024), что составляет 52% от общего объема памяти (7428096/14370248). Сумма значений % MEM процессов httpd достаточно близка к 53%.

Почему в итоговой части указано, что используется только 25% используемой памяти, а одни только процессы httpd утверждают, что используют более 50% памяти? Что мне здесь не хватает?

top - 15:37:00 up 117 days, 18:27, 6 users, load average: 4.82, 4.44, 3.60 Tasks: 433 total, 4 running, 429 sleeping, 0 stopped, 0 zombie Cpu(s): 59.6%us, 6.5%sy, 0.0%ni, 33.0%id, 0.1%wa, 0.0%hi, 0.8%si, 0.0%st Mem: 14370248k total, 14294512k used, 75736k free, 178892k buffers Swap: 8388600k total, 116k used, 8388484k free, 10459552k cached  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3566 mysql 21 0 554m 60m 4576 S 74.6 0.4 11422:52 mysqld 23305 apache 15 0 327m 27m 3792 S 3.2 0.2 0:01.30 httpd 23474 apache 15 0 327m 27m 3800 S 3.2 0.2 0:01.09 httpd ... 
5

1 ответ на вопрос

2
Peter Eisentraut

Процессы httpd, вероятно, разделяют некоторую память, потому что они разветвлены друг от друга. Из-за механизма копирования при записи все они утверждают, что память является их собственной виртуальной памятью, хотя она существует только один раз в физической памяти.

В общем, вывод памяти в Linux содержит различные типы болтов. Я бы не пытался понять это слишком много. Полезно посмотреть, ведет ли процесс себя не так, как должен; но цифры не обязательно складываются.