Skoková sekunda jako velký IT problém, hlavně na Linuxu

Jedním z největších IT problémů jsou překvapivě zdánlivé maličkosti, jako jsou drobné anomálie v počítání času. Vzpomínáte například na rok 2000? Nebo třeba na relativně nedávný výpadek Windows Azure od Microsoftu, který nezvládl datum 29. února univerzálního času a měl výpadek ve většině svých datacenter? Zdánlivě banální školácké chyby, ale tento víkend postihl stejný problém většinu linuxových systémů a na Internetu na chvíli způsobil menší chaos.

Jediná skoková sekunda jako opravdový problém? Absurdní, ale takový již náš svět občas bývá. Vteřina opravdu způsobila problém, který zasáhl linuxové servery a způsobil výpadky například velkých internetových služeb jako LinkedIn, FourSquare a webů jako Reddit, Mozilla, Gawker a mnohých dalších, protože Linux patří na Internetu k nejoblíbenějším platformám. Problémů ale bylo více, například zpoždění stovek letů australské letecké spoločnosti Qantas.

Problém 61 vteřiny

Problémy se v systému mohly projevit dvojím způsobem, prostým zamrznutím serveru, nebo rychlým vytížením CPÚ na 100 % a odmítnutím dalšího poskytování služby.

Kde se chyba vzala? První problém se skokovou vteřinou se v jádru Linuxu objevil po vydání verze 2.6.26 a obsahuje jej až verze 3.3. Chybu způsobuje samotná implementace přidání skokové vteřiny a projevuje se na systémech, které využívají pro synchronizaci času NTP (Network Time Protocol), což je protokol pro synchronizaci vnitřních hodin počítačů po síti s proměnným zpožděním. Aplikaci skokové vteřiny realizuje v Linuxu jádro systému, to automaticky na konci dne podle UTC času vrátí jednu vteřinu zpět. Když klient konfiguroval po informaci od NTP serveru v jádru příznak skokové vteřiny, nastal kolaps.

Chyba byla objevena v březnu a přestože se pro i objevil prakticky okamžitě patch, většina tvůrců linuxových distribucí nepovažovala za důležité opravu aplikovat.

Ale je zde ještě onen druhý problém, ten se začal objevovat (na vteřinu přesně :-)) po čase aplikování skokové vteřiny, tedy od půlnoci UTC času (2:00 našeho středoevropského času) a právě ten se pravděpodobně postaral o zhroucení řady internetových služeb. S problémem si totiž nevěděly rady různé aplikace napsané v Javě, MySQL a dalších prostředích a začaly neúměrně vytěžovat procesory až do 100% výkonu, po kterém následovalo přetížení, nedostupnost služeb a pády. Tento druhý problém je zatím dost tajemný, protože jeho přesná příčina se zatím nalézá pouze v rovině dohadů.

Proč vůbec přidáváme skokovou vteřinu

Samotné přidávání skokové vteřiny poprvé nastalo 31. prosince 2008. Smyslem tohoto časového „rituálu“ je kompenzace zpomalujícího se otáčení planety Země. Skokové sekundy se přidávají jako kompenzace rozdílu mezi skutečnou fází dne a času, který odměřuje člověk.

Děje se tak proto, že jedno otočení Země kolem své osy totiž trvá o něco déle, než je pověstných 24 hodin, které vycházejí ze sčítání fyzikálně přesně definovaných časových úseků – jedné vteřiny.

Řešení?

Jedním ze způsobů, jak se s problémem vypořádat lépe, než jako to dělá běžné NTP, je aplikace podobného řešení, jako zvolil pro letošek Google. Ten namísto přidání rovnou celé skokové vteřiny NTP servery nastavil tak, aby čas postupně v průběhu celého dne nenápadně zpomalovaly o milisekundy.

Exit mobile version