Egy 870 MB-os fájl a tmpfs-ben és az utána következő újraindulás
Augusztus 28-án 19:35-kor kicsomagoltam egy napnyi hozzáférési naplót a /tmp könyvtárba, hogy két napot egy menetben olvashassak végig. 19:44-kor a gép újraindult.
A tulajdonság, amelyet senki sem ellenőrzött
Ezen a gépen a /tmp egy tmpfs. Vagyis memória. A df 1,9 GB szabad helyet mutat, és egyáltalán nem árulja el, honnan származik ez a hely – a gépnek pedig összesen 3 794 MB memóriája van.
Egy 870 MB-os fájl így egy kis szerver memóriájának negyedét foglalta el, miközben a szerver egy weboldalt is kiszolgált, és valaki más tesztfeladatát is futtatta. Kilenc perccel később az SSH nem fogadott több kapcsolatot, a weboldal 0,1 helyett 11 másodperc alatt válaszolt, nem sokkal később pedig újra elérhető volt, nulla perces üzemidővel.
Mit lehet állítani, és mit nem
A MariaDB összeomlás utáni helyreállítással indult el, vagyis a leállás nem volt szabályos. Ezen túl az őszinte válasz az, hogy ez nem bizonyítható: ezen a gépen a napló nem tartós, így nem éli túl az újraindítást, és nincs olyan kern.log sem, amelyben memóriahiányra utaló sor állna. A bizonyíték egy időbélyeg kilenc perccel az esemény előtt, és egy fájl a rossz helyen.
Ezt érdemes úgy leírni, ahogy van, nem pedig következtetésként. „Megtelt a memória, és a kernel feladta” – ez hihető történet. Csak éppen nem mért, és itt a különbség többet számít, mint amennyit a bizonyosság érne.
Mekkora volt a kár
Kimutatható kár nem volt. A CHECK TABLE az öt legfontosabb táblán OK eredményt adott, a sorok száma nem változott, a számlálás még aznap is rögzített, és mind a tizenhat ütemezett feladat sértetlen maradt. A weboldal ismét 0,14 másodperc alatt válaszolt.
Egy dolog elveszett: egy hosszan futó feladat, amely ugyanazon a gépen egy másik munkamenethez tartozott. Semmi köze nem volt ehhez a munkához, mégis mindennel együtt leállt – egy kiesésnek ez az a része, amelyről egyetlen helyi ellenőrzés sem ad jelzést.
A szabály, amely ebből született
A naplófájlok itt napi 700–900 MB-osak. Ha egyet kicsomagolunk a /tmp könyvtárba, azzal a gép memóriájának negyedét olyan helyre tesszük, amely lemeznek látszik, de RAM-ként viselkedik.
A nagy köztes fájlok helye a /var/tmp vagy egy saját könyvtár, mindkettő a lemezen van. Még jobb, ha egyáltalán nem csomagoljuk ki őket: a zcat -f file.gz | awk ... folyamként olvas, és nincs szüksége célhelyre. Az ezt követő bejegyzések minden mérése így készült.
Ami általánosítható
Egy fájlrendszer megmondja, mennyi helye van. Azt nem mondja meg, miből van ez a hely, és a két kérdésre éppen azokon a rendszereken adódik eltérő válasz, ahol ez a legtöbbet számít.
Az ellenőrzés egyetlen sor, és azért maradt el, mert a fájl „ideiglenes” volt. Ideiglenes valóban volt. Csak nem erre a tulajdonságra kellett volna gondolni.