Puncte:0

Cum monitorizează fișierele deschise și cum îi distruge PID-ul prin scriptul shell?

drapel fr

Sistemul meu primește o eroare care spune „Prea multe fișiere deschise”. Am investigat această eroare și am constatat că /usr/bin/uwsgi a creat socket-uri(?) mai mult de 1020. Dacă creează mai mult de 1020, cred că apare eroarea de mai sus.

Deci, ceea ce încerc să fac este să rulez un script shell care monitorizează numărul de fișiere deschise și, dacă depășește mai mult de 1000, să-și opresc PID-ul pentru a rezolva această eroare în această etapă.

#uwsgimonitor.sh
#!/bin/bash

#filename=/usr/bin/uwsgi

filename=/usr/bin/uwsgi
Cnt= lsof | awk '/uwsgi/ {printează $1,$2}' | uniq -c | sortare -r | cap -1 | awk '{print $1}'
PROCESS_ID = lsof | awk '/uwsgi/ {printează $1,$2}' | uniq -c | sortare -r | cap -1 | awk „{printează $2}”

dacă [ $Cnt gt 1000 ]
atunci
    echo "S-a găsit că numărul de socket deschise depășește $Cnt."
    ucide -9 $PROCESS_ID
altfel
    ecou „” #nimic de făcut.
fi

În crontab, am adăugat această linie, dar se pare că nu ucide PID-ul la care mă refeream.

* * * * * sh /home/root/scripts/uwsgimonitor.sh

Ce îmi lipsește?

Multumesc anticipat.

drapel cn
Acest lucru nu vă va rezolva cu adevărat problema - trebuie să vedeți cum să configurați UWSGI/serverul dvs. web pentru a limita numărul de socketuri deschise sau să permiteți utilizatorului pe care îl rulează să deschidă mai multe fișiere prin ulimits.conf.
deokyong song avatar
drapel fr
Ar fi trebuit să menționez fundalul. Sunt un tester de automatizare și această problemă pe pistă a fost rezolvată. Între timp, folosesc doar acest script shell pentru a preveni apariția oricărui mesaj de eroare. Este doar o soluție temporară pentru a-mi testa aplicația.
Puncte:0
drapel fr

Pentru cei care vor cum a mers situația mea.

#!/bin/bash


count=$(lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $1}')
PROCESS_ID=$(lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $2}')
expectLimit=1000

echo "socket deschis:$count"
echo „pid:$PROCESS_ID”

dacă [[ ${count} -gt ${expectLimit} ]]
atunci
        echo „Găsit uwsgi depășește limita :${expectLimit}”
        ucide -9 $PROCESS_ID
altfel
        ecou „” #nimic de făcut.
fi

Acesta funcționează pentru mine. Mulțumiri.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.