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 17:02 | Pozvánky

Přijďte si popovídat o open source obecně a openSUSE konkrétně s dalšími uživateli a vývojáři. Oslava nového vydání openSUSE Leap se uskuteční 16. prosince od 17:00 v nových prostorách firmy SUSE v Praze. K dispozici bude nějaké občerstvení a DVD pro ty, kdo je sbírají nebo ještě mají mechaniku. Po párty v kanceláři se bude pokračovat v některé z hospod v okolí.

Miška | Komentářů: 7
dnes 14:55 | Zajímavý software

Byla vydána verze Alpha 1.0 otevřeného operačního systému pro chytré hodinky AsteroidOS. Podporovány jsou hodinky LG G Watch, LG G Watch Urbane, Asus ZenWatch 2 a Sony Smartwatch 3. Ukázka ovládání hodinek na YouTube. Jaroslav Řezník přednášel o AsteroidOS na chytrých hodinkách (videozáznam) na letošní konferenci OpenAlt.

Ladislav Hagara | Komentářů: 0
dnes 13:30 | Zajímavý software

Byly uvolněny zdrojové kódy známé rogue-like hry DoomRL. Počátky hry jsou v roce 2002. Je napsána ve FreePascalu a zdrojový kód je nyní k dispozici na GitHubu pod licencí GNU GPL 2.0. Autor pracuje na nové hře Jupiter Hell, která je moderním nástupcem DoomRL a na jejíž vývoj shání peníze prostřednictvím Kickstarteru.

Blaazen | Komentářů: 0
dnes 13:15 | Pozvánky

Přijďte s námi oslavit vydání Fedory 25. Na programu budou přednášky o novinkách, diskuse, neřízený networking atd. Release Party se bude konat 16. prosince v prostorách společnosti Etnetera. Na party budou volně k dispozici také propagační materiály, nová DVD s Fedorou 25 a samozřejmě občerstvení. Přednášky budou probíhat v češtině. Pro více informací se můžete podívat na web MojeFedora.cz. Jen připomínám, že tentokrát jsme zavedli

… více »
frantisekz | Komentářů: 0
včera 16:38 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 5. a 6. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu. Celkově bylo zpracováno 65 hodin z 89 přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
včera 11:30 | Komunita

Bylo oznámeno, že bude proveden bezpečnostní audit zdrojových kódů open source softwaru pro implementaci virtuálních privátních sítí OpenVPN. Audit provede Matthew D. Green (blog), uznávaný kryptolog a profesor na Univerzitě Johnse Hopkinse. Auditována bude verze 2.4 (aktuálně RC 1, stabilní verze je 2.3.14). Audit bude financován společností Private Internet Access [reddit].

Ladislav Hagara | Komentářů: 4
včera 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
včera 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 1
8.12. 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
8.12. 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

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

Dotaz: Apache+PHP+Oracle

12.11.2015 08:26 Scendel
Apache+PHP+Oracle
Přečteno: 302×
Dobrý den,

rád bych se zeptal, zda někdo tuto konfiguraci nepoužívá, mám problém, že při větším počtu uživatelů mi souměrně stoupá i počet připojení do Oracle

root@ora-web:/home/# netstat -tanpe|grep 1521 | grep ESTABLISHED |wc -l 80 root@ora-web:/home/# ps -aux|grep apache2 |wc -l 89

konfigurace apache:
 mpm_prefork_module>
    ServerLimit          20
    StartServers          2
    MaxClients          130
    MinSpareThreads      5
    MaxSpareThreads      15
    ThreadsPerChild      64
    MaxRequestWorkers   100
    MaxRequestsPerChild   0

v php je nastaveno přes OCI persistentní připojeni, potřebuji nějak omezit počet připojení do databáze, přeci není možné, když budu mít 1000 připojení na web server, aby bylo 1000 připojeni do Oracle, zkoušel jsem různě měnit nastaveni apache, ale už si opravdu nevím rady, jedná se Ubutnu LTS server 14

když by Vás něco napadlo, tak prosím poradtě

Děkuji Vám

Odpovědi

