Назад | Перейти на главную страницу

Процесс утверждает, что использует много памяти, но слово «свободна» означает, что память все еще свободна

Я видел обратное, но это сбивает с толку.

Короче говоря, у меня есть процесс, в котором% MEM утверждает, что использует 74% памяти при использовании «ps» и «top». Однако «бесплатно» показывает, что я использую только 32% доступной памяти.

Вот этот вывод «сверху»:

top - 18:25:49 up 203 days, 14 min,  1 user,  load average: 3.48, 3.75, 3.79
Tasks: 349 total,   1 running, 347 sleeping,   1 stopped,   0 zombie
Cpu(s): 10.3%us,  4.7%sy,  0.0%ni, 75.1%id,  6.5%wa,  0.0%hi,  3.4%si,0.0%st
Mem:   189.054G total,  188.280G used,  793.473M free,  253.570M buffers
Swap: 4095.996M total,  967.234M used, 3128.762M free,  126.370G cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
14416 root      20   0  165g 139g  81g S 250.3 74.0 764266:39 asd
30660 root      20   0 15164 1328  836 R  2.0  0.0   0:00.01 top

Вы заметите, что процесс asd утверждает, что использует 74% (139 г) доступной оперативной памяти. Если вы посмотрите на общий объем используемой памяти - кэшированную память (188–126), то похоже, что вся система использует только 62 ГБ. Очевидно, что это намного меньше, чем утверждает один процесс, который asd использует.

«бесплатно» так же сбивает с толку. Он показывает 61G бесплатно:

# free -g
         total       used       free     shared    buffers     cached
Mem:           189        188          0         81          0        126
-/+ buffers/cache:         61        127
Swap:            3          0          3

'ps' похоже согласуется со списком процессов в 'top':

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     14416  261 74.0 173381464 146791980 ? Ssl  Jan25 764310:00 /usr/bin/asd

Я понимаю, почему «бесплатная» означает, что доступно меньше памяти, чем «верхняя», но я не понимаю, как процесс может утверждать, что использует больше оперативной памяти, чем общая система сообщает как «использованная».

ОБНОВЛЕНИЕ: я не думаю, что это то же самое, что и сообщения, которые вы указали мне Тиму. Похоже, они ссылаются на противоположную проблему, когда люди либо неправильно читают «бесплатный» вывод, либо не принимают во внимание кеш и буферы. Следовательно, они не могут найти процессы, которые используют память, которую, по их мнению, «бесплатная» использует. В моем случае у меня есть процесс, который утверждает, что использует много памяти, но «свободный», кажется, думает, что память все еще доступна.

Думаю, есть простое объяснение, разница между free и top с участием ps. Если вы проверите top вывод, вы увидите 126.370G cached память, это воспоминание free показать как доступную память. Как это считать. У тебя есть 189.054G общая память, ваш процесс использует 139G резидентная память, поэтому вы должны иметь 50G память для буферов и т. д. Если вы проверите разделяемую память вашего процесса, вы увидите, что она 81G общая память, она может считаться в вашей резидентной памяти. Итак, если ваш процесс работает с файлами, они могут быть расположены в буферах и совместно использоваться с вашим процессом (это только предположение, я не знаю, как подсчитывается общая память с файлами). Так что это только одна причина иметь столько свободного места.