У меня есть сетевое хранилище Thecus N8900, файловый сервер на базе 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 дисков в конфигурации raid6 (плюс горячий резерв), никаких проблем с дисками (согласно тестам S.M.A.R.T.).
Возникает вопрос: что заставило команду drop_caches работать так долго?
Удаление кешей не должно занимать много времени. Вы уверены, что он действительно не возвращается из этой команды echo в течение нескольких часов?
Имеет смысл, что машина работает медленнее после удаления кешей, поскольку файлы, которые она раньше могла читать из кеша, теперь должны быть прочитаны с диска.
Сама команда должна завершиться мгновенно. Последствия, то есть все, что нужно снова кэшировать, могут занять много времени. В этом нет смысла: если вы можете удалить его полностью, это будет хорошей идеей.
Возможно, вы смотрите не на ту команду: выполняет ли она также sync
перед echo 3 > /proc/sys/vm/drop_caches
, такое в sync; echo 3 > /proc/sys/vm/drop_caches
? Поскольку sync
операция, которая сбрасывает все записи на диск, может занять некоторое время. Кроме того, хотя также sync
есть проблемы с производительностью, это может иметь некоторый смысл, в случае внезапного сбоя питания данные уже были записаны на диск, поэтому вы собираетесь быть в безопасности.