Sziasztok,
saját VPS-men, amin egy Debian Wheezy fut. A szerveren inkább Drupal oldalak futnak. Ezért nagy erőforrásokra van szükségem. Kérdésem, hogy hogyan lehet a terhelést elosztani. pl: Nézem a HTOP-al a szervert, hogy alig mozdul ki a CPU, ha frissítem az oldalamat, de az oldal lassan töltődik be. Tesztként elindítok pl: egy tömörítést, akkor az oldal szintén lassabban töltődik be, de a CPU terhelése nem nagyon megy 50% felé.
Amit szeretnék, hogy ha oldalakat töltök, akkor mennjen fel azonnal 80% körüli értékre és a többi dolog pedig lassuljon le. Kérdésem, hogy ezt hogyan lehetne kivitelezni, miket kellene átnéznem ehez?
Köszi!
KALMI
- 5227 megtekintés
Hozzászólások
A PHP opcode cache, memcached vagy xcache variable cache körökön és optimalizálásokon már ugye túl vagy? Jó kiinduló pontot szokott adni pl. ez az oldal: http://tools.pingdom.com/fpt/
- A hozzászóláshoz be kell jelentkezni
Még nem ezért Kezdő Linux ;)
Nézegetem a linkeket, de ha kapok egy kis plusz infot, amit pl: alapból el kell végezni azt megköszönném.
- A hozzászóláshoz be kell jelentkezni
Hát sorrendben ezek a tippjeim, de kisebb guglizást is igényel:
- Ha Apache+mod_php-val dolgozol, akkor a php-fpm-re érdemes áttérni és megfontolni hogy lighttpd vagy nginx legyen a webszerver. A nemhasznált apache és PHP modulokat értelem szerűen letiltani, pl. ha PHP-zol, akkor a cgi-s apache modulok valszin nem fognak kelleni, ha CGI-s php akkor úgyis fastcgi-t ajánlanak és talán php-fpm-hez is.
- Érdemes egy xcache vagy apc telepítése, mint php opcode cache. Mindkettő egyszerű, szépen beépülnek, monitorozhatóak és nem kell minden egyes lapletöltésnél futásidőben fordítani a PHP kódot a nulláról.
- Kimenet (főleg js és css) tömörítése, apache-ban mod_deflate.
- A pingdomon leírják, hogy az adott oldallal szerintük mit érdemes csinálni, ilyen szokott lenni a kliens cache engedélyezése, a css/js file-ok aggregálása (Drupal ala van egy Boost nevű modul ehhez)
- Memcached vagy xcache esetén a változó cache (erősen memcached jellegű) használata, szintén a Boost modul jön képbe
A helyzet az, hogy ezek elsőre tűnnek csak szerverkímélő dolgoknak, de a kedves látogató élményét is nagyban növelik. Jóval gyorsabbá és pörgősebbé válik egy 1-2 js/css file-al dolgozó és a kliens cache-ét használó oldal betöltődése. Hiába van adott esetben 50Mbit/sec is a kliensnél, ha akár 80db-ból kell összepakolnia a böngészőnek a weboldalt. A Firefox 15 szálon kezd tölteni és sorban halad...
Mindenképp lépésenként haladj és nézd, hogy melyik lépés hol és miben számít.
- A hozzászóláshoz be kell jelentkezni
1 oldalbetöltés valószínűleg egyszerre csak 1 magot fog terhelni, próbáld meg ab-vel (http://explainshell.com/explain/1/ab) tesztelni, akkor valószínű 100%-ig fog menni, ha a -c-t legalább annyira állítod, ahány magod van.
- A hozzászóláshoz be kell jelentkezni
Ugyan nem az általad felvetett irány, de ilyen jellegű dolgot (sebesség) ezekkel szépen lehet áthidalni:
- php cache/accelerator
- apache disk/mem cache
- apache mod_expires
- memcached modul drupálhoz
- statikus adatok file-ba cache-elése drupálnál
- reverse proxy
Nem írtad, de szóba jöhet még: vár az adatbázisra és a lemezre. Előzőt finomhangolással lehet javítani az utóbbira mondjuk valami ssd-n alapuló block-cache lehet a megoldás - én flashcache párti vagyok -, bár ezzel az adatbázist is lehet szépen gyorsítani.
Vagy a fentiekkel megegyező megoldás.
- A hozzászóláshoz be kell jelentkezni
Köszönöm! Nézem is ezeket :)
Egy tapasztalati, nagyon általános kérdésem lenne, hogy egy Drupal 7-es oldal, ami mondjuk napi 100 regisztrált látogatót és mondjuk ugyan ennyi nem regisztrálatlan látogatót fogad annak mi lenne az optimális VPS server paramétere, azaz egy ilyen oldal milyen erőforrásokat igényelne, egy nagyon gyors, jó futáshoz?
- A hozzászóláshoz be kell jelentkezni
Jól beállítva kényelmesen el kell mennie 512-768MB körül (FPM-el), de a MySQL közbeszólhat, mert az InnoDB-nek elég jó memória igénye van, de az is hangolható. A mysql-edre a mysqltuner.pl -t érdemes ráereszteni, az ad néhány tippet. Egyébként alapvetően a lapletöltések száma a mérvadó és hogy miket töltenek le, pl. olyan oldalt ami 23293239823db Drupal modul rak össze, galériát böngésznek vagy a korábban javasolt valamilyen cache-ből (előre generált html, memcached, xcache akármi) érkezik...
- A hozzászóláshoz be kell jelentkezni
Hát nem tudok semmit az oldalról, de mondjuk ez jó méréshez, hogy lásd változik-e valami, ha csinálsz valamit, ne csak szemre menjen a dolog:
http://gtmetrix.com/
Amúgy hogy hány ember jár arra, az másodlagos. Hány oldal letöltés van, mekkora egy oldal, a mikor kigenerálódik, hány modul lapátolja össze, miből szedi össze az oldalt, ahonnan összeszedi az mennyire terhelt, mennyi a statikus elem az oldalon, ha van javascript-ed az hívható/tölthető-e async módban, egy időben többen is nyomkodják az oldalad vagy időben eloszlik a dolog átfedés nélkül...
Mondjuk egy fórum, alap hír oldal, a fentebbi javaslatokkal 1GB RAM és 2/4 CPU maggal cache-ből, cache-elt adatbázisból szépen elmegy. De ez hatalmas általánosítás, szóval nem mérvadó az oldalaid és szervered ismerete hiányában.
Olvass, tesztelj és mérj! :)
A szentháromság.
Utólag jutott eszembe, hogy a naplózás is tud ültetni vasat rendesen, szóval érdemes arra is ránézni.
- A hozzászóláshoz be kell jelentkezni
Az adatbázist hogyan lehet gyorsítani Optimalizálással?
- A hozzászóláshoz be kell jelentkezni
Mondjuk kezdetnek a mysqltuner megteszi. Amit kiköp, nagyjából lehet alkalmazni, persze ésszel, mert nagyon el tudja húzni a memóriát a mysql javára. De lehet optimalizálással is, de drupal esetében konkrétan ehhez már nem értek.
- A hozzászóláshoz be kell jelentkezni
Alapvetően két módszer van: magát a mysql server-t "tuningolod", illetve magát a használt adatbázis szerkezetét is célszerű. Ez utóbbival nagyon sokan nem foglalkoznak, néhány index nagyságrendi gyorsulást (vagy akár lassulást) is okozhat. A mysql szerver terhelését "élőben" mytop-pal tudod kényelmesen monitorozni, illetve javaslom kapcsold be a slow_query_log-ot (és persze log-queries-not-using-indexes).
Illetve célszerű még a query-ket is jól megfaragni, ott is nagyságrendeket lehet nyerni (vagy bukni), mert minden dbms-nek vannak heppjei. Persze ez "gyári" modulnál nem biztos, hogy lehetséges (vagy célszerű).
Persze mindez csak akkor igaz, ha db limites a dolog.
- A hozzászóláshoz be kell jelentkezni
Kezdetnek el kell dönteni, hogy hol lassul be.
Egy sima php oldalt amiben nincs db is lassan tölt be?
Ha db-ből olvasol be akkor esetleg?
Vagy fájlelérés?
Illetve biztos, hogy az oldalbetöltés a lassú? Ha wget-el kérdezed le az oldalt, akkor is? (tehát nem a css-ek, js-ek stb lassítja be? drupálnál van ezer http lekérés a sok file miatt)
Nem lehet network probléma? Pl távoli a szerver esetleg? ping-el gyors az elérés?
Ha mindenre pozitív (szerk: vagy inkább negatív bocs) a válasz, akkor nem 100%, hogy a szervernél kell keresni a hibát, hanem lehet, hogy a drupál oldalban van valami genya, pl béna modul.
Egy php oldalnak nem kötelező azonnal 100-ra pörgetnie a cpu-dat. Olyan mintha a kocsiddal egy 10 méteres útra is 100-ra akarnád pörgetni a motort (most hanyagoljuk el a gyorsulás tényét)
- A hozzászóláshoz be kell jelentkezni
Köszönöm válaszodat!
Egyenlőre még nem keresek hibát minden működik csak szeretnék egy kicsit javítgatni, tuningolni a teljesítményen :)
- A hozzászóláshoz be kell jelentkezni
Ezek is segítenek a tuningolásban:
http://developer.yahoo.com/yslow/
https://developers.google.com/speed/pagespeed/insights/
- A hozzászóláshoz be kell jelentkezni
Olyan kérdésem van még, hogy pl: MySQL adatbázis CRON-ba történő optimalizálása, javítás jó ötlet?
- A hozzászóláshoz be kell jelentkezni
Ha cronból kell csinálni akkor ott valami nem remek. Gondolom nem egy nagyon nagy oldal, nincs percenként adatfelvitel-módosítás-törlés (cikkek, hozzászólások, stb. stb.).
- A hozzászóláshoz be kell jelentkezni
Heti, kétheti rendszerességre gondolok nem sűrűre. Tapasztalatból látom, hogy a Drupal idővel igényli ezt, mert mindig tudok valamit optimalizálni az adatbázison.
- A hozzászóláshoz be kell jelentkezni
Az, hogy lehet optimalizálni (ez gondolom azt jelenti hogy kiírja hogy volt valami amin tudott javítani) távolról sem biztos hogy azt jelenti hogy akár mérhető javulást hoz bármiben is.
- A hozzászóláshoz be kell jelentkezni