Как получить реальное использование кэшированной / предварительно выбранной памяти в Linux?
Я сталкиваюсь с такими же зависаниями, как этот пост: https://askubuntu.com/questions/41778/computer-freezing-on-almost-full-ram-possibly-disk-cache-problem
Подводя итог: похоже на то, что предварительная загрузка / кэширование / подкачка ОЗУ занимает слишком много времени, поэтому я постоянно боюсь, что диск делает безумные показания диска до такой степени, что ПК зависает и вынуждает меня перезагружаться.
Итак, я углубился в эту проблему и получил эту полезную команду:
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
Которые действительно сбрасывают предварительно извлеченную память... до некоторой степени, так как остается еще некоторая часть, которая кажется "статической" частью.
Я заметил, что добавление этого к использованию оперативной памяти без предварительной загрузки совпадает с объемом используемой оперативной памяти.
Тем не менее, это не говорит мне, сколько "статической" предварительно загруженной оперативной памяти я использую. И зная это, я дам достаточно времени на разгрузку выгружаемого кэша Linux, чтобы выполнить свою работу, когда я собираюсь достичь общего количества оперативной памяти.
Например: кэш-память была ~1000 МБ, а затем получила ~700 МБ после выполнения команды "echo 3 | sudo tee /proc/sys/vm/drop_caches"; ~700 МБ - это "статическая" часть предварительно загруженной оперативной памяти, которую мне нужно знать.
Итак, мой вопрос: как вы получаете "реальную" "статическую" часть использования предварительно загруженной / кэшированной / выгружаемой памяти?
PS:
С другой стороны, есть ли способ вывести только общую оперативную память, используемую каждым процессом - даже корневыми - (например, значение mem в htop)?
1 ответ
Вы можете найти оперативную память, используемую каждым процессом для всех пользователей, с помощью следующей команды:
ps -eo pid,command,rss,user
Это дает по порядку идентификатор процесса, команду, используемую память и пользователя процесса.
Если вы хотите, чтобы общий объем оперативной памяти использовался всеми процессами, будет работать следующая команда
free
Если вы хотите, чтобы сумма памяти использовалась каждым процессом, используйте следующий код:
ps -eo rss | awk '{sum+=$1} END {print sum}'
Это даст вам значение, которое представляет собой общий объем памяти, используемой всеми процессами.