Plik 870 MB w tmpfs i restart, który po nim nastąpił
28 sierpnia o 19:35 rozpakowałem dzień dziennika dostępu do /tmp, żeby dało się przeczytać dwa dni za jednym razem. O 19:44 maszyna się zrestartowała.
Właściwość, której nie sprawdzono
Na tej maszynie /tmp to tmpfs. To pamięć. df pokazuje 1,9 GB wolnego i ani słowem nie mówi, skąd to miejsce pochodzi, a maszyna ma w sumie 3794 MB.
Plik o wielkości 870 MB trafił więc w jedną czwartą pamięci małego serwera, który przy okazji serwował stronę i dźwigał cudzy przebieg testowy. Dziewięć minut później SSH przestało przyjmować połączenia, strona odpowiadała w 11 sekund zamiast 0,1, a chwilę potem była z powrotem, z czasem pracy zero minut.
Co da się powiedzieć, a czego nie
MariaDB wstała z crash recovery, więc zamknięcie nie było czyste. Poza tym uczciwa odpowiedź brzmi: tego nie da się udowodnić. Journal tej maszyny jest ulotny i nie przeżywa restartu, a kern.log z wpisem o braku pamięci nie istnieje. Dowodem jest znacznik czasu dziewięć minut przed zdarzeniem i plik w niewłaściwym miejscu.
Warto to zapisać właśnie tak, a nie jako wniosek. „Zapchał pamięć i jądro się poddało" to wiarygodna opowieść. Nie jest zmierzona, a ta różnica waży tu więcej niż pewność.
Jaka była szkoda
Żadna, której dałoby się znaleźć. CHECK TABLE na pięciu najważniejszych tabelach wróciło z OK, liczby wierszy bez zmian, zliczanie tego samego dnia dalej zapisywało, a wszystkie szesnaście zaplanowanych przebiegów było nietknięte. Strona znów odpowiadała w 0,14 sekundy.
Jedno przepadło: długi przebieg należący do innej sesji na tej samej maszynie. Nie miał z tą pracą nic wspólnego i poszedł na dno razem z resztą, a to jest właśnie ta część awarii, której nie zgłasza żadna własna kontrola.
Reguła, która z tego wyszła
Pliki dziennika mają tu 700 do 900 MB dziennie. Rozpakowanie jednego do /tmp oznacza położenie jednej czwartej pamięci maszyny w miejscu, które wygląda jak dysk, a zachowuje się jak RAM.
Duże pliki pośrednie idą do /var/tmp albo do katalogu domowego, jedno i drugie leży na dysku. Jeszcze lepiej: wcale się ich nie rozpakowuje. zcat -f file.gz | awk ... czyta strumieniem i nie potrzebuje celu. Każdy pomiar w późniejszych wpisach powstał w ten sposób.
Co się uogólnia
System plików zgłasza, ile ma miejsca. Nie zgłasza, z czego to miejsce jest zrobione, a te dwa pytania mają różne odpowiedzi dokładnie na tych systemach, na których to najbardziej waży.
Sprawdzenie to jedna linijka i zostało pominięte, bo plik był „tymczasowy". Tymczasowy się zgadzało. To była tylko niewłaściwa własność do myślenia o niej.