DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Web Hosting, web serveri i operativni sistemi (http://www.devprotalk.com/forumdisplay.php?f=11)
-   -   Zastoj dok PHP skripta radi (http://www.devprotalk.com/showthread.php?t=8635)

srdjevic 01. 04. 2010. 20:14

Zastoj dok PHP skripta radi
 
Naleteo sam svega par puta na ovu situaciju, prilično retko, i nisam uspeo da izguglam ništa smisleno na ovu temu, pa reko' možda neko može da uleti klizeći ovde....

Imam server (klasika lamp platforma) koji, dok jedna skripta trči (bilo da je cron ili webpage), zakuca server i ostale stranice na sajtu servira po 2 minute... :1027:

Pretpostavljam da je nešto na Linux/Apache nivou, da treba negde reći serveru da alocira te resurse malo bolje... :1007:

Mora da kažem nešto čoveku, riba me sve u 16 zato što mu moj (prilično zahtevan) skript zakucava server, pita me kako da popravi... :lost:

Ako iko ima neku ideju gde se ovo podešava, bio bih mu/joj krajnje zahvalan.

MorenoArdohain 01. 04. 2010. 20:26

Meni ovo lici na problem sa zakucavanjem baze (pogotovu ako ti se strane generisu dinamicki). Da pogodim, script radi nesto sa mysql bazom? :)

Ako to nije slucaj, mozes pokrenuti script sa "nice" komandom, mada bih ja radije ustanovio sto script zauzima toliko resursa (memory leak? etc).

srdjevic 01. 04. 2010. 20:52

I meni je na to mirisalo odmah... Prvo je koristio externu bazu (na G-linku u internoj mreži), sad je baza na localhost-u... opet isto.

Skripta radi svašta: drma ogroman broj upita na bazu, šalje gomilu mejlova, povlači koješta preko HTTPa... Skripta jeste zahtevna, to stoji. Ali na svim ostalim serverima radi lepo malo sporije, a ostatak serva fercera kako treba. Ovo sam video kod njih par samo... :1089:

Nažalost, skripta verovatno neće trpeti nikakve korenite izmene, s obzirom na to da se pokazala da radi kako treba na ogromnom broju instalacija... :(

robi-bobi 01. 04. 2010. 21:20

dva najbrza hak-a:
- spomenuti nice
- sleep() :)

srdjevic 01. 04. 2010. 21:28

Već radi i sleep(). :)

