Kom ihåg mig?
Home Menu

Menu


Hjälp med Apache optimering.

 
 
Ämnesverktyg Visningsalternativ
Oläst 2011-03-09, 16:38 #1
ZyBeR ZyBeR är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2010
Inlägg: 5
ZyBeR ZyBeR är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2010
Inlägg: 5
Standard Hjälp med Apache optimering.

Hej,

Vet att detta varit uppe tidigare, men ingen av trådarna gav mig riktigt den förståelse jag behöver för att kunna optimera Apachen ordentligt.

Jag driftar en site med ca 40k besök i månaden, den är väldigt ajax intensiv och rapporterar sportresultat i realtid vilket gör att topparna ligger koncentrerade till helgerna och kan då bli ganska intensiva.

Systemet är uppdelat i separata delar, just nu sitter jag och försöker förstå hur man på rätt sätt ska optimera en Apache server.
Alla mina servrar är virtuella, servern i fråga är bestyckad med 2x vCPU samt 3GB RAM. Den kör Ubuntu Server 10.04 och kör bara Apachen, inget annat.

Jag kör Prefork MPM, vad rekommenderar ni för inställningar?

ServerLimit
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild


Stämmer det att MaxClients är hårdkodat till 256?

Kan man se i någon logg ifall man maxat MaxClients?
Vad händer när MaxClients går i taket, kommer den droppa anslutningarna eller köa? Om den köar, hur lång kan kön bli innan den börjar droppa?

Finns det någon enkelt och bra verktyg för att se statistik från Apachen? Jag har inga problem att sitta och övervaka realtidsdata om det inte finns loggar tillgängliga.
ZyBeR är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-09, 17:18 #2
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
Du kan tyvärr inte göra så jättemycket genom att ändra de där inställningarna. Grundproblemet kommer fortfarande att finnas kvar, nämligen att Prefork MPM är oerhört dyr och har mycket dålig gprestanda vid högt besökarantal. Du kan prova att minska KeepAlive så att anslutningarna släpps fortare, men det försämrar också upplevelsen för besökarna då de måste vänta på att webbläsaren skapar en ny anslutning för varje sidvisning.

Det stämmer dock inte att MaxClients är hårdkodat till 256 (var har du hört det?). MaxClients i Prefork har en övre gräns som är lika med inställningen ServerLimit. Vill du öka MaxClients ska du allså även öka ServerLimit. ServerLimit å sin sida har en övre gräns på 20000.

Det långsiktiga målet bör nog vara att försöka övergå till Worker MPM eller byta webbserver helt. Den vanligaste orsaken att man kör Prefork är att man har PHP som Apache-modul. Om det är din anledning så försök använda PHP som FastCGI istället så att du kan köra Worker.

Kortsiktigt kan du dock slippa göra ändringar i din kod (om den är beroende av att köras som Apache-modul) genom att lägga in en reverse-proxy (något som är bra att ha ändå när man kör Apache). Det är en annan mjukvara som agerar mellanhand och har hand om alla anslutningar. Jag har kört Nginx som reverse-proxy med gott resultat och det finns flera lätta guider för hur du gör. Enkelt ser det då ut så här:

Besökare <-> Nginx <-> Apache

Nginx tar emot besökaren, håller uppkopplingen vid liv (Keep-Alive) så att sidladdningar går fortare samt kan även konfigureras att helt ta hand om statiskt material såsom bilder om du vill. Då kan du låta Apache ha hand om skript och annat som kräver särskild konfiguration. Vill du att Apache ska få rätt IP-adresser från besökarna kan du då även lägga in modulen mod_rpaf, annars komme Apache se alla anslutningar som om de kommer från localhost.

Andra mjukvaror som kan agera reverse-proxy är till exempel Lighttpd och Varnish (den senare är helt och hållet byggd för ändamålet).

Apache (eller rättare sagt ditt operativsystem) köar anslutningarna. Kön blir så lång som ditt operativsystem tillåter. Webbläsarna ger dock upp efter någon minut och kopplar ner med ett felmeddelande till besökaren.

Du kan hålla kolla på anslutningar, bandbredd och liknande genom modulen mod_info.

Senast redigerad av emilv den 2011-03-09 klockan 17:25
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-09, 17:41 #3
ZyBeR ZyBeR är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2010
Inlägg: 5
ZyBeR ZyBeR är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2010
Inlägg: 5
Tack för ett utmärkt svar!

Jag har under tiden sedan jag skrev posten räknat fram avg minnesåtgång per apache2 process genom att köra "ps -ylC apache2 --sort:rss", in i Excel, summera och dela med resultatet 10mb/process (räknat på ca 220 processer).

Om nu detta stämmer borde jag väl kunna sätta MaxClients till närmare 300 utan att riskera swapping?
Eller är det max 256 clients?

Plattformen är egenutvecklad och jag har ingen anledning till att köra prefork mer än att det var standard och att jag försökte konfa worker mpm men misslyckades.

Ska jag ge mig på någon fundamental ändring av servern är det lika bra att gå över till en annan webserver direkt, men detta är något jag får göra vid sidan om produktionssystemet.

Att köa anrop i upp till minuten är inte intressant, kan systemet inte svara inom 10sec kan det lika gärna droppa anropet...