12.11.2015 10:14 Ivan
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
PHP a Oracle je hodne spatna kombinace. Pamatuju si, ze kdysi nekdo na FEL CVUT napsal jako diplomku neco co fungovalo jako MaxConnect pro Informix. Tzn na web serveru bezi samostatny proceses, ktery drzi konexe do databaze, a samotne PHP worder procesy s nim mluvi pres IPC.

Jeste si vzominam, ze Oracle ma neco podobnyho a jmenuje se to DRCP.
12.11.2015 10:22 Scendel
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
diky za reakci, DRCP je bohuzel az od Oracle 11 ja řeším Oracle 10, kde nic podobného není když bych dokázal upravit apache aby jeden worker mohl obslouzit vice klientu, protoze co proces apache, to connect do db .. mam mpm_prefork nevím jestli by se stejně choval mpm_worker ...
12.11.2015 10:55 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
PS: DRCP je normální connection pooling, což se liší od persistentního spojení. Rozdíl je popsaný např. http://www.databasesoup.com/2013/07/connection-pooling-vs-persistent.html Connection pooling je úplně běžně používaná technika a nijak nesouvisí s tím, zda je Oracle vhodná pro použití ve spojení PHP.
-- OldFrog
12.11.2015 10:31 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
MaxClients máte na 130, takže víc než 130 požadavků se nebude současně obsluhovat a tedy by nemělo být ani víc připojení do databáze. Funguje to tak? Pokud ne, je někde problém a chtělo by ho to najít, protože tvrdé nastavení limitu na počet konexí do databáze by nic neřešilo - sice by se snížil počet připojení do databáze, ale aplikace by neměla dostat spojení a házela by chybu.

Tvrdé nastavení limitu na počet persistentních spojení lze udělat pomocí oci8.max_persistent. Jelikož jedno persistentní připojení může využívat jen jeden běžící php skript, měla by být hodnota max_persistent nastavena na hodnotu MaxClients, tedy 130 (+ nějaká rezerva).

Pokud se hromadí připojení do databáze je někde problém. Mají všechna databázová spojení stejné přihlašovací údaje? Podaří se persistentní spojení skutečně vytvořit? Pokud se nepodaří persistentní připojení, uzavře se pak normální nepersistentní připojení? To lze otestovat na jednoduchém testovacím skriptu a pak ladit teprve v aplikaci.
-- OldFrog
12.11.2015 10:42 Ivan
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Tezko rict co je horsi, jestli velke mnozstvi necinnych konexi, anebo to, ze se spojeni budou otevirat pri kazdym kliknuti na strance. V pripade Oracle ma vytvoreni DB spojeni dost velky overhaed.
12.11.2015 10:56 Scendel
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
MaxClient na 130 funguje, to je ale špatně, já nemůžu omezovat klienty, oci8.max_persistent mám nastaveno na 1 to znamená když bych nasatvil na 130 tak by přes jeden php proces mohlo být 130 spojení které by se tvářilo v oracle jako jedno připojeni ? ted to je tuším tak, že každý proces apache vytvoří připojeni do db, což je špatně

do db se přihlašuje přes jeden účet v celé aplikaci, spojení se nehromadí, při novém požadavku se v oracle v pořádku vytvoří a si korektně zavřou

Děkuji Vám za pomoc.
12.11.2015 11:39 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Hmm, máte pravdu http://php.net/manual/en/oci8.configuration.php#ini.oci8.max-persistent je maximální počet připojení pro jeden PHP proces, tedy 1 je správně.

Abyste jedním spojením do databáze obsloužil více http požadavků, to bez connection poolingu nebo aplikační mezivrstvy asi neuděláte.

Celé to nicméně vede k tomu se zamyslit, kolik těch http požadavků vlastně chcete obsloužit - nějaký limit tam stejně bude muset být (limitem zajistíte, že ten systém nepůjde při přetížení do kytek pro vyčerpání ram a překročení dalších limitů operačního systému). Podle plánovaného vytížení je pak potřeba systém navrhnout. Výkon systému nelze přeci garantovat donekonečna.

