Sziasztok!
Azt szeretném, hogy ha egy linux szerver load-ja elér egy bizonyos szintet, akkor az éppen aktuálisan futó, legjobban a processzort gyötrő folyamatokat egy fájlba írja bele.
A gondom a következővel akadt.
Ezt a parancsot használom, ez kiírja a 20 leginkább terhelő folyamatot csökkenő sorrendben elvileg jól gyakorlatilag azonban mégsem jól.
ps -eo pcpu,pid,user,args | sort -r -k1 | head -20
A gond azzal van, hogy a "pcpu" oszlop tartalmaz tizedes vesszőt is, de a sorba rendezés ezt figyelmen kívül hagyja.
Egy látványos eredménye ennek:
----------------------------------------------------------------------------------------------------------------------
%CPU PID USER COMMAND
2.0 29941 root /usr/local/ispmgr/sbin/eximquota
15.0 5261 1392 /usr/bin/php5-cgi php
1.4 4484 www-data /usr/sbin/apache2 -k start
1.4 3991 www-data /usr/sbin/apache2 -k start
110 2264 mysql /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
1.0 5258 1258 pop3
0.8 3928 dovecot imap-login
0.8 17636 www-data nginx: worker process
0.6 2734 www-data /usr/sbin/apache2 -k start
0.5 32130 www-data /usr/sbin/apache2 -k start
0.5 32127 www-data /usr/sbin/apache2 -k start
0.5 17638 www-data nginx: worker process
0.4 3914 root /usr/local/ispmgr/bin/ispmgr
0.4 28651 root /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
0.4 17639 www-data nginx: worker process
0.4 1568 www-data /usr/sbin/apache2 -k start
0.3 29872 www-data /usr/sbin/apache2 -k start
0.3 24499 www-data /usr/sbin/apache2 -k start
0.3 1565 www-data /usr/sbin/apache2 -k start
----------------------------------------------------------------------------------------------------------------------
Látszólag jó minden, de a legfelső sor 2%, az alatta levő 15%, a mysql 110%-a az 1.4% alá kerül.
Hogyan tudnám azt megoldani, hogy a sorba rendezés tényleg csökkenő sorban legyen, korrektül lekezelve ezt a tizedesvessző problémát?
Életképes megoldás lehetne a csonkolás is, a tizedesvessző utáni érték annyira nem érdekelne.
Van valami ötletetek?
Természetesen érdekel a lista más módszerrel történő előállítása is, nem ragaszkodom ehhez. A lényeg, hogy lássam, mely folyamatok terhelik leginkább a gépet, ezen folyamatokat pedig terhelés függvényében csökkenve, egymás alatt jelenítse meg.
- 5646 megtekintés
Hozzászólások
sort -n ?
- A hozzászóláshoz be kell jelentkezni
A sortnak adj egy -n kapcsolót is.
snq- :(
- A hozzászóláshoz be kell jelentkezni
Köszönöm a válaszaitokat, kipróbáltam, jobb lett, de nem az igazi :(
Ez lett a parancs:
ps -eo pcpu,pid,user,args | sort -k 1 -n -r | head -20
És ez lett az eredmény:
--------------------------------------------------------------------------------------------
18.0 25726 1317 /usr/bin/php5-cgi php
105 2264 mysql /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
2.5 15832 root /usr/local/ispmgr/sbin/eximquota
0.7 25601 www-data /usr/sbin/apache2 -k start
0.4 3914 root /usr/local/ispmgr/bin/ispmgr
0.4 28651 root /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
0.4 27907 globy php /var/www/cron.php
0.4 22928 www-data /usr/sbin/apache2 -k start
0.4 21955 www-data /usr/sbin/apache2 -k start
0.4 21875 www-data /usr/sbin/apache2 -k start
0.4 19720 www-data /usr/sbin/apache2 -k start
0.4 18024 www-data /usr/sbin/apache2 -k start
0.3 29587 globy php /var/www/cron.php
0.3 25251 www-data /usr/sbin/apache2 -k start
0.3 24664 www-data /usr/sbin/apache2 -k start
0.3 22762 www-data /usr/sbin/apache2 -k start
0.3 21940 www-data /usr/sbin/apache2 -k start
0.3 21939 www-data /usr/sbin/apache2 -k start
0.3 14410 www-data nginx: worker process
0.3 1226 bind /usr/sbin/named -u bind
--------------------------------------------------------------------------------------------
Látszik az első két során, hogy a 18.0 még magasabbra kerül, mint a 105. Valószínűleg azért, mert nem 105.0 módon jeleníti meg.
És további érdekesség, hogy eltűnt a -n kapcsoló hatására a fejléc is, mely nélküle megjelenik, ahogy fentebb is látszik, ez:
%CPU PID USER COMMAND
Nagyon várnék bármilyen további javaslatot! :)
- A hozzászóláshoz be kell jelentkezni
Gondolom, a LANG be van állítva magyarra.
# szkripteleje
export LANG=C
... és tudni fogja a sort, hogy a tizedespont az tizedespont.
- A hozzászóláshoz be kell jelentkezni
Igazából a -n után már csak (jelenleg) a mysql okozza a gondot a 100% feletti értékeivel. Ha top-ban nézem a folyamatokat, ott is 100 feletti értéket kap a mysql ezekben a pillanatokban, viszont a htop-ot használva nem. Ott több szálon futó mysql-t látok, egyszerre 4-5 szálon, melyek együttesen kiadják a száz feletti értéket, de egyenként sosem.
Talán ez lenne a megoldás, hogy a ps ne "vonja össze", hanem külön mutassa, ahogyan a htop is teszi, minden mysql szálnak saját, külön PID-je van. De nem jövök rá, hogyan tudnám így megjeleníttetni :(
- A hozzászóláshoz be kell jelentkezni
A szálakhoz a -L szükséges, és ha kell a fejléc is, akkor kétszer futtatod egymás után:
----------------------------------------------↓-------------------------------------------------
$ ps -eo pcpu,pid,user,args | head -1 && ps -eLo pcpu,pid,user,args | sort -k 1 -n -r | head -10
%CPU PID USER COMMAND
6.4 1017 mysql /usr/sbin/mysqld
2.5 1017 mysql /usr/sbin/mysqld
2.4 1017 mysql /usr/sbin/mysqld
2.4 1017 mysql /usr/sbin/mysqld
2.1 1017 mysql /usr/sbin/mysqld
2.0 1017 mysql /usr/sbin/mysqld
2.0 1017 mysql /usr/sbin/mysqld
1.9 1017 mysql /usr/sbin/mysqld
1.9 1017 mysql /usr/sbin/mysqld
1.8 1017 mysql /usr/sbin/mysqld
Szabi
- A hozzászóláshoz be kell jelentkezni
Köszönöm mindenkinek a válaszokat, Szabi megoldása lett a nyerő.
- A hozzászóláshoz be kell jelentkezni
Van egy olyan hogy mysql slow query log. Ennek nézz utána, milyen paraméterekkel lehet módosítani mit logoljon.
- A hozzászóláshoz be kell jelentkezni