Kokias užklausas vykdo Jūsų Web serveris?
Kartais prireikia greitai pamatyti kokia web serverio užklausa ar svetainė eikvoja daugiausiai procesoriaus laiko. Tačiau tokios komandos kaip top rodo tik bendrą vaizdą:
Esant dideliam serverio apkrovimui, reikia skubiai nustatyti svetainę, kuri naudoja daugiausiai resursų, tam kad ją būtų galima neutralizuoti ar kitaip išspręsti iškilusią apkrovimo problemą.
Taip, galima būtų pasinaudoti server-stats puslapiu, kurį pateikia Web serveris, tačiau tai varginantis darbas, mat ten neatsispindi procesoriaus apkrovimas. Taigi, mums reikėtų įrankio, aptikti tokiai svetainei iš komandinės eilutė.
Toks būdas yra ir jis telpa į vieną eilutę. Pradėkime ją konstruoti.
Pradėkime nuo to, kaip galima sužinoti kokios svetainės kodą šiuo metu vykdo procesas. Tokia informacija yra /proc sistemoje. Kiekvienas procesas, pagal jo ID numerį, /proc kataloge turi savo katalogą, kur yra saugoma su procesu susijusi informacija. Viena iš to katalogo nuorodų rodo vykdomą katalogą, iš esmės tai, ko mums ir reikia.
ls -l /proc/<PROCESO ID>/cwd
Rezultatas bus eilutė su keliu iki svetainės, kurios kodas šiuo metu vykdomas.
Svetainę pagal proceso ID jau mokame rasti, tačiau tai mažai mus gelbėja, mat kiekvieną kartą visų procesų ID tikrinti negalime, o ir procesai kuriasi ir išnyksta labai greitai. Mums reikalingas automatizuotas būdas.
Antras etapas, tai rasti visų web serverio procesų sąrašą. Tai atliekame su šia komanda:
pidof httpd
Žinodami mums reikalingų procesų ID numerius, galima greitai išgauti ir svetainių pavadinimus, tam mums reikės kiekvieną proceso ID prasukti pro ciklą ir patikrinti kokios svetainės kodą tas procesas vykdo. Kartu išgausite ir kiekvieno proceso procesoriaus sąnaudas. pilna komanda atrodys taip:
for i in `pidof httpd`; do
echo `ps -o pcpu $i` `ls -l /proc/$i/cwd|awk ‘{print $NF}’`|grep -v ‘/$’;
done
| awk ‘{print $2, $3}’
Ją galite sutrumpinti ir įvykdyti vienoje eilutėje. Rezultatas gali atrodyti taip:




Recent Comments