Súbor s 870 MB v tmpfs a následný reštart
V tomto článku
Dňa 28. augusta o 19:35 som rozbalil jeden deň prístupového protokolu do /tmp na prečítanie dvoch dní pri jednom prechode. O 19:44 sa stroj reštartoval.
Vlastnosť, ktorá sa neoverila
Na tomto stroji /tmp je tmpfs. Je to pamäť. df ukazuje 1,9 GB voľných a nehovorí vôbec nič o pôvode tohto priestoru, pričom stroj má celkom 3 794 MB.
Súbor s 870 MB teda zabral štvrtinu pamäte malého servera, ktorý zároveň poskytoval web a vykonával cudziu testovaciu úlohu. O deväť minút SSH prestalo prijímať spojenia, web odpovedal za 11 sekúnd namiesto 0,1 a krátko potom bol späť s časom prevádzky nula minút.
Čo sa dá a nedá povedať
MariaDB sa spustila s obnovou po páde, čo znamená, že vypnutie nebolo čisté. Okrem toho je poctivou odpoveďou, že sa to nedá dokázať: žurnál na tomto stroji je nestály, neprežije teda reštart a neexistuje kern.log s riadkom o nedostatku pamäte. Dôkazom je časová značka deväť minút pred udalosťou a súbor na nesprávnom mieste.
Oplatí sa to zapísať v tejto podobe, nie ako záver. «Zaplnil pamäť a jadro to vzdalo» je vierohodný príbeh. Nie je zmeraný a rozdiel tu znamená viac, než by znamenala istota.
Aké boli škody
Žiadne, ktoré by sa dali nájsť. CHECK TABLE na piatich najdôležitejších tabuľkách vrátilo OK, počty riadkov sa nezmenili, počítanie v ten deň ďalej zaznamenávalo a všetkých šestnásť plánovaných úloh zostalo neporušených. Web znovu odpovedal za 0,14 sekundy.
Jedna vec sa stratila: dlho bežiaca úloha patriaca inej relácii na tom istom stroji. S touto prácou vôbec nesúvisela a padla spolu so všetkým ostatným, čo je tá časť výpadku, ktorú žiadna miestna kontrola nehlási.
Pravidlo, ktoré z toho vyplynulo
Tunajšie protokoly majú 700 až 900 MB denne. Rozbalenie jedného do /tmp znamená dať štvrtinu pamäte stroja niekam, čo vyzerá ako disk a správa sa ako RAM.
Veľké priebežné súbory patria do /var/tmp alebo domovského adresára, oboje je na disku. Ešte lepšie je vôbec ich nerozbaľovať: zcat -f file.gz | awk ... číta prúdom a nepotrebuje cieľ. Každé meranie v nasledujúcich príspevkoch sa vykonalo takto.
Čo sa dá zovšeobecniť
Súborový systém hlási, koľko miesta má. Nehlási, z čoho je miesto vytvorené, a tieto dve otázky majú rôzne odpovede práve na systémoch, kde na tom záleží najviac.
Kontrola má jeden riadok a vynechala sa, pretože súbor bol «dočasný». Dočasný naozaj bol. Bola to nesprávna vlastnosť, o ktorej sa uvažovalo.