Pokud skutečně potřebujete mít 1000 klientů v jeden okamžik tak k tomu musí být navrhnuta odpovídající infrastruktura. Přijde mi to hrozně mnoho - v reálu se provede požadavek za řekněme 100ms-200ms a jakmile skončí, může být spojení znova použito. Takže těch 1000 konexí by odpovídalo 5000-10000 požadavkům za sekundu, což je dost frmol. Váš limit 130 by odpovídal 650-1300 za sekundu. Doporučuju prostě změřit, kolik požadavků to vládne při jakém limitu a jak se to chová. Pro měření lze použít třeba ab nebo pro složitější případy jmeter.
-- OldFrog
12.11.2015 12:40 Scendel
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Děkuji za reakci,

asi to nějak nechápu, nebo mám někde špatně nastavený limity, zrovna ted mam takovýto stav:

root@ora-web3:/home/petr# netstat -tanpe|grep 1521 | grep ESTABLISHED |wc -l 100

root@ora-web3:/home/petr# ps -aux|grep apache2 |wc -l 106

to znamená 100 spojení do db a 106 přes apache, je v tom tedy přibližně stejná úměra, tedy 500 spojeni na apache a 500 spojení do db, což už je pro Oracle hodně, je tam plno dalších spojení z jiných aplikaci

přijde mi, že to spojení z php se drží déle, než jak píšete v tom příkladu, v php.ini mám oci8.persistent_timeout = 60

v apachi mám ohledně timeoutu toto:
Timeout 300
KeepAlive On
MaxKeepAliveRequests 300
KeepAliveTimeout 30

a modul prefork mám nastavený takto:


StartServers              3
MinSpareServers           5
MaxSpareServers          10
MaxRequestWorkers        190
MaxConnectionsPerChild   0
takže jestli tomu dobře rozumím, tak mám možnost jen 190 současných připojení, myslel jsem, že když se pustí 3 servery, že se to bude násobit, tedy 3*190

takže to vypadá, že nejsem schopný nastavit apache, aby těch spojení do db dělal méně.

Děkuji za pomoc

12.11.2015 13:14 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Jenže ono tam prostě to jedno spojení do databáze pro každý běžící php skript (v případě varianty bez persistentního spojení) případně pro každý připravený php proces apache (v případě varianty s persistentním spojením) být musí. Použitá technologie nic jiného neumožňuje.

Zároveň obecně u každé aplikace platí, že je nutno počet spojení omezit, jinak tomu dojde dech a upadne to. Proto i vy budete muset klienty omezit, tomu se jednoduše nejde vyhnout.

Takže jde jen o to, na kolik to omezit a kde. A to pak záleží na tom, kolik dalších aplikací tam běží, zda se také připojují do databáze apod. Pokud na serveru běží jen jedna aplikace (= nejjednodužší varianta), pak prostě nastavte MaxClients. Na jakou hodnotu musíte uvážit sám - je to rozhodnutí technické (kolik server a databáze unese) a obchodní (kolika uživatelům jsem to slíbil).

Jinými slovy: Přestaňte na chvíli koukat do konfiguráku a výpisu procesů a zamyslete se! Nad tím, pro koho ta aplikace je, co má dělat, co se stane, když nepoběží, kdy je špička ve využití, proč to vlastně řešíte. Podívejte se do statistik využití v průběhu dne a týdne. Až budete vědět, jak byste to chtěl nastavit (bez ohledu na to, zda to umíte), proberte to se zodpovědným nadřízeným a pak klidně zde.
-- OldFrog
12.11.2015 13:20 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
PS: A můj předchozí výpočet pro 1000 spojení do databáze z tohoto čísla pouze odvodil počet http requestů do aplikace za sekundu (za předpokladu, že bude skript běžet 100-200ms). To jsem počítal proto, abyste měl představu, že 1000 spojení do databáze by představovalo ohromný http provoz. A tedy že ani limit 130 http klientů dost možná reálné uživatele nijak neomezí.
-- OldFrog
12.11.2015 13:35 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
PPS: Apache si drží určitý počet procesů nebo vláken (podle použitého workeru) připravených k akci - i když momentálně neprobíhá žádný http požadavek. A v rámci těchto procesů příp. vláken se drží i ta spojení do databáze - tedy pokud jsou persistentní. To je právě princip té perzistence.