Samo, kod sleep-a je problem što onda skripta ne radi ništa. A čim prođe sleep....opet zakuca :(

zlukic 01. 04. 2010. 22:45

Pogledaj kolika je potrosnja memorije. Ako radi sa bazom onda guta svu raspolozivu memoriju. Jedno od rjesenja je dodavanje memorije. Pogledaj kolika je zauzetost procesora.

Pregledaj upite za bazu i da li su pravilno indeksirani. Ako mozes neke upite preciznije odredi ili limitiraj sa nekim uslovom.

Pregledaj bazu i vidi da li mozes neke podatke koji se cesto upisuju odvojiti u posebnu tabelu, a kasnije u odredjenim razmacima prebacivati u tabelu sa koje citas.

Pogledaj koliko je dopusteno maksimalno istovremenih konekcija ka bazi i koliko se u odredjenom trenutku ostvaruje. Ako je malo slobodno povecaj i preko 500, sa lakocom MySQL to izdrzava.

Ovo su bez preciznih podatak neki scenariji i rjesenja mogucih uzroka.

srdjevic 02. 04. 2010. 00:43

Pokušao sam već sve to... Upiti su optimizovani odavno, a i (napomenuo sam, mislim, ranije) da se isto ponašao i kada je baza na drugom serveru. Tada bi valjda vukao njegovu memoriju, ne web serverovu, ne? :(

Pogledaću ovo za broj konekcija ka bazi ali mislim da ima dovoljno... Skripta pravi 2 konekcije.



U principu, pitanje nije uopšte gde/da li skripta škripi (zato sam stavio ovo u hosting, a ne php forum). Pitanje je kako reći serveru da čak i ako ima neku ultra-mega-giga skriptu koja mora da trči, kako da ostavi dovoljno mesta da se sva deca igraju?
Zna li neko neki setting koji bi Apache-u (ili u Linuxu, za procese?) rekao da ostavi dovoljno ostalima, a ne da na jedan proces da svu svoju energiju?

Ovo sam iskopao do sad: http://httpd.apache.org/docs/1.3/mod...html#rlimitcpu

Ono što sam primetio u ovoj instanci je da ima MPM modul uključen, prefork i worker mu se pominju u conf-u... sad babram na tu stranu.

ivanhoe 02. 04. 2010. 03:09

prvo utvrdi sta se zapravo desava kad pokrenes skriptu.... sta kaze top, sta kaze free -m jel swapuje, ako se skripta pokrece preko apacha sta kaze /etc/init.d/httpd fullstatus (sa ukljucenim extended informacijama), takodje u mysqlu sta kaze SHOW FULL PROCESSLIST

Bitno je da vidis koji resurs je problematican (cpu, memorija, konekcije, file descriptori..), i da li je uopste u tome problem, ili mozda sam server nije ispravan, disk previse spor, etc. Moze da bude sve i svasta, ako kazes da se desava samo na tom jednom serveru. Proveri velicine bafera datih mysql-u, i podesavanje za memory limit php-u

mangia 02. 04. 2010. 04:07

Možda komšijin mali traži Severinu u tom momentu...

dao si informacija toliko da pitanje izgleda ovako

"Interesuje me ****** jer nisam ***** a kada ***** nema ***** osim ***** ulaz *****. Šta vi mislite o tome?

srdjevic 02. 04. 2010. 06:39

Već sam napomenuo ranije, imam klijenta (srećom u mojoj vremenskoj zoni i još tehnički potkovan, pa konačno imam nekoga od koga mogu da tražim bilo šta smisleno) koji ima vrlo vrlo redak i specifičan problem koji očigledno leži u nekom podešenju servera. Dobio sam FTP pristup folderu skripte i uvid u conf fajlove apache-a, php-a i mysql-a. Tražio sam još koješta, čekam odgovor. Ovde ne mogu da kačim ništa preterano specifično:

- Ubuntu 5.7
- Apache 2.2.8
- PHP 5.2.4
- MySQL 5.0.26 na lokalnoj mašini, dedicated Ubuntu box sa 8GB RAM-a, od toga 4GB za MySQL kad je bio externi (ne znam verziju tamo)



Javiću kad dobijem neke smislene odgovore koji isključuju bilo šta gore navedeno. Ako odgovori uopšte, ne javlja se od popodne... Nekad (ovakvi klijenti) kad nađu rešenje jednostavno ne odgovore više na tiket. I tako mi je probio timeframe koji mogu da odvojim za njega, refundiraću ga svakako ako ne radi, samo mi ćef da znam zašto koči... pitah ovde samo zato što me je zagolicala tema, iako je suludo i ovo vreme koje sam do sad potrošio na jedan problem koji se dešava u tako niskom broju slučajeva.

Rekoh, možda neko zna kako/gde reći serveru da ne dozvoli jednom procesu da upucava ceo serv...

Izvinjavam se ako nekome ne prija način na koji sam postavio pitanje - nisam bio u prilici sa posla da pišem previše i da se cimam oko ovoga. Sad sam kući, sad opušteno. :1042:

U svakom slučaju imamo sad ovde neke vrlo korisne savete, fino popisane. Thanks svima!

misk0 02. 04. 2010. 09:38

Ako se to ne desava pri svakom pokretanju te skripte moguce je da postoji i neka druga skripta na tom serveru i da se pokretanje ove dvije ili bar njihovih dijelova poklopi i na taj nacin ubije server.

Mislim da je najvaznije ovo sto je rekao ivanhoe - utvrditi prvo sta je problem tj gdje je blokada pa onda dalje.

srdjevic 02. 04. 2010. 19:07

Do sad utvrđeno:
- ni jedan proces nije preko 3% u vreme rada skripte
- nema sporih upita. kaže da odradi rafal u par sekundi, pa ćuti 15-20 sekundi, u rafalu su svi ok
- ssh mu radi na oba serva (web i db) bez ikakvih problema dok skripta tera, samo web interfejs je zakucan
- sar/top pokazuje idle 80-90%
- request na TXT fajl na serveru (ne ide kroz PHP) se prevlači sporije u toku rada skripte


nadam se da nisam propustio nešto... tražio sam gomilu stvari, dobio sam (naravno) samo par šturih odgovora...

Skripta mu ima 4+ fsockopena otvorena u isto vreme, a možda i više, vrlo je moguće da je samo zagušio mrežu svetski... :(

bluesman 02. 04. 2010. 19:28

Citat:

Originalno napisao srdjevic (Napišite 82801)
Skripta mu ima 4+ fsockopena otvorena u isto vreme, a možda i više, vrlo je moguće da je samo zagušio mrežu svetski... :(

Po meni tu je problem. Koliki ti je timeout za konekciju?

kodi 02. 04. 2010. 20:21

a koji je status apache-a dok skripta radi?
jel ta gomila http upita ide na isti host ili negde u svet?

agvozden 02. 04. 2010. 20:36

Mislim da je problem kompleksniji od odgovora tipa "učini to i to..."
Verovatno imaš više stvari koje utiču na performanse.
Da li ti radi samo jedan takav kron u isto vreme?
Kakvo je zauzeće memorije. Možeš li to da meriš i ukoliko preveliš određeni nivo da isključiš skriptu. Pokretanjem sledećeg krona bi trebalo da nastavi gde je prethodna stala.

Ukoliko se kucaju i ostale skripte - veb strane mogao bi u tim skriptama da ograničiš vreme trajanja na najniže moguće - recimo 4 sec. Ukoliko počnu da pucaju bolje je da imaš manji broj korisnika bez odgovora, nego ceo server koji neće moći da se oporavi dugo vremena posle...

srdjevic 03. 04. 2010. 03:30

@bluesman:
I fsockopen i stream_set_timeout imaju 15. Izgleda da u tom (socketi) zecu čuči grm. :1016:

@kodi:
Ma nije, ceo server je u tip top kondiciji dok skripta tera... Namestio ga čovek da tera bez ikakvih pauza, ova jedna što sam je koristio za test cepa oko 2h, svaki dan po jednom. :)
Upiti sa web serva su uglavnom u internoj mreži.

@agvozden:
Nije kron, web skripta je u pitanju, i Apache je u igri... :1089:
Dobra je ideja za ostale skraćivanje rada ostalim skriptama.


Do kraja je ispalo, dakle, da server sasvim lepo radi sve, da ima minimalan iowait (isključio čovek mogućnost grešaka po hardu odmah), nema pikova ni u memoriji ni na procesoru, ma ništa... :(

Ali zato ima otvorena 4 soketa na internu mrežu, plus 2, je li, za mysql (isto interno), plus po koji tu i tamo kad radi get fajlova iz sveta. Na jedan od ova četiri uvek tera podatke praktično bez ikakvih pauza (sem što odradi provere i upite). Radi po 100 u cugu pre promene soketa. Čoveku je u interesu da radi posao što pre, da ne čeka ništa...

Naravno, taj komp u mreži na čiji soket baca isto to šalje dalje, u svet... Sve u svemu, začin C. Kad se sve sabere i oduzme, tona traffica. :(

Javiću ako dobijem još neki zanimljiv info. Sutra ću se verovatno igrati još malo oko njega, pingovati ga dok radi, njakati ga malo, i tako...
Hvala svima još jedared. :1016:

srdjevic 23. 04. 2010. 16:51

klijent odgovorio danas. kaže rešio je problem. :)

fsockopen-i su koristili istu internet konekciju kao i web server, nisu koristili posebnu kao što je trebalo, pa mu gušili protok ka sajtu, logično.

Ispade ništa specijalno. :( S druge strane, bitno da je rešeno. :)

Hvala svima još jednom na pomoći.

misk0 23. 04. 2010. 23:22

Super da si rijesio problem.
Pade mi na pamet da biste mozda mogli napraviti kakav logging sistem za to proceduru tipa 'zavrsio prvi dio', 'zavrsio drugi dio' .... tako da lakse mozes lokaliozvati problematican dio.

srdjevic 12. 05. 2010. 16:25

uh -- sorry, tek sad videh ovo, promace mi... :(

pa imamo mi logging sistem, ali on radi sve (samo) ono sto mozes iz PHP skripte... skripta je radila fsockopen() i tu se njen posao/nadleznost zavrsava... to kako radi fsockopen (tj koji socket ce koristiti) je na nivou iznad, na to ne mozemo da uticemo... osim da imamo neki poseban proces koji radi exece i perverzije i guli sistemske logove, ili nesto, da bi ocitao da li je van PHPa sve u redu... :(

ako neko ima neki predlog/resenje za ovo, a da je u PHPu, please do tell! :)))


Vreme je GMT +2. Trenutno vreme je 19:04.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.