Файл на 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 ... читает потоком и не требует цели. Все измерения в последующих записях сделаны так.
Что здесь обобщается
Файловая система сообщает, сколько у неё места. Она не сообщает, из чего это место сделано, и у этих двух вопросов разные ответы ровно на тех системах, где это важнее всего.
Проверка — одна строка, и её пропустили, потому что файл был «временный». Временный — правда. Просто это было не то свойство, о котором стоило думать.