Как получить реальное использование кэшированной / предварительно выбранной памяти в Linux?

547
X.LINK

Я сталкиваюсь с такими же зависаниями, как этот пост: https://askubuntu.com/questions/41778/computer-freezing-on-almost-full-ram-possbly-disk-cache-problem

Подводя итог: похоже на то, что предварительная загрузка / кэширование / подкачка ОЗУ занимает слишком много времени, поэтому я постоянно боюсь, что диск делает безумные показания диска до такой степени, что компьютер зависает и вынуждает меня перезагружаться.


Итак, я углубился в эту проблему и получил эту полезную команду:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 

Которые сбрасывают предварительно загруженную оперативную память ... до некоторой степени, так как остается еще некоторая часть, которая кажется "статической" частью.

Я заметил, что добавление этого к использованию prefetchless RAM соответствует волчку используемой оперативной памяти.

Тем не менее, это не говорит мне, сколько «статической» предварительно загруженной оперативной памяти я использую. И зная это, я дам достаточно времени на разгрузку выгружаемого кэша Linux, чтобы выполнить свою работу, когда я собираюсь достичь общего количества оперативной памяти.

Например: кэш-память была ~ 1000 МБ, а затем выполнила ~ 700 МБ после выполнения команды "echo 3 | sudo tee / proc / sys / vm / drop_caches"; ~ 700 МБ - это «статическая» часть предварительно загруженной оперативной памяти, которую мне нужно знать.

Итак, мой вопрос: как вы получаете "реальную" "статическую" часть использования предварительно загруженной / кэшированной / выгружаемой памяти?


PS:

С другой стороны, есть ли способ вывести только общую оперативную память, используемую каждым процессом - даже корневым - (например, значение mem в htop )?

1

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

2
Nasir Riley

Вы можете найти оперативную память, используемую каждым процессом для всех пользователей, с помощью следующей команды:

ps -eo pid,command,rss,user 

Это дает по порядку идентификатор процесса, команду, используемую память и пользователя процесса.

Если вы хотите, чтобы общий объем оперативной памяти использовался всеми процессами, будет работать следующая команда

free 

Если вы хотите, чтобы сумма памяти использовалась каждым процессом, используйте следующий код:

ps -eo rss | awk ' END ' 

Это даст вам значение, которое представляет собой общий объем памяти, используемой всеми процессами.

Дох, извини, если я не понял. Под «всей оперативной памятью» я понимал общую оперативную память, используемую каждым процессом. X.LINK 6 лет назад 0
Смотри мое редактирование выше Nasir Riley 6 лет назад 1
Он показал общую сумму, но есть и другие результаты. Я мог бы сделать это, но мне нужен один-единственный вывод, чтобы я мог выполнять некоторые повторяющиеся вычисления, не используя слишком много ресурсов. Что более важно, так это то, насколько свободно можно получить это значение внутренне, но я, к сожалению, не знаю, как кодировать. Поэтому должен быть другой способ получить такие цифры. X.LINK 6 лет назад 0
Я добавил еще одно редактирование. Nasir Riley 6 лет назад 1
Будь я проклят, заменив «% mem» на «rss», вы получите правильный путь для всего ответа. Итогом RSS является реальное использование памяти без «динамической» части предварительно загруженной ОЗУ, а также ни «использованного» верха, ни значений ерунды ОЗУ htop! Спасибо ! X.LINK 6 лет назад 0
Нет проблем. Я обновил свой ответ с помощью rss, заменив% mem, так как он более соответствует вашему вопросу. Nasir Riley 6 лет назад 0