![]() |
Av någon anledning har Apache helt plötsligt fått fnatt och startar massa processer (kör FreeBSD 6/ Apache 1.3 / PHP 5 - Har testat att uppgradera Apache / PHP)
Har testat att ändra i httpd.conf: MaxClients till 15 som max (default är 150) men ändå lyckas den starta runt 200 st... Så jag hade behövt tips på vad som kan vara fel, inget nytt är gjort på servern, eventuellt kan det vara nått php script eller nått, men hur felsöker man det smidigt? |
Är det ens rimligt att den skulle starta 200 om den fick göra det? Hsh så låter det där helskumt. Har du verifierat att apache använder den config-filen? Kontrollerat att du inte sätter MaxClients fler gånger (längre ner i filen eller i fil som inkluderas)?
|
Citat:
Jo den använder filen, då den läser in annat som bara ligger i den filen så som vhostar m.m. och det står bara med 1 gång totalt i alla filer (inkl includes)... Kollade lite nogrannare nu och den har igång 151 eller 152 processer av apache... så det stämmer trots allt, dock är den seg som sirap sen någon vecka tillbaka när den har igång så många processer, tar sådär 1 min att svara på anrop m.m. skall försöka lista ut vad de e för processer mer än httpd som drar igång för om jag stänger av apache så går antalet samtidiga processer ner från 270 till 28... Edit. Kan verkligen inte hitta några fler processer än normalt när "top" får för sig att räkna till 270 så säger "ps -aux" att httpd är igång 150 ggr och allt annat e precis som innan... Så frågan e var "top" får de övriga 90 processerna från... |
Swappar burken? Om du sänker keepalive-tiden minskar antalet httpd-processer.
|
Citat:
|
Sätter du maxklients till 15 lite keepalivetid så kommer du få grymt långa svarstider om du har lite samtidiga besökare.
Hur mkt minne har du i webservern? Om du har såpass mycket besökare att minnet tar slut och burken börjar swappa så blir det gärna segt. |
hmm, titta startservers o maxservers i httpd.conf
sen bör du kika på eaccelerator om du inte kör det ger fina preformance vinster i php. |
OMG. Jag måste ha läst tokigt tidigare. Om du har 30000 besökare per dygn så är förmodligen 150 apache-processer för lite (helt beroende hur lång keepalive du har men du verkar köra med default på 10 sekunder). Därav de långa laddtiderna (anslutningar läggs på kö).
På en server jag sköter om är det ca. 1000 besökare online samtidigt (timeout på 40 minuter). Den kör Apache 1.3 och jag har satt keepalive på 1 sekund. Antalet processer ligger då närmare 256 som är max om man inte ändrar en konstant i apache.h. |
Citat:
Har aldrig behövt söka efter dessa fel tidigare så jag är inte så insatt i hur jag får reda på vilka script som eventuellt är sega... Kod:
Timeout 300 |
Hittat lite felmeddelanden som jag missat tidigare, säger iof inte så mycket men så här ser loggen ut när den hänger sig...
Kod:
[Thu Jun 8 12:26:03 2006] [warn] child process 5785 still did not exit, sending a SIGTERM Har bytt minnen (så trassiga e dom inte) och passade samtidigt på att instsallera extra minne eftersom swappen ibland började användas men det hjälpte inte. |
Nu dök lite nya fel upp i errorloggen
Kod:
[Thu Jun 8 18:04:50 2006] [notice] child pid 8909 exit signal Segmentation fault (11) |
Vi hade sama problem också och innan vi hittade vad det var så blev vi smått gråhåriga. Det visades sig att det var en av våra kunder som hade ooptimerade php skript som anropade mysql med tunga frågor. Dessutom så var php skriptet buggigt så det anropade sig själv om vissa vilkor var uppfyllda. Så vissa anrop loopade...
activera apache serverinfo modulen lokalt och kolla i http://localhost/server-info efter vad som tar resurser. Jämför processid mot ps aux. Jag tror det var så vi kom fram till vilken fil som orsakade loopen och kunde stänga ner kunden. |
Citat:
|
hmm det var server-status som jag använde. Hur som helst så vänta tills servern är seg eller har allokerat 200 webbar och gå in och kolla på server-info. ta alla filer i listan som är scriptfiler och undersök dom.
|
Citat:
|
hmm då har vi olika versioner eller nåt. jag har apache 2.0xxx
eller så går det att ställa in i httpd.conf. vet ej. Du kan ju också testa att stänga ner några vhosts i taget och se när problemet slutar uppkomma. men det är ju klart en sämre lösning. |
Citat:
Kod:
Server Version: Apache/1.3.36 (Unix) PHP/5.1.2 Jag vet vilken vhost som är problemet men frågan kvarstår ju hur jag skall få reda på vilket script det e som drar resurser... |
Fick ett tips om att det kunde vara någon minneslucka i nån modul så jag har uppgraderat php med extensions till senaste och det hjälper inte heller.
Så nu återstår väl bara en fråga: Hur tar jag reda på vad varje process jobbar med för fil? / Loggar hur lång tid alla script tar ? |
Citat:
lsof -p PROCESS-ID fstat kanske kan ge lite info också, men.. <3 lsof (mest gammal vana antar jag.. jag vet ingenting.. :). |
Citat:
lsof Vid första intrycket så verkar det lite rörigt att gå igenom då den listar alla moduler och alla andra tänkbara filer som eventuellt kan vara öppnade av processern... Men lite borde jag ju kunna läsa ut där om jag sätter mig med det en stund. |
Alla tider är GMT +2. Klockan är nu 03:05. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson