fredag 8 februari 2008

Detektivjakt med Ruby on Rails och Apache


Varning: Det är hög nördfaktor i det här inlägget.

I morse fick jag de första rapporterna via SMS om att en av våra servrar inte mådde speciellt bra. Den gick upp och ned som en jojo, och trots att hela servern bara körde en enda webbapplikation gick den på knäna. Jag kom knappt in via SSH, utan fick göra en tvångsomstart via serverhallens fina webbgränssnitt. En minut senare fungerade allt som vanligt. Jag andades ut.

Tre minuter senare kommer ett nytt SMS. Servern är död igen. En ny omstart, och nu loggar jag in och kollar vad som händer. Minnesförbrukningen verkar gå i taket. Det fenomenala webbgränssnittet kommer till sin rätt igen och efter ytterligare en minut har jag fördubblat minnet i burken. Nu rullar allt på som vanligt. Förutom att trafiken är vansinnigt hög (se grafen ovan).

Två timmar senare dör skiten igen. Nu börjar jag bli lite småtrött eftersom kunden som ligger på servern hör av sig och undrar vad som står på. Det verkar som om de inte riktigt pratar med varandra på det där företaget heller eftersom fyra olika medarbetare hör av sig med jämna intervall för att kolla vad som händer. Jag testar en ny omstart, men det dröjer inte länge innan servern mår sämre än en nyinsparkad gymnasieelev.

Så jag kollar fel-loggen för Mongrel-servrarna. De är ovanligt pigga och fixar över 100 förfrågningar per sekund utan problem. Det verkar vara Apache som går ner först. Servern är konfigurerad så att Apache agerar proxy och portionerar ut trafiken till mina Mongrel-servrar. Jag blir inte klokare av att titta i felloggen för Apache, jag får bara uppmaning om att öka MaxKeepAliveRequests, men inte heller detta hjälper. Kunderna fortsätter ringa, nu ilsknare än någonsin. Plötsligt slår det mig att jag bad en av mina inhyrda indier att öka antalet mongrel-servrar för någon dag sedan. Kan det ha med saken att göra?

Som tur är kör vi med subversion, så jag kan se exakt vilka ändringar som har gjorts. Indiern råkade ta bort kommentarstecknet som stod framför raden ProxyRequests On. Plötsligt hade webbservern blivit en vidöppen proxy som alla kunde använda för att besöka andra sidor. I morse hade detta upptäckts av någon driftig människa som dessutom hade vänligheten att lägga upp vårt IP-nummer på listan över öppna proxyservrar. Det var inte så konstigt att sidan drog trafik.

Raden plockade jag bort omedelbums, och sedan dess har servern rullat fint i några timmar. Vi får fortfarande ett par proxy-frågor i sekunden men nu tar det tvärstopp när de kommer fram till servern. Tänk så enkelt det kan vara när man bara hittar felet.

Inga kommentarer:

Skicka en kommentar