Чому Linux очищає кеш пам'яті, коли він майже заповнений?


14

Ось як виглядає графік пам'яті на VPS під управлінням CentOS з 512 Мб оперативної пам’яті та nginx / php-fpm / mysqld, що обслуговує (в основному статичний) вміст на пару тисяч відвідувачів на день.

Щотижневий графік пам'яті

(це дні на осі x)

Як бачите, в області кешу та буфера це досить стрибки. Кеш пам'яті очищається через нерегулярні проміжки часу (виключаючи відповідальне завдання Cron). Зазвичай, але не завжди, його очищають у тому місці, де він може зростати не більше. Іноді він очищається майже повністю, в інший час лише на півдорозі.

Я намагаюся зрозуміти логіку цих чисток. Я б очікував, що дані файлу будуть кешовані набагато довше і не бачу інших програм, що використовують більше пам'яті, ніж зазвичай, коли кеш пам'яті очищено.

Це нормальна поведінка, чи я щось пропускаю?

ОНОВЛЕННЯ: Можливо, оновлення пам'яті стабілізувало графік. Ще спостерігаються невеликі краплі, але ніде не такі значні, як це було до оновлення.

Після оновлення пам'яті


Це контейнер OpenVZ / Virtuozzo чи справжній VM, такий як XEN чи KVM?
Йорданм

1
Не можу пояснити, що вони є, але у мене є VPS, який відображає таку ж поведінку. dl.dropbox.com/u/1578899/memory-week.png
EightBitTony

@jordanm Це віртуальна машина на базі Xen.
почервоніння

@EightBitTony Дякуємо за обмін. Ваше виглядає трохи "природніше", але я чітко бачу подібний (але, можливо, більш передбачуваний) зразок крапель у кеш-пам'яті.
почервоніння

Мені було цікаво, чи Munin 2 графікував / збирав дані досить по-різному, щоб призвести до деяких відмінностей (більш плавний графік на вашому), але навіть мій показує падіння в середині циклу, а не щодня. Це дивно, точно.
EightBitTony

Відповіді:


3

Може бути багато речей. Можливо, одна з програм, яку ви запускаєте, періодично і коротко використовує багато оперативної пам’яті. Якщо це справді тижні на осі x, вам слід зробити вибірку із значно більшою роздільною здатністю (наприклад, раз на хвилину чи навіть секунду), щоб отримати більше інформації про те, що відбувається, що спричиняє падіння кешу. psі topвихід (включаючи середнє навантаження) протягом цього часу також був би корисним.


Так, я думаю, ми могли б теоретизувати, що дуже короткий, раптовий сплеск використання пам'яті, який відбувається через хвилину або близько того, і не помічений Муніном, може скинути кеш, що, звичайно, помічено, оскільки воно зберігається.
EightBitTony

Заголовок трохи заплутаний, оскільки він фактично показує один тиждень даних, тож це дні на x-as, а не тижні. Що стосується частоти опитування: Мунін отримує дані кожні 5 хвилин, і я не думаю, що частоту можна змінити. Я запускаю лише nginx, mysql, php-fpm та munin-вузол. Чи може це мати щось спільне з кешем mysql, можливо?
почервоніння

У мене вгорі (відсортовано за використанням пам'яті) записувати його вихід у файл кожні 5 секунд, потім я аналізував цей файл і не знаходив жодних процесів, що демонстрували б якесь незвичне поведінку в точці, коли кешована пам'ять раптово впала. Якщо процес не може використати стільки пам’яті і все-таки уникнути цього вікна 5 секунд, я не впевнений, що це може бути причиною. Але якщо жодних процесів не працює amok, що це може бути?
почервоніння

Цей потік трохи несвіжий, але швидке спостереження щодо методології: наскільки процес сприяє кешу системної пам’яті, не буде (легко) відображено вгорі , оскільки дуже активний процес може дуже швидко накопичувати речі в кеш, не маючи власних виділена пам'ять значно збільшується. Наприклад, читаючи дуже великий файл невеликими шматочками для передачі - хоча процес може ніколи не використовувати більше декількох МБ, що виділяються , ці кілька МБ постійно змінюватимуться та накопичуватимуть посилання в кеш-пам'яті. Тож, на що слід звернути увагу у верхньому виході, було б раптове накопичення процесорного часу.
золотинок

Можливо, вас також зацікавить це: cognitivedissonance.ca/cogware/plog
goldilocks

2

Однією з можливих причин може бути зростаючий файл, як, наприклад, журнал, який або видаляється, стискається або надсилається в інше місце, коли він досягає заданого розміру.

У будь-якому випадку його кешований розмір, можливо, цілий, якщо у вашій ОС немає тиску пам'яті, буде вивільнено з кешу, як тільки вихідний файл буде видалений.


Цікава ідея, але найактивніші файли журналів рідко перевищують розмір файлу в 25 Мб, перш ніж вони повертаються, а використання кешу / буфера має тенденцію до зниження приблизно на 200 МБ.
почервоніння
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.