Různé limity na počet procesů, které se vytvoří rovnou po startu apache, na maximální počet procesů atd. pak už jen ovlivňuje, jak se s těmi předpřipravenými procesy nakládá. To je předmětem té konfigurace.
-- OldFrog
12.11.2015 13:50 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
A poslední PS: Konfigurace preforku stručně ručně a česky v několika větách například zde http://www.dasm.cz/clanek/apache-a-jeho-multi-processing-moduly#konfigurace-modelu Takže u preforku skutečně nastavit MaxClients na hodnotu, kolik maximálně chcete spojení do databáze. Pokud je tam víc aplikací, které v apache běží, je to problém, protože a musí se to omezení řešit trochu jinak. Třeba pomocí proxy nebo nějakého modulu, z hlavy teď nevím.
-- OldFrog
12.11.2015 14:22 Scendel
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Děkuji Vám za odpovědi,

moc mi to pomohlo, byl jsem totiž obviněn z toho, že apache server je špatně nakonfigurovám a přetěžuje oracle databazi, která pak kolabuje, ale jak jsem pochopil, tak není technicky možné v mém případě počet spojení do db omezit, řešení je DRCP, ale to by znamelo migraci na Oracle 11, nebo zvýšit limit současných db serveru.

Petr
12.11.2015 14:36 OldFrog {Ondra Nemecek} | skóre: 25 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Jako řešení můžete nabídnout omezení na počet klientů (MaxClients), které se ovšem uplatní v rámci celého Apache. Za nastavení limitů do databáze a nekolabování databáze ručí správce databáze, nikoli správce http serveru. Vy zodpovídáte, že nekolabuje http server.

Vaší správnou reakcí je vyvolat debatu o tom, kolik uživatelů má ta aplikace obsloužit a pak to tak nastavit. Tím může hodnocení vaší kompetence akorát stoupnout :-) DRCP by situaci sice řešit mohl, ale to záleží na důvodech, proč Oracle padá a dalších podrobnostech.

Jinak jsem rád pomohl. Hodně zdaru.
-- OldFrog
12.11.2015 15:12 Ivan
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Dulezite je vedet pod jakym uzivatelem se aplikace hlasi do databaze. Jestli je to genericky aplikacni user anebo ma kazdy uzivatel svoje jmeno/heslo v DB. Pokud mate 190 Workeru a 10 uzivatelu (v DB) tak muzete skoncit az s 1900 otevrenymi konexemi.

Z pohledu databaze je problem, ze limit na pocet konexi se neda zvysit bez restartu. Vyzira to zbytecne pamet na strane DB serveru. Dalsi uzivatele se nemohou prihlasit do DB z jinych aplikaci, protoze nejsou volne konexe. A navic nejsis nefunguje ani monitoring, protoze ani ten se nemuze prihlasit.

Architektura PHP aplikaci v tomhle pripade dost zoufala. Persistentni spojeni do db, bud skutecne drzi TCP konexi do DB, anebo si PHP zapise login a haslo do nejakeho soubory v /tmp a kdyz tu session promennou pouzijete, tak to spojeni napozadi samo vytvori.

Pokud jde o ten timeout, ten se muze uplatnit jen v pripade ze ten worker process nekdo "probudi" spravnym zpusobem. Kdyz worker pracuje, tak nejak jak ten timout zkontrolovat. Neverim, ze by to bylo udelane vice-vlaknove, a ze by nejaky thread tohle kontroloval na pozadi.

Dalsi moznosti jak to omezit je snizit MaxRequestPerChild. Pokud worker umre po (skoro) kazdem kliknuti, tak zadne zbytecne db konexe drzet nebude.

12.11.2015 16:28 Scendel
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
aplikace se hlásí do db pod jedním účtem, když budu reagovat na předchozí příspěvek, tak Oracle právě kolabuje, že mu dochází počet volných připojení, ty jsou vázaný na operační paměť, když dojdou, tak se aplikace nedá používat, dlouhé odezvy, timeouty, apod. přitom web servery o které se starám jsou skoro nevytížené ...

zkusím to sepsat jak jste mi všichni radili, mám aspoň nějaké argumenty, pro svojí obhajobu ...:)

Petr
12.11.2015 18:30 Arnošt Málek | skóre: 16
Rozbalit Rozbalit vše Re: Apache+PHP+Oracle
Já jsem persistentní spojení úpně vypnul a nepoužívám jej. Měl jsem s ním problémy. Dopad na výkonost jsme nezaznamenal.

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.