abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 18:00 | IT novinky

    DuckDuckGo AI Chat umožňuje "pokecat si" s GPT-3.5 Turbo od OpenAI nebo Claude 1.2 Instant od Anthropic. Bez vytváření účtu. Všechny chaty jsou soukromé. DuckDuckGo je neukládá ani nepoužívá k trénování modelů umělé inteligence.

    Ladislav Hagara | Komentářů: 0
    dnes 14:22 | IT novinky

    VASA-1, výzkumný projekt Microsoftu. Na vstupu stačí jediná fotka a zvukový záznam. Na výstupu je dokonalá mluvící nebo zpívající hlava. Prý si technologii nechá jenom pro sebe. Žádné demo, API nebo placená služba. Zatím.

    Ladislav Hagara | Komentářů: 2
    dnes 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 13
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 2
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 10
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    KDE Plasma 6
     (68%)
     (11%)
     (2%)
     (20%)
    Celkem 566 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    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: 1246×
    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: 68 | 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: 32 | 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: 32 | 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.