Деякі системи Linux стають дуже повільними, коли Redis завантажує великий набір даних


14

Я отримав звіт від користувача Redis, і я не впевнений, що відповісти, оскільки я не є експертом у галузі Linux та його планувальника, проте нам (як проекту Redis) потрібно розібратися в таких питаннях, особливо в майбутньому, як і з класом Redis, у нас буде багато екземплярів Redis, які працюють одночасно в одному полі. Тому я прошу тут допомогти.

Проблема:

  • Ядро: "Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP Чт 15 квітня 08:05:38 UTC 2010 x86_64 GNU / Linux"
  • багато вільної оперативної пам’яті, жодних інших процесів, що роблять значні введення-виведення.
  • Важливо , працює на великому екземплярі EC2, а не на справжньому сервері. Я ніколи не бачив подібного в не віртуалізованому середовищі. Екземпляр EC2 був: "Надмірно велика пам’ять 17,1 ГБ пам'яті, 6,5 ECU (2 віртуальних ядра з 3,25 EC2 обчислювальними одиницями кожен), 420 ГБ локального сховища, 64-бітна платформа" .

В основному, коли ви перезавантажите великий екземпляр Redis, система стане настільки повільною, що ви більше не можете вводити оболонку. Коли Redis завантажує екземпляр, він використовує 100% ЦП (він завантажує дані як можна швидше) і читає файл dump.rdb послідовно. Введення / виведення не особливо високе, оскільки завантаження пов'язане з процесором, не пов'язане з входом / виводом.

Чому на землі коробка з двома процесорами та великою кількістю оперативної пам’яті, що не змінюються на диску, в основному повинна перестати працювати з цим робочим навантаженням?

У мене складається враження, що це має багато спільного з тим, що це екземпляр EC2, так що пов'язаний з використовуваною технологією віртуалізації, тому що я постійно завантажую набори даних по 24 ГБ в мою скриньку без проблем (навіть з іншими екземплярами Redis біг з високим навантаженням).

Дякуємо за будь-яку підказку!

Сальваторе

Редагувати : додавання відгуків, отриманих від Twitter:

від @ezmobius: @antirez перше, що потрібно зробити, - спробувати це з / mnt або локальних ефемерних дисків, щоб перевірити, чи є його EBS в'ялістю, 2-е - переконатися, що це не "перше покарання на запис" (google it), і якщо це потім вам потрібно спочатку увімкнути 0 на весь диск.

від @dvirsky: @antirez Я запускаю багато екземплярів redis саме на таких вузлах ec2. Я помітив деяке уповільнення bgsave, але не це явище.

Відповіді:


4

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

Не знаєте, чи це у вас проблема чи ні, але це варто перевірити.


Дякую Кевін, це дуже цікаво, і я про це зовсім не знав.
антирез

2

У мене був такий самий випадок на екземплярі EC2. Це, мабуть, не пов’язано з Redis - він виникає, коли відбувається високий IO (наприклад, коли redis завантажує дамп-файл).

Подивіться цю тему на форумах Amazon: https://forums.aws.amazon.com/thread.jspa?messageID=215406

Я експериментував з різними ядрами / зображеннями, і тепер він працює нормально (на старому 2.6.21 ядрі).


Спасибі mhdk, я гадаю також, що це пов'язано з віртуалізацією + планувальник Linux. Навіть при повільному диску I / OI не видно жодної причини, через яку інші процеси заблокуються, якщо вони не використовують диск і не мають розмінених сторінок. Спробуйте різні ядра / конфігурації планувальника, ймовірно, варто спробувати.
антирез

2

Ви повинні перевірити викрадення процесора ( xx.x%stправоруч від лінійки процесора), що topпоказує, коли ви відчуваєте 100% навантаження та заморожену оболонку. Викрасти - це кількість ваших фактичних циклів процесора, викрадених у вашої машини гіпервізором і відданих іншій машині. Викрадення процесора актуально лише у віртуалізованих умовах. У мене була така проблема з мікроінстанціями, яка в основному зробила мій екземпляр непридатним протягом приблизно 1 години або близько того (поки моя задача не закінчилася), якщо я виконував інтенсивні завдання процесора.

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

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