Скидання кешу в Linux
Скидання кешу в Linux
Субота, 28 березня 2015 00:00
Поки в Інтернеті ведуться війни на тему "чи треба взагалі скидати кеш в Linux", я собі відповів на це питання. Так, іноді це потрібно. Припустимо, є сервер, який працює під CentOS та виконує монотонні нескладні завдання щодня. Але раз на тиждень він одночасно виконує дуже ресурсомістку задачу, яка сильно навантажує процесор і "з'їдає" всю пам'ять (під кеш). Звичайно, грамотні люди знають, що таке буфер, і як він працює. Але сенс зберігати в пам'яті файлові дані, які в кращому разі будуть потрібні через тиждень, а швидше за все - просто застаріють вже через пару днів!?
Моя пропозиція: доповнювати скрипти рідкісних ресурсомістких завдань командами очищення кешу.
До ресурсомістких завдань, що забивають кеш зайвою інформацією, я відношу такі завдання, за умови їх рідкісного виконання:
- Архівація (у моєму випадку tar здатний "з'їсти" всю вільну пам'ять)
- Оновлення через yum
- Аналіз статистики веб-сервера та побудова звітів
Як відомо, у версії ядра 2.6.16 (і свіжіших) з'явився механізм, який змушує ядро скинути сторінковий кеш та/або кеші inode+dentry. Після виконання команди вивільняється значний обсяг ОЗУ. Ходять легенди, що з давніх-давен нещасні адміністратори писали спеціальні скрипти, які намагалися виділити тонни пам'яті з єдиною метою: щоб вигнати кеш з пам'яті :)
Для використання /proc/sys/vm/drop_caches достатньо передати число.
Щоб скинути сторінковий кеш:
Щоб скинути кеші dentry та inodes:
Щоб скинути сторінки кеш, dentry та inodes:
Тепер виконаємолабораторнуроботу.
На веб-сервері, що працює під CentOS 6.6, було помічено, що у звичайному режимі достатньо 1 Гб ОЗУ для виконання всіх завдань, причому цей ліміт ніколи не перевищується, а файл підкачування постійно тримається на величині 0 Kb. Однак, після виконання важких завдань пам'ять цілком забивається, і найприкріше! сервер починає свопити на звичайних простих завданнях, поступово забиваючи файл підкачки і постійно напружуючи жорсткий диск. Проведемо моніторинг пам'яті до (червоним) та після (синім) виконання скидання.

Виграш очевидний. Якщо раніше було вільно87 Мб, то стало вільно1456 Мб навіть за умови, що як параметр скидання ми передавали одиницю.
Тепер сервер може пропрацювати ще тиждень, зовсім не напружуючи жорсткий диск.
Це є не-деструктивною функцією і буде тільки вільно думати, що є повністю невикористані. Повні об'єкти повинні бути включені в систему, щоб отримати необхідний диск і не буде безкоштовно. Якщо ви збираєтеся "синк" в першу чергу виходити з диска, ці попадання операцій буде йти до вільної більше пам'яті.