Optimalizace aplikace && vytížní serveru rubrika: Programování: PHP

1 Jelen07
položil/-a 11.9.2015
 
upravil/-a 15.9.2015

Dobrý den,
v poslední době mi klient reportuje, že jeho web má výpadky (výsledek hledání se zobrazí po 2 minutách ap.). Jedná se o převzatý projekt, kde nejsem schopný ihned detekovat problém.
Zkusím jej zhruba přiblížit.
Projekt je postavený na php + mysql + apache + nginx. Denně web navštíví okolo 30k uživatelů, cca 700k pageviews. Do databáze teče 3k dotazů za sekundu. A na serveru 16 jader, 72GB RAM, běžně využívá čtvrtinu, swap 0, load average kolem 2.
Máte zkušenosti jak v takovém případě postupovat? Nějaký seznam bodů který krok po kroku projít?
Děkuji

// Aktualizovaná návštěvnost + parametry serveru

odkaz
1 kr
odpověděl/-a 12.9.2015

nezda se mi tech 3k dotazu za vterinu, to tomu poctu uzivatel neodpovida (leda by to byl chat s nakejma nesmyslnejma realtime updatama) => nakej spatnej dotaz do databaze / zkusit jestli je vubec mysql port otevrenej pro venek , treba vam nekdo jen luxuje databazi
link sem asi dat nechcete co? :}

Komentáře

  • Jelen07 : Běžná stránka má v rozmezí 100-200 dotazů + na pozadí probíhají crony (import / export). Každou minutu, co čtvrt hodiny co hodinu ap... 14.9.2015
  • Kit : @Jelen07: 100-200 dotazů do DB na běžnou stránku je prostě moc. Měly by to být jednotky dotazů. Někde máš chybu v návrhu. Velmi často se setkávám i s tím, že někdo posílá DB dotazy v cyklu - to je úplně špatně. 14.9.2015
  • vojtech.kurka : 200 dotazu na stranku neni asi optimalni, ale vubec to nemusi predstavovat problem. Muzou vsechny probehnout do 20 msec. Sledoval bych zatez serveru neustale, hlavne ve chvili, kdy se spousti nejaky importovaci cron, nebo kdyz bezi zaloha databaze. V tu chvili muze dojit treba k zamykani nejakych tabulek. Otevri si aspon htop a innotop (query view) a sleduj, co se tam deje. 14.9.2015
  • kr : kit ma pravdu, na stranku maj bejt jednotky dotazu, ne stovky jezis 14.9.2015
  • Jelen07 : Omlouvám se že jsem to neupřesnil - běžnou stránkou jsem myslel nejčastěji navštěvovaný typ stránky, ne o nás nebo kontakty. Na webu je složitá logika, už tak se hodně věci předpočítává. Dle nových poznatků (analyza accesslogu) to vypadá na problém s roboty, lezou tam kde by neměli. 15.9.2015
  • Kit : @Jelen07: Předpočítávání je ve své podstatě denormalizací. K tomuto účelu se většinou nevyužívá primární úložiště, ale např. Memcached. Co si mám představit pod "Na webu je složitá logika"? Komplikované SQL dotazy nebo příšerný PHP kód? Jak tedy vypadá struktura nejčastěji navštěvovaného typu stránky? Jeden SQL dotaz na záhlaví, jeden na postranní menu, jeden na seznam všech prezentovaných položek - např. zboží nebo perexů příspěvků. To máme 3 SQL dotazy. Kde je těch zbylých 197? To všechno dělají ti roboti? Tak jim dejte jen to, co chtějí. Chtějí ceníky? Tak jim je dejte v jednom RSS, ať zbytečně nepřetěžují server harvestováním po jednotlivých položkách. 15.9.2015
  • mr.fatblunt : V praxi jsem resil podobne problemy a narazel jsem v PHP kodu na hruzy jako ze se vytahlo 100 10kB textu z DB, ve smycce (presne jak rika Kit) se k tomu v PHP "dojoinovaly" dalsi udaje (takze 100 dalsich SQL dotazu navic) a pak se o nekolik set radku dale (metody mely bezne 700-1200 radku) vzal z toho celeho vysledku jen prvni radek a to se flaklo do sablony. I takove veci se deji... Rekl bych ze je jednoznacne nutne refaktorovat ten PHP kod, a pokud je nutne aby to furt bezelo a byl hned videt vysledek, klidne se muze zacit tim ze se to zprofiluje a pomale casti se obali filesystemovou cache (zarucene pomaha, vetsi bordel v kodu a okamzite uklidneni klienta zaruceno :-)). Pak je samozrejme potreba se nad tou celou masinerii zamyslet a udelat to poradne a to pravdepodobne rovnou od nuly - a tady by hodne pomohla informace o jaky typ webu jde (cucham cucham nejake "drahe know-how a dlouhe roky vyvoje" aneb klasicky vcera-bylo-pozde-namatlej-to-tam bastl). 18.9.2015
  • michal.svojanovsky : Viděl bych to na klasický problém neznalosti JOINů a napojováním ve smyčkách. Neznám rozsáhlost aplikace, ale IMHO max. několik desítek dotazů musí stačit. 25.9.2015

Pro zobrazení všech 11 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.