Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Gde ovde curi? Bash curi :-)

[es] :: Skript jezici :: Gde ovde curi? Bash curi :-)

[ Pregleda: 1203 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Gde ovde curi? Bash curi :-)04.04.2023. u 14:01 - pre 12 meseci
Ovo moje autorsko delo curi, posle svake linije negde nešto ostaje nedovršeno i sve više zauzima procesor, posle desetak procesorskih minuta (što je mnogo i mnogo prosleđenih linija) već tera procesor na 100%, pa se mora restartovati.

Ali gde i šta curi?


Code:

function mqpipe()
{
       (
                while :;
                do
                        read msg;
                        (
                                rnd=$(($RANDOM%22767+10000))
                                echo "["$(date '+%y%m%d-%H%M%S')"][1:$rnd] $msg " >> $log;
                                start=$(date '+%s')
                                msg2="$(echo $msg|sed 's/ /\&m\=/')"
                                wget -q --no-check-certificate -t 1 -T 10 "${url}?t=$msg2" -O - &&\
                                echo "["$(date '+%y%m%d-%H%M%S')"][2:$rnd] "$(($(date '+%s')-$start)) >> $log ||\
                                echo "["$(date '+%y%m%d-%H%M%S')"][2:$rnd] "$(($(date '+%s')-$start))"-" >> $log
                        )&
                done
        )
}
mosquitto_sub -h $host -p $port -u $user -P $pass -v -t \# | mqpipe



[Ovu poruku je menjao DjGoran dana 04.04.2023. u 17:04 GMT+1]
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Gde ovde curi? Bash curi :-)04.04.2023. u 14:50 - pre 12 meseci
Ispaljuješ gomilu background procesa i praviš zombije, jer nigde nemaš wait komandu da budeš siguran da su child background procesi završili.

Stavi negde pre "done" wait komandu, recimo na svakih 10 poziva wget, da bi se ono u zagradi regularno ubilo.
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Gde ovde curi? Bash curi :-)04.04.2023. u 15:32 - pre 12 meseci
Ali ne vidim zombi procese u listi procesa. Vide se samo aktivni child procesi i nikada ih nije više od dvadesetak.
Svakako da nešto negde ne štima, ali to se nikada ne vidi u listi procesa. Samo se vidi da glavni proces (dotična zadnja linija) sve više procesora zauzima.

EDIT: Nije taj proces. Treći proces po redu (drugi child) zauzima sve više memorije, a taj proces je onaj koji ispaljuje četvrti nivo procesa (treći child) koji šalje pojedinačne podatke preko web-a i koji bi po mom shvatanju trebao da se sam gasi kada se završi.

To je ta while:; do ... done petlja.

[Ovu poruku je menjao DjGoran dana 04.04.2023. u 17:17 GMT+1]
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Gde ovde curi? Bash curi :-)04.04.2023. u 16:19 - pre 12 meseci
Izgleda da ja ne razumem šta se tačno dešava na tom zadnjem nivou.

Ako se dođe do "done" pre nego što se neki child proces unutar ( ... )& završi, na koji način to ostavlja posledice?
Zar ne bi trebalo da se child proces koji je unutar ( ... )& završi sam od sebe kada obavi posao, bez obzira na to u kakvom je statusu parent proces?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Gde ovde curi? Bash curi :-)04.04.2023. u 16:58 - pre 12 meseci
Child proces koji se završi, a parent ne obradi signal postaje zombi. TO su ti živi mrtvaci, mrtvi, a ne mogu da se ubiju zato što je parent još uvek živ.

wait rešava problem, pa zombi može da se upokoji.
Uostalom ne razumem ni šta pokušavaš da postigneš.
Proces koji puca u pipe je sinhronizovan sa onim koji čita iz pipe. Ako je pipe pun, proces koji piše u pipe se zaustavlja dok se pipe ne isprazni.
Ako je pipe prazan, proces koji čita čeka na sadržaj.

Cela ta konstrukcija sa background pisanjem u log je onda suvišna...
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Gde ovde curi? Bash curi :-)04.04.2023. u 18:39 - pre 12 meseci
Ne treba da se zaustavi. Primljeni podaci se šalju i obrađuju nezavisno i bitno je da zastoj u jednom podatku (iz bilo kojih razloga) ne zaustavi ostale koji idu iza.
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Gde ovde curi? Bash curi :-)04.04.2023. u 18:52 - pre 12 meseci
Citat:
djoka_l:
Child proces koji se završi, a parent ne obradi signal postaje zombi. TO su ti živi mrtvaci, mrtvi, a ne mogu da se ubiju zato što je parent još uvek živ.


Zar ne bi trebali da se vide u listi procesa kao [defunct] odnosno sa statusom Z?
Samo na bljesak se pojavi defunct i proces zatim nestane sa liste.
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Gde ovde curi? Bash curi :-)05.04.2023. u 23:53 - pre 12 meseci
Rešio sam. Ali mi i dalje nije jasno.

Wait ne bi došao u obzir je petlja mora da funkcionoše bez zastoja, to je poenta. A statusi subprocesa nisu bitni.
Defunct subprocesi se ne zadržavaju u listi procesa, i ne vidim šta se tu zapravo dešava. Ali pretpostavio sam sada da se nakon kraja procesa zadržava neki status u nekoj tabeli, koji čeka da ga roditeljski proces pročita. Pošto je rasla i zauzetost memorije a ne samo procesora.

To sam rešio dodavanjem 'disown' komande u petnaestoj liniji iza )& kako bi se subproces otkačio od roditeljskog procesa.
Za sada izgleda da je problem rešen, ništa se ne popunjava, procesor kulira, i sve deluje da je to rešenje.

Bilo bi dobro ako ima nekog ko zna tačno o čemu se radi, šta je usporavalo sve to, pa da naučim nešto konkretno.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Gde ovde curi? Bash curi :-)06.04.2023. u 07:58 - pre 12 meseci
Pa rekao sam ti da su ti zombi procesi problem.
Oni obično ne bi trebalo da troše CPU, ali ostaju u memoriji.
Ne znam šta ti je potrošilo procesor, možda je počeo da puni swap, pa je to uzelo procesorsko vreme.

Toliko mnogo puta sam video da oni koji pokušavaju da naprave paralelizam ne vode računa o resursima, kao da računar ima beskonačno memorije, šta god.
Ja sam ti predložio da ne dozvoliš više od 10 procesa, ali si ti uporan da dokažeš da to tako ne radi.

Ja imam jednu rutinu koja kompajlira 8500 modula. Pazim da nikada nemam više od 10 kompajlera. Realno, mogao bih da poteram i 100 instanci kompajlera, ali nisam sam na tom serveru.
 
Odgovor na temu

[es] :: Skript jezici :: Gde ovde curi? Bash curi :-)

[ Pregleda: 1203 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.