Я видел обратное, но это сбивает с толку.
Короче говоря, у меня есть процесс, в котором% 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
общая память, она может считаться в вашей резидентной памяти. Итак, если ваш процесс работает с файлами, они могут быть расположены в буферах и совместно использоваться с вашим процессом (это только предположение, я не знаю, как подсчитывается общая память с файлами). Так что это только одна причина иметь столько свободного места.