Tvijo wiki
Каталог

Теми

Не запускайте завдання: скидання навантаження для планових пакетних робіт

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

🎯 Для Тим, хто запускає cron-завдання, бекфіли або пакети агентів поруч із продакшен-сервісом

📚 Ви дізнаєтеся
  • Чому зайнятий хост має відмовлятися від нової пакетної роботи
  • Невелика обгортка, яка скидає навантаження, ставить блокування і знижує пріоритет
  • Як читати журнал відмов як сигнал про ємність

💥 Що сталося

8 липня 2026 року на вже зайнятому хості стартував важкий тестовий прогін. Навантаження сягнуло приблизно восьмисот відсотків на восьми ядрах, і вся машина, разом із продакшен-сервісами, зависла. Із самим завданням усе було гаразд. Гаразд не було з тим, що його запустили саме тоді.

Другий інцидент, 14 вересня 2026 року, мав іншу причину з тією самою формою: диск заповнився до дев'яноста семи відсотків, бо резервні копії не ротувалися, і кожне завдання, яке писало в це вікно, робило ситуацію гіршою.

🛑 Правило

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

Якщо обидві перевірки пройдено, обгортка запускає завдання під ексклюзивним блокуванням, щоб дві копії не могли перекритися, зі зниженим пріоритетом CPU і з пріоритетом диска idle. Ще одне правило обгортки: якщо сам інструмент перевірки диска зламаний, перевірку диска пропускають. Зламаний інструмент не повинен зупиняти всі завдання на хості.

🕵️ Вартовий, який нікого не вбиває

Окремий вартовий запускається кожні п'ять хвилин і записує свій стан у файл. Він виводить м'який і жорсткий пороги навантаження з кількості ядер. Після жорсткої межі він знижує пріоритет відомих пакетних процесів і ніколи нічого не вбиває. 3 листопада 2026, 21:53 UTC він показав 8 ядер, м'який поріг 4,8 і жорсткий поріг 6,8, а остання дія — "ok".

Ми також перерозподілили частки CPU: планові завдання разом можуть використовувати щонайбільше шість із восьми ядер і мають низьку вагу, тоді як продакшен-сервіси мають вищу вагу.

📊 Журнал відмов

Обгортка додає рядок щоразу, коли відмовляє завданню. Від 2026-07-30 у журналі 8 415 рядків по 67 різних завданнях, і чотири найчастіші завдання дають 4 938 із них. Найзавантаженіший день — 2026-10-15 з 1 155 відмовами в старті.

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

🛠️ Практика: обгорніть свої важкі завдання

  1. Перелічіть планові завдання і позначте важкі: тести, бекфіли, оптимізатори, експорти.
  2. Напишіть обгортку, яка перевіряє навантаження і вільне місце на диску та тихо завершується з рядком у журналі, коли щось поза межами.
  3. У тій самій обгортці додайте ексклюзивне блокування, нижчий пріоритет CPU і пріоритет диска idle.
  4. Поставте кожне важке завдання за обгортку. Робіть це по файлах, а не редагуючи спільну таблицю розкладу.
  5. Додайте вартового, який фіксує навантаження і знижує пріоритет пакетних процесів, але ніколи їх не вбиває.
  6. Переглядайте журнал відмов щотижня. Переносьте або розносьте завдання, яким відмовляють найчастіше.

✅ Перевірте себе

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

🚧 Коли це не працює

  • Завдання, які мусять виконатися. Завдання, де важливий дедлайн, як-от резервна копія, не повинно відкидатися вічно. Додайте максимальну кількість пропусків.
  • Стійке перевантаження. Якщо хост завжди за межею, не запускається нічого. Це означає, що вам потрібно більше ємності, а не нижчий ліміт.
  • Пікові сервіси. Короткий пік може відкинути завдання, яке встигло б уміститися. Використовуйте коротке ковзне середнє.
  • Пріоритет — це не ізоляція. Завдання з низьким пріоритетом усе одно може займати пам'ять і диск. Ліміти на групу сильніші.
  • Тихі пропуски. Якщо ніхто не читає журнал, ви можете втратити завдання на тижні. Налаштуйте оповіщення про завдання, яке не завершилося за добу.

📊 Докази

Що ми виміряли Рядки та завдання в журналі відмов, файл стану вартового і пороги в обгортці
Коли 3 листопада 2026, 21:53 UTC
Артефакт Журнал відмов і файл стану вартового в нашому приватному розгортанні; скрипт обгортки та його проєктна нотатка
Обмеження Журнал рахує відмови в старті, а не шкоду, яку вони відвернули. Обидва інциденти взяті з наших нотаток про інциденти

➡️ Далі

Сплануйте, що робити, коли щось таки зламається, у Пораднику з інцидентів AI для малої команди, і прочитайте Відновлення після невдалого, застряглого або невизначеного прогону.

Джерела

Зв’язки опублікованих статей. Виберіть вузол, щоб відкрити статтю біля заголовка.

100%
→ Пов'язані статті← Посилаються сюди⋯ Та сама тема
Зв’язки статей · клавіатура / текст

💬 Коментарі

Коментарі публічні та модеруються. Не публікуйте персональні дані.
  • Коментарів ще немає. Будьте першим!

Наступні кроки

AI agents and MCP explained

Векторна база — це мапа, а не джерело: що ми з'ясували про пошук

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

AI agents and MCP explained

Коли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння

Іноді виклик моделі перевищує час очікування, і ви не знаєте, чи провайдер списав кошти. Ніколи не записуйте це як нуль. Позначте витрату як непевну, зупиніть нові платні виклики й доручте названій людині звірити її з випискою провайдера. Виняток — відмови, що сталися до генерації.

AI agents and MCP explained

Розбиття великого завдання для дешевої моделі: урок про 24 000 байтів

Дешева модель добре дає раду з однією невеликою чітко окресленою роботою, але погано з великим нагромадженням. Ми обмежуємо завдання 24 000 байтами і відмовляємо більшим ще до виклику моделі. Діліть на одиниці — один файл або одна країна на завдання — і перевіряйте розмір до початку.

AI agents and MCP explained

Навички, інструменти MCP і правила: три способи дати агенту можливості

Агенти отримують можливості по-різному. Правило обмежує те, що вони роблять, навичка підказує, як виконати роботу, а інструмент MCP дозволяє викликати функцію. Кожен із трьох має власний ризик, тож фіксуйте всі три в реєстрі й перевіряйте тестом, що нічого не існує поза ним.