Portál AbcLinuxu, 28. října 2025 05:17
Chtěl bych poprosit o radu,
provozuji web s návštěvností kolem 30.000/den (www.i-bazar.cz), celou dobu ale nějak bojuju se servírováním stránek. Loguju délku generování stránek, ta se pohybuje kolem 500ms - problém je ale v tom, že skutečné načtení stránky v prohlížeči trvá klidně i 3-5 sekund než se něco začne dít - potom vyjede stránka, kde je ale napsán čas 0.03 sec.. Kde se nabírá to zpoždění? Přitom toto se stává i u statického obsahu.. Bez reverzní proxy to bylo horší.. Můžete mrknout na www.i-bazar.cz a ten čas je úplně dole jako číslo v patičce.
V aplikaci samotné už toho není moc co řešit, db dobře navrhnutá, kešování na několika úrovních do ramdisku apod.. Celkem pomohla reverzní proxy, kterou jsem na server 1 dal, ale pořád to není ono.. Ani jeden server neswapuje.
Web běží na dvou dedikovaných serverech:
1) reverzní proxy + Apache + php, sem chodí požadavky na webové stránky. Reverzní proxy je přijme, pokud jde o statický obsah servíruje jej rovnou, pokud jde o dynamický, posílá na Apache. PHP se připojuje přes Gbit na MySQL server. Tento server má trošku méně výkonný HW, ale měl by stačit.
stats: http://example.net/net/baska2.net.htmlhtop, co žere nejvíc CPU. Pak taky počet IO operací na diskovém systému. Případný problém na druhém serveru by prozradilo profilování SQL dotazů - pokud tady není úzké hrdlo, tak tenhle stroj by to neměl způsobovat. 15-25 req/s na pár statických souborů je skoro nic.
Lepší než reverzní proxy (jaký sw na to máte?) je statický obsah oddělit na samostatnou doménu a IP adresu a použít lighttpd nebo nginx, na PHP klidně pro začátek Apache s mod_php, který má asi nejvyšší výkon (i když pokles výkonu u fastcgi je obvykle neznatelný). Použitím lighttpd pro PHP by se možná uspořila pamět, ale stím problém asi nemáte.
Jinak při pomalém načítání si web otevřete ve firefoxu s firebugem - tam je přesně vidět, na co se kde čeká.
jako reverzní proxy používám nginx, nejřív jsem si myslel, že je blbost cpát další vrstvu na ten samý HW - že to nemůže pomoci.. ale udělalo to to, že nginx teď čeká než se přijme kompletní HTTP hlavička a nevytěžuje tak vlákna Apache. Jakmile se načte celá HTTP hlavička, předá se na Apache, ten to vyřeší, vráti na nginx a ten zase čeká, než si ji klient stáhne.. Z logu jde vidět, že dost HTTP požadavků si klienti stahují i půl sekundy, paralelně, a tak vytěžují vlákna Apache, který jen čeká na uvolnění.
Ten Firebug taky neznám, díky!
Dalibor
Lepší než reverzní proxy (jaký sw na to máte?) je statický obsah oddělit na samostatnou doménu a IP adresuReverzní proxy je velmi důležitá věc pro dosažení vysokého výkonu, tu bych rozhodně ponechal Lepší je oddělit to na samostatný server, to je jisté, ale tady by stačilo, kdyby statický obsah servírovala ona reverzní proxy, klidně pod stejnou doménou a IP adresou (zrovna nginx tohle zvládá pomocí sendfile a pollu tak dobře, že Apache za tu dobu často nestihne ani začít hledat, kde se ten soubor nachází). Je zbytečné tím vytěžovat dynamický server, který má velkou režii pro každý požadavek
Teď mám limit konexí 256, 200 vláken je připravených v záloze a cca 15-20 je aktivních.. ikdyž, toto je Apache, před ním je ještě nginx, tam ten limit neznám.. nginx má teď ve špičce kolem 600 spojení aktivních, ale není tam znát, že by je nějak omezoval..
jdu na ten htop..
Dalibor
5-15 přístupů do apache za sekundu (generování PHP)To je včetně těch obrázků co jdou skrz nginx, nebo čistě jen PHP? Možná by pomohlo nastavit (jestli to tak už není) nginx, aby se o obrázky staral úplně sám (na základě URL), a Apache nechat jen na PHP. Jestli se 9 sekund čeká na "aplikační" http požadavek, a přitom čas běhu php skriptu je skutečně 0.05s, musí být problém v čekání uvnitř http serveru. Pravděpodobně se projevuje nějaký limit na počet spojení (MaxClients v Apache) apod. Podobnou situaci jsem viděl na serveru, kde bylo 80 req/s jen na PHP přes fastcgi a 3000 PHP procesů, k tomu cca 100 req/s na statické obrázky přes lighttpd (běžela tam top 100 facebook aplikace, přes 1,5M uživatelů). V tomto velmi pomůže Apache server-status. Kdyžtak sem dejte ještě jeho výpis.
Přikládám týdení statistiky, bod zlomu určitě poznáte
Zase jsem o něco chytřejší, díky moc všem zúčastněným!
Ještě poladím htaccess a pár dalších míst a bude zase na pár měsíců pokoj.
Jinak všechno co se kešuje je v ramdisku, takže tam to snad nepůsobí žádné zdržení..
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.