Hur skulle en bra uppsatt PHP server se ut?
Jag har inte tid att lägga på manuellt arbete med servrarna hela tiden utan vill hålla mig till standard installationer så gott det går. Ubuntu apt-get *mmm*

Jag har väldigt lite statiskt material, bara js, css samt bilder i designen, resten ligger i databaser och genereras vid efterfrågan. Ok, några tyngre script körs via cron och resultatet är statiskt tillgängligt för besökarna. Så jag vet inte hur mycket dubbla webservrar statiskt/dynamisk skulle hjälpa mig?

Något jag borde intallera är en php cache, men har inte haft möjlighet att sätta mig in i det ännu. Vad är det som rekommenderas här?

Många frågor blir det =)
ZyBeR är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-09, 18:07 #4
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
En mycket enkel och bra PHP-cache är APC som finns i paketarkivet. Lägg in, kolla i PHP:s konfiguration att den är aktiverad och sedan startar du om Apache.

Du kan ju faktiskt sätta gränsen högre så att vissa delar swappas, även om jag fortfarande tycker att Prefork är fel väg att gå. Mycket av minnet i varje process används inte och det kommer därför inte att läsas in från swappen heller. Försök även minska minnesanvändningen genom att:
*) Stänga av alla Apache-moduler du inte använder
*) Om du kör PHP som Apache-modul, sätt MaxRequestsPerChild till ett lågt tal eftersom Apache är dåligt på att lämna tillbaka minne som PHP använt.

Här har du en guide för att installera och konfigurera Apache som Worker MPM med PHP som FastCGI:
http://ubuntuforums.org/showthread.php?t=1038416
Det mesta där görs med pakethanteraren. Två stora fördelar med detta:
*) Mycket bättre prestanda i Apache (du kan utan problem hantera tusentals samtidiga uppkopplingar)
*) Mycket bättre minnesanvändning när du blir av med mod_php
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-09, 23:16 #5
Bluemidget Bluemidget är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2004
Inlägg: 4
Bluemidget Bluemidget är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2004
Inlägg: 4
Det är också viktigt att du cachar all data så hårt det går för att minska belastningen på databasen. Jag har gjort en likadan sida som den du beskriver och det vi gjorde för att minska loaden var att flytta livescoredatan till memcached och apc och köra genom nginx istället för apache.
Bluemidget är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-11, 16:36 #6
Danieloss avatar
Danielos Danielos är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Oct 2005
Inlägg: 3 102
Danielos Danielos är inte uppkopplad
Klarade millennium-buggen
Danieloss avatar
 
Reg.datum: Oct 2005
Inlägg: 3 102
Att köra php i apache worker är inte att rekommendera, php är inte trådsäkert, vad du ska göra är att köra nginx och php-fpm, howto har du här: http://www.howtoforge.com/installing...-ubuntu-debian Sedan kan du sätta tex varnish framför.
Danielos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-11, 18:20 #7
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
När det gäller PHP + Apache tycker jag att en php-cache är det första man skall installera om man vill optimera. Själv kör jag eAccelerator, en php-cache brukar halvera belastningen på servern.
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-12, 23:26 #8
elf98s avatar
elf98 elf98 är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 144
elf98 elf98 är inte uppkopplad
Medlem
elf98s avatar
 
Reg.datum: Aug 2005
Inlägg: 144
40k besök/månad är åas inte särskilt mycket. Hur många samtidiga besökare har du vid toppar? Hur ofta uppdateras ajaxinformationen för dessa besökare?

Även om du skulle få 40k besök på en dag är det bara 1 besök varannan sekund. Även med 40000k besök på en timme - 11 besök per sekund bör inte vara några större problem med en standardinstallation. Sen beror det så klart på hur effektiv koden är skriven och hur ofta den måste laddas om.
elf98 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-15, 19:41 #9
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Jag skulle också rekommendera Nginx med PHP-FPM och eventuellt Varnish eller Squid-cache som reverse proxy med cache. Vet inte riktigt vilken som är bäst, men de flesta verkar förespråka Varnish på det hör forumet.

Sedan är op-code cache lätt att installera, jag rekommenderar APC. För att minska belastningen på databasen är memcached suveränt, men kräver att du skriver om koden en del och det verkar ju inte riktigt vara det som är problemet här.
Citat:
Ursprungligen postat av elf98 Visa inlägg
40k besök/månad är åas inte särskilt mycket. Hur många samtidiga besökare har du vid toppar? Hur ofta uppdateras ajaxinformationen för dessa besökare?

Även om du skulle få 40k besök på en dag är det bara 1 besök varannan sekund. Även med 40000k besök på en timme - 11 besök per sekund bör inte vara några större problem med en standardinstallation. Sen beror det så klart på hur effektiv koden är skriven och hur ofta den måste laddas om.
Besök är ju inte samma sak om sidladdningar dock.
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-03-14, 12:39 #10
Adestro Adestro är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Apr 2007
Inlägg: 1 036
Adestro Adestro är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Apr 2007
Inlägg: 1 036
Om du har problem med många requests i dina AJAX-lösningar kanske du ska kika på att använda websockets istället för xmlHTTPrequest. Skalar betydligt bättre och genom att använda exempelvis www.socket.io får du bakåtkompatibilitet med icke-HTML5 webbläsare.
Adestro är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017