Файл на 870 МБ у tmpfs і перезавантаження, що настало
28 серпня о 19:35 я розпакував день журналу доступу до /tmp, щоб прочитати два дні за один прохід. О 19:44 машина перезапустилася.
Властивість, яку не перевірили
На цій машині /tmp — це tmpfs. Це пам’ять. df показує 1,9 ГБ вільного і жодним словом не каже, звідки це місце береться, а всього машина має 3794 МБ.
Отже, файл на 870 МБ потрапив у чверть пам’яті маленького сервера, який заразом віддавав сайт і тягнув чужий тестовий прогін. За дев’ять хвилин SSH перестав приймати з’єднання, сторінка відповідала за 11 секунд замість 0,1, а невдовзі була знову на місці — з часом роботи нуль хвилин.
Що можна сказати, а чого ні
MariaDB піднялася з відновленням після збою, отже завершення не було чистим. Далі чесна відповідь така: довести це не можна. Журнал цієї машини летючий і перезапуску не переживає, і немає жодного kern.log із рядком про брак пам’яті. Доказ — позначка часу за дев’ять хвилин до події і файл не в тому місці.
Так це й варто записати, а не як висновок. «Забив пам’ять, і ядро здалося» — правдоподібна історія. Виміряною вона не є, і тут ця різниця важить більше за певність.
Яка була шкода
Жодної, яку вдалося б знайти. CHECK TABLE на п’яти найважливіших таблицях повернув OK, числа рядків не змінилися, лічба того самого дня далі писала, і всі шістнадцять призначених завдань були цілі. Сторінка знову відповідала за 0,14 секунди.
Одне пропало: довгий прогін, що належав іншому сеансові на тій самій машині. До цієї роботи він стосунку не мав і потонув разом з усім іншим — а це саме та частина збою, про яку не повідомляє жодна місцева перевірка.
Правило, яке з цього вийшло
Журнали тут по 700-900 МБ на день. Розпакувати один у /tmp означає покласти чверть пам’яті машини туди, що виглядає як диск і поводиться як ОЗП.
Великі проміжні файли йдуть до /var/tmp або до домашнього каталогу — і те й те лежить на диску. Ще краще: їх узагалі не розпаковують. zcat -f file.gz | awk ... читає потоком і не потребує цілі. Усі вимірювання в наступних дописах зроблено так.
Що тут узагальнюється
Файлова система повідомляє, скільки в неї місця. Вона не повідомляє, з чого це місце зроблене, і ці два питання мають різні відповіді саме на тих системах, де це важить найбільше.
Перевірка — один рядок, і її проминули, бо файл був «тимчасовий». Тимчасовий — правда. Просто це була не та властивість, про яку варто було думати.