abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
včera 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 6
včera 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 7
včera 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 1
včera 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
včera 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
1.12. 15:16 | Komunita

Na GOG.com začal zimní výprodej. Řada zlevněných her běží oficiálně také na Linuxu. Hru Neverwinter Nights Diamond lze dva dny získat zdarma. Hra dle stránek GOG.com na Linuxu neběží. Pomocí návodu ji lze ale rozběhnout také na Linuxu [Gaming On Linux].

Ladislav Hagara | Komentářů: 1
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 763 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: server - jak servírovat mnoho http požadavků?

2.9.2010 21:49 Dalibor
server - jak servírovat mnoho http požadavků?
Přečteno: 1179×
Přílohy:
Zdravím zdejší guru ;-)

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.html
2x 2 jádra, 8GB ram
load average asi 5-10
vytížení CPU asi 25% aplikace a 25% bere čekání na IO
5-15 přístupů do apache za sekundu (generování PHP)

2) MySQL server - přijímá požadavky od serveru 1. Běží na něm taky Apache a servíruje pouze statický obsah jako jsou css a js (odhlečení pro server 1). tento server má výkonný HW

stats: http://example.net/net/baska3.net.html
2x 4 jádra, 16GB ram
load average asi 5-10
vytížení CPU asi 20% aplikace a 10% bere čekání na IO
15-25 přístupů do apache za sekundu (statické věci)

Za každou radu budu moc vděčný! Díky, Dalibor

Odpovědi

2.9.2010 22:13 sivlk | skóre: 15 | blog: sivlk
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Příloha:
> Kde se nabírá to zpoždění?

Podozrievam najma toto, skus ich docasne vypnut (napr. len pre IP adresu tvojho testovacieho klientskeho pocitaca):

spir.hit.gemius.pl www.google-analytics.com toplist.cz
2.9.2010 22:19 sivlk | skóre: 15 | blog: sivlk
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
este aj impcz.adocean.pl, este by si mohol skusit urobit to co google na hlavnej stranke, dat vsetky obrazky grafiky stranky do jedneho suboru a pouzivat offsety css
3.9.2010 20:22 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Ahoj,

díky za tip, já myslím dobu, než vůbec přijde nějaká odezva od serveru.. Ty skripty jsou druhá věc, tam je jasné, že to načtení a vykreslení stránky zdrží.. ale mě jde spíše o tu dobu, než vůbec dorazí odpověď na HTTP požadavek..

Díky, Dalibor
4.9.2010 22:12 asdfg
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Co to mas sivlk za plugin v chrome?
4.9.2010 22:28 sivlk | skóre: 15 | blog: sivlk
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
To nie je ziaden plugin, to je v kazdom chrome. Nastroje -> Nastroje pre vyvojarov -> Resources, dole kliknut na cierny puntik a F5 a je to.
2.9.2010 22:57 VSi | skóre: 28
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
U CPU grafu z prvního serveru je patrný vysoký IO load. Z grafu se to na první pohled nezdá, ale ve špičkách zabírá celé jádro CPU (100%). Což je podle popsaného účelu serveru trochu zvláštní. IO load obvykle tvoří hlavně čekání na disk. Kolik je asi toho statického obsahu, který je "aktuální" - přichází na něj požadavky během několika hodin? Pokud se nevejde do diskové cache v RAM a jde např. o několik GB obrázků náhodně načítaných, může i to být problém. Jaký datový tok z toho serveru jde?

Prozkoumal bych na prvním serveru htop, 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á.
3.9.2010 20:31 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Díky,

jde přesně asi o 150GB obrázků, ty jsem zapomněl v problému popsat - ty nešly tak lehce oddělit od aplikace, takže jsem je nepřesunul na druhý server, který není tak vytížený.

Ten druhý server by neměl být úzké hrdlo, je svižný, % vytížení CPU skoro žádné.. cca 300 dotazů do MySQL za sekundu. Na ten htop se určitě podívám, neco takového jsem hledal.. zase o nco chytřejší ;-)

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
6.9.2010 11:44 Sten
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Lepší než reverzní proxy (jaký sw na to máte?) je statický obsah oddělit na samostatnou doménu a IP adresu
Reverzní 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
3.9.2010 08:45 none
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Ahoj!

Asi by to bylo prilis jednoduche, ale obdobne chovani (prodleva a pak rychle vracni stranky) muze byt zpusobene limitem Apache na pocet konekci. Pokud k tomu dojde, ceka se na spusteni/uvolneni vlakna apache (to mohou byt ty dve/tri sekundy) a pak je stranka rychle vracena. Neni to ono?

3.9.2010 20:35 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Ahoj,

