WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Apache startar över 200 processer (https://www.wn.se/forum/showthread.php?t=14474)

gabriel 2006-06-05 22:32

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?

kullervo 2006-06-05 22:49

Ä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)?

gabriel 2006-06-05 23:14

Citat:

Originally posted by kullervo@Jun 5 2006, 23:49
Ä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)?

Nja rimligt e de väl inte då den aldrig gjort så tidigare (webbservern har 30000 besökare per dygn men jag kan inte minnas att de e så många processer samtidigt sen innan)
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...

kullervo 2006-06-05 23:29

Swappar burken? Om du sänker keepalive-tiden minskar antalet httpd-processer.

gabriel 2006-06-06 00:57

Citat:

Originally posted by kullervo@Jun 6 2006, 00:29
Swappar burken? Om du sänker keepalive-tiden minskar antalet httpd-processer.


Verkar inte minska laddningstiderna för sidorna, är alltså grymt segt på sistonde, verkar som nått script hänger sig eller nått, men då e frågan hur jag enklast får reda på vilket de kan vara...

jomper 2006-06-06 01:42

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.

Spirre 2006-06-06 01:53

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.

kullervo 2006-06-06 10:51

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.

gabriel 2006-06-06 15:49

Citat:

Originally posted by kullervo@Jun 6 2006, 11:51
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.

Ändrade lite till och kör keepalive på 1 sekund också men de blir inte mycket bättre,snarare segare laddning av sidorna... måste vara nått script som går segt på servern så jag får nog börja felsöka i den ändan, för tidigare har det aldrig varit några problem med sidan och dessa inställningarna...

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
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0


gabriel 2006-06-08 16:53

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
[Thu Jun 8 12:26:03 2006] [warn] child process 5796 still did not exit, sending a SIGTERM
[Thu Jun 8 12:26:03 2006] [warn] child process 5797 still did not exit, sending a SIGTERM
[Thu Jun 8 12:26:03 2006] [warn] child process 5798 still did not exit, sending a SIGTERM
[Thu Jun 8 12:26:03 2006] [warn] child process 5799 still did not exit, sending a SIGTERM
[Thu Jun 8 12:26:03 2006] [crit] (48)Address already in use: make_sock: could not bind to port 80
[Thu Jun 8 12:26:07 2006] [error] child process 5516 still did not exit, sending a SIGKILL

Blir ett antal sånna rader exakt hela tiden...


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.

gabriel 2006-06-08 18:53

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)
[Thu Jun 8 18:04:53 2006] [notice] child pid 9232 exit signal Segmentation fault (11)
[Thu Jun 8 18:04:55 2006] [notice] child pid 5825 exit signal Segmentation fault (11)
[Thu Jun 8 18:04:56 2006] [notice] child pid 9213 exit signal Segmentation fault (11)
[Thu Jun 8 18:05:00 2006] [notice] child pid 5829 exit signal Segmentation fault (11)


lazat 2006-06-10 13:54

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.

gabriel 2006-06-10 16:36

Citat:

Originally posted by lazat@Jun 10 2006, 14:54
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.


Låter troligt, för mysql är riktigt segt det också ibland, dock ger ju varken server-fino eller server-status någon vettig hjälp, såvitt jag kan se?

lazat 2006-06-10 23:05

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.

gabriel 2006-06-11 15:59

Citat:

Originally posted by lazat@Jun 11 2006, 00:05
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.


Men jag får inte upp några filer där, får bara en lista på processer, inte vilka filer proceserna använder...

lazat 2006-06-11 23:47

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.

gabriel 2006-06-12 00:03

Citat:

Originally posted by lazat@Jun 12 2006, 00:47
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.


Jag kör apache 1.3 och server-status visar bara (server-info visar bara alla inställningar på servern):
Kod:

Server Version: Apache/1.3.36 (Unix) PHP/5.1.2
Server Built: Jun 3 2006 12:51:49
Current Time: Sunday, 11-Jun-2006 23:37:15 CEST
Restart Time: Sunday, 11-Jun-2006 23:37:12 CEST
Parent Server Generation: 0
Server uptime: 3 seconds
4 requests currently being processed, 4 idle servers

WKKK____........................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"L" Logging, "G" Gracefully finishing, "." Open slot with no current process

PID Key:

  38517 in state: W ,  38518 in state: K ,  38519 in state: K
  38520 in state: K ,  38521 in state: _ ,  38527 in state: _
  38528 in state: _ ,  38529 in state: _ ,

To obtain a full report with current status information you need to use the ExtendedStatus On directive.

Jag har ExtendedStatus On i httpd.conf.

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...

gabriel 2006-06-13 00:38

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 ?

anders.n 2006-06-13 09:08

Citat:

Originally posted by gabriel@Jun 13 2006, 00:38
Hur tar jag reda på vad varje process jobbar med för fil?
"lsof" - http://freshmeat.net/projects/lsof/

lsof -p PROCESS-ID

fstat kanske kan ge lite info också, men.. <3 lsof (mest gammal vana antar jag.. jag vet ingenting.. :).

gabriel 2006-06-14 10:15

Citat:

Ursprungligen postat av anders.n
Citat:

Ursprungligen postat av gabriel
Hur tar jag reda på vad varje process jobbar med för fil?

lsof - http://freshmeat.net/projects/lsof/
lsof -p PROCESS-ID
fstat kanske kan ge lite info också, men.. 3 lsof (mest gammal vana antar jag.. jag vet ingenting.. :).

Man tackar, nått att börja med iallafall...

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