
Я знаю об этом вопросе.https://stackoverflow.com/questions/41224738/how-to-calculate-system-memory-usage-from-proc-meminfo-like-htop Ответ на вопрос об использовании памяти кажется устаревшим, а этот вопрос — более сложным.
htop определенно теперь не рассчитывает общую память через MemTotal - MemFree
больше. Тамhttps://access.redhat.com/solutions/406773Я нашел решение, которое могло бы подойти. Согласно ему, это будет рассчитано через, MemTotal - MemFree - Buffers - Cached - Slab
но это приведет к слишком низкому использованию памяти по сравнению с htop.
Использование памяти в htop, похоже, довольно взаимосвязано, как free -m
показано в ячейкеMem: used
Но если вы создадите RAM-диск, все кардинально изменится:
mkdir mnt
sudo mount -t tmpfs none mnt
cd mnt
sudo dd if=/dev/urandom of=test bs=32M status=progress
Выше будет создан RAM-диск размером 50% от установленной памяти и заполнен этот RAM-диск.
htop теперь показывает немного больше половины используемой физической памяти RAM, в тестовом случае 3,82 ГБ из 7,44 ГБ. Однако free -m
показывает все еще только 104 МБ использовано по сравнению со 102 МБ до создания и заполнения RAM-диска. Так что 104 МБ использовано определенно неверно, потому что половина физической системной памяти больше не может быть доступна, так как она используется RAM-диском.
Размер /proc/meminfo
RAM-диска, по-видимому, включен в Cached
, поэтому при расчете используемой кэшированной памяти вычитать ее не следует.
Так почему же free -m сообщает о таком неправильном значении свободной памяти? По умолчанию в дистрибутивах вроде Debian или Ubuntu есть различные tmpfs, что означает, что free -m дает неправильное представление о свободной памяти.
Расчет памяти htop кажется вполне разумным. Так как же можно вычислить значение htop из /proc/meminfo
?