přesně tento problém jsem míval před pár lety ;-) 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..
3.9.2010 21:01 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Pokud vám vadí prodleva před zobrazením v prohlížeči, podívejte se na to ze strany prohlížeče. Existují různé doplňky, které umožňují zobrazit dobu nahrávání jednotlivých částí stránky. Umí to např. i FireBug na panelu Síť, nebo jsou pak na to specializované doplňky.
3.9.2010 21:09 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Právě jsem vyzkoušel ten Firebug a je to přesně tak.. PHP mi napíše čas vygenerování 0.05s, ale přitom 9 sekund se čeká na odpověď na http požadavek :-(

jdu na ten htop..

Dalibor
3.9.2010 21:36 VSi | skóre: 28
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Můj tip je, že těch 150 GB obrázků může dělat problém, pokud je na ně hodně požadavků a často se musí sahat mimo RAM cache. Tomu napovídá i iowait v grafu. Pokud tam není databáze, tak je to možná příčina.
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.
4.9.2010 21:22 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Těch 150GB obrázků jde přímo přes nginx, na Apache jsou posílány jen požadavky na PHP. Bojuju teď s tím htopem, abych zjistil, co a jak přistupuje na disk..

server status je zde: http://www.baska2.net/server-status

je to moc dlouhé, tak to sem raději nebudu kopírovat..

Ještě jednou všem moc děkuji za tipy,

Dalibor
5.9.2010 14:38 1john2
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
pokud jste neznal htop, možná neznáte ani iotop nebo iftop(ale ten asi moc nepomůže)
5.9.2010 17:32 Vantomas | skóre: 24 | Praha
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
a atop to spojuje vsechno dohromady (az na tu sit)
5.9.2010 17:33 Vantomas | skóre: 24 | Praha
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
tak ted koukam, ze i tu sit, ale chybi mi pry nejaky patch v jadre.
6.9.2010 10:54 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Příloha:
Tak pomalu se kloním k názoru, že úzké hrdlo bude ten disk.

Na server chodí asi tak 50-60 http requestů za sekundu, vetšinou na statiské prvky (obrázky).

přikládám výstup z iostat, co jsem ještě nenapsal - systém běží na sw RAID 1, sda+sdb = md0. Nechápu, co znamená v iostat rrqm/s (mělo by být počet requestů na čtení za sec.) a wrqm/s (zápis/sec.), proč je to rrqm/s tak nízké oproti wrqm/s?

nějak se do toho zamotávám :-(
6.9.2010 11:32 Roman DAVID | skóre: 24 | Brno
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Pokud mate zapnuto, tak zkuste:

Zrusit vyhledavani .htaccess souboru (AllowOverride None + souvisejici)

Vypnout HostnameLookups (Off)

Krakodobe zkusit vypnout logovani Apache , pripadne logovat na jiny disk
6.9.2010 12:00 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Hostnamelookups vypnuté, toto dělalo velké problémy dříve logování jsem měl úplně vypnuté, jak apache, tak nginx

na ten htaccess se podívám, dost ho používám, tak to budu muset poladit
6.9.2010 11:50 Sten
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
rrqm/s
počet čtecích dotazů za sekundu
wrqm/s
počet zapisovacích dotazů za sekundu
Ten server strašně moc zapisuje. Vzhledem k tomu, že je to RAID 1, tak tam velmi dlouho trvá něco zapsat, naopak čtení je velmi rychlé. Nemáte tam zbytečně velké logování, třeba access logy na nginxu i Apache, když z hlediska zákona úplně stačí jenom na nginxu? Můžete ještě zkusit umístit PHP sessiony (pokud je používáte) do RAM disku, to také ušetří velké množství zápisů
6.9.2010 12:01 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Logování skoro všechno vypnuté, ty PHP session hodím do ramdisku, dobrý nápad. Díky
6.9.2010 12:10 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
nějaké další nové poznatky:

zapnul jsem dočasně logování pro nginx a apache i s dobou vyřízení requestu. Zjistil jsem, že statické prvky se načítají za 0.000 sec. a to úplně všechny a pořád - jak z disku, tak z ramdisku. Ale horší je to s PHP.

Ale co jsem zjistil zajímavého, že chvíli jede server svižně - Apache i nginx logují dobu na vyřízení requestu v řádu desítek až stovek ms, ale pak přijde zase na pár minut chvilka, kdy se vše vyřizuje třeba v řádu desítek sekund a někdy i třeba dvě minuty apod.

Je to cca po pěti minutách. Zkusím vypnout cron, možná to zpomaluje nějaké generování aplikací na pozadí.
6.9.2010 12:16 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
k tomu php - používáš eaccelerator nebo něco podobného?
-- Nezdar není hanbou, hanbou je strach z pokusu.
6.9.2010 12:33 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
nene, pouze dělám cachování obsahu, který vygenerují php skripty - části stránek a ty pak lepím dohromady, aby se nemuselo vše pořád generovat znova. Ale nic na předkompilaci php skriptů nepoužívám. Těžko říct, jestli by to něčemu pomohlo..
7.9.2010 07:57 HoGo
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Predpokladam ze mas souborovy system ze ktereho se ctou a zapiduje data a soubory (php,www,logy) pripojen s parametrem noatime ? Tohle muze docela pomoci. Zkus proverit (ale opravdu dukladne) nastaveni DNS a jeho vliv na dotazy, nekdy to ma dost velky ucinek, ackoli si clovek mysli ze to ma vypnute, nebo dobre poladene ( primarni, sekundarni DNS .. ) Zakaz vse co neni nezbytne nutne z .htaccess - pripadne je vybec nepouzivaj ( vypni pomoci Options atd.) dost to spomaluje - viz to jak se .htaccess hleda v cele ceste a zpracovava, lepsi je to nastavit natvrdo pro dany adresar v httpd.conf... To periodicke zpomalovani by vypadalo na nejaky odlozeny sync dat s diskem. Kde delas to cahovani - disk ? ( vypni noatime ) Pripadne to delej v pameti, nebo pouzij ramdisk. Urcite napis jak jsi dopadl.
10.9.2010 10:12 Dalibor
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Přílohy:
Tak jsem namountoval filesystem s parametrem noatime a zdá se, že problémy pominuly - běsně se to urychlilo ;-) 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í..
7.9.2010 11:43 iwk
Rozbalit Rozbalit vše Re: server - jak servírovat mnoho http požadavků?
Nie je len problem vo velkom mnozstve suborov v tomto cache adresari, ktory spomaluje io operacie? Pripadne, aky je limit pre maximalny pocet otvorenych suborov (nofiles) pre uzivatela, pod ktorym bezi webserver a php skripty?

Btw, nebude lepsie je pouzit memcached namiesto ukladania na disk?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.