Linux: echo 3 › /proc/sys/vm/drop_caches занимает несколько часов

У меня есть Thecus N8900 NAS, который представляет собой файловый сервер на базе Linux, предоставляющий файлы через NFS шести клиентам. По какой-то причине, которую служба поддержки Thecus еще не объяснила, она запускает скрипт, который проверяет /proc/meminfo каждые 60 секунд, и если дисковый кеш превышает 50% доступной оперативной памяти, они делают «echo 3 > /proc/sys/vm/drop_caches». ", чтобы сбросить кеш.

Если оставить в стороне вопрос о том, имеет ли это смысл, фактическая команда «echo 3 > /proc/sys/vm/drop_caches» может занять несколько часов, что мне кажется слишком долгим.

Большая проблема заключается в том, что когда это происходит, нагрузка на машину резко возрастает, как и использование диска, что приводит к обходу всего трафика NFS до тех пор, пока команда не завершится, после чего все снова начинает реагировать.

Сам NAS имеет 16 гиг ОЗУ, 7 дисков в конфигурации рейд6 (плюс горячий резерв), проблем с дисками вообще нет (по тестам S.M.A.R.T.).

Итак, вопрос: что может заставить команду drop_caches выполняться так долго?


person rmm    schedule 10.12.2013    source источник
comment
Не по теме для SO; относится к сбою сервера   -  person Jim Garrison    schedule 11.12.2013
comment
Предполагается, что drop_caches влияет только на чистые кеши. Если есть много грязных кешей, он должен записать их обратно в резервное хранилище. Пожалуйста, спросите об этом при сбое сервера   -  person jim mcnamara    schedule 11.12.2013
comment
Спасибо. Я понимаю, что он делает, но никак только 8-12 гигов кеша, даже если он весь грязный, должен 5+ часов сбрасываться. Вопрос размещен на сервере, хотя спасибо за указатель.   -  person rmm    schedule 11.12.2013
comment
@jimmcnamara эта операция ничего не записывает на диск, а только удаляет данные, уже синхронизированные с диском (т. Е. Кеши). Однако перед этим может быть команда sync, которая делает то, что вы говорите (например, сбрасывает грязный кеш на диск)   -  person pqnet    schedule 06.08.2014
comment
@pqnet — очистка кешей записывается на физический диск. Кэши живут в памяти. Либо на контроллере привода, либо в системной памяти. Вы можете не соглашаться, если хотите. Но сначала взгляните на главу 5 Раго и Стивенса «Расширенное программирование в среде UNIX».   -  person jim mcnamara    schedule 07.08.2014
comment
@jimmcnamara к сожалению, документация для /proc/sys/vm/drop_caches говорит об обратном: Это неразрушающая операция и не будет освобождать грязные объекты..   -  person pqnet    schedule 07.08.2014


Ответы (1)


Сама команда должна завершиться мгновенно. Последствия, т.е. все нужно снова кэшировать, могут занять много времени. Это не имеет смысла: если вы можете удалить его полностью, это будет хорошей идеей. (Также это не по теме в StackOverflow)

Изменить: выполняет ли он также sync перед echo 3 > /proc/sys/vm/drop_caches, например, в sync; echo 3 > /proc/sys/vm/drop_caches? Потому что операция sync, которая сбрасывает все записи на диск, может занять некоторое время. Кроме того, хотя у sync есть проблемы с производительностью, в этом может быть некоторый смысл, в случае внезапного сбоя питания данные уже были записаны на диск, поэтому вы будете в безопасности.

person pqnet    schedule 06.08.2014