監(jiān)控系統(tǒng)的運行狀態(tài),并且可以按照cpu、內(nèi)存、執(zhí)行時間進行排序。
?
第一行中,03:30:22是當前時間,up 39 min是系統(tǒng)運行的運行了多長時間,1 user指出了當前有幾個用戶登錄到系統(tǒng),load average指的是系統(tǒng)負載,這后面的三個值分別是1分鐘,5分鐘,15分鐘的系統(tǒng)負載平均值。
如果僅僅需要第一行中的信息,可以使用uptime命令。
第二行中,Task指出了當前系統(tǒng)有多少個進程,以及各種狀態(tài)的進程統(tǒng)計信息。
第三行是%Cpu(s),代表了CPU占用比例,其中:
ni是優(yōu)先值(nice value),也就是任務的優(yōu)先值。優(yōu)先值為負數(shù)linux命令,則說明任務有更高的優(yōu)先級,正數(shù)值說明任務有更低的優(yōu)先級,該值為0意味著進程的優(yōu)先級沒有調(diào)整。
最后兩行為內(nèi)存信息,前者Mem為物理內(nèi)存占用信息,后者Swap為交換分區(qū)占用信息。
開啟線程需要占用一定的內(nèi)存空間(默認情況下,主線程占用1m,子線程占用512kb),如果開啟大量的線程,會占用大量的內(nèi)存空間,降低程序的性能。每開一個線程都會造成系統(tǒng)額外的負擔,開啟線程需要占用一定的內(nèi)存空間(默認情況下,每一條線程都會占用 512kb),如果開啟大量的線程,會占用大量的內(nèi)存空間,降低程序的性能。jstat –gccapacity :可以顯示,vm內(nèi)存中三代(young,old,perm)對象的使用和占用大小,如:pgcmn顯示的是最小perm的內(nèi)存使用量,pgcmx顯示的是perm的內(nèi)存最大使用量,pgc是當前新生成的perm內(nèi)存占用量,pc是但前perm內(nèi)存占用量。
最下面是進程的信息區(qū)域:
參考linux top命令詳解
根據(jù)名稱或者其它屬性查詢(發(fā)送信號)進程信息。
pgrep命令根據(jù)提供的條件查詢進程的pid,查詢條件是and方式的,對于同一個選項,使用『,』分隔可以按照or方式查詢。
pgrep -u root sshd # 查詢進程名為sshd,并且屬主是root的進程 pgrep -u root,daemon # 查詢屬主是root或者daemon的進程
pkill 使用與pgrep類似,不過它不是用來查詢進程pid,而是給進程發(fā)送信號,默認會發(fā)送 SIGTERM信號。
例如:
$ pgrep -u root named # 查找named進程的pid $ pkill -HUP syslogd # 告訴syslogd重新讀取配置文件
要查看有哪些信號可用,可以使用kill -l列出所有的信號以及其數(shù)值。
#!/usr/bin/expect set timeout 20 set ip "IP地址" set user "用戶名" set password "密碼" spawn ssh "$user\@$ip" expect "$user@$ip's password:" send "$password\r" interact
參考 6 Expect Script Examples to Expect the Unexpected (With Hello World)
pstack是一個shell腳本,用于打印正在運行的進程的棧跟蹤信息,它實際上是gstack的一個鏈接。
該命令只需要提供一個參數(shù),進程的pid即可。
$ sudo pstack $(pgrep -uroot php-fpm) [sudo] password for guanyy: #0 0x000000380d8e86f3 in __epoll_wait_nocancel () from /lib64/libc.so.6 #1 0x00000000007ec4a4 in fpm_event_epoll_wait () #2 0x00000000007e1517 in fpm_event_loop () #3 0x00000000007dc887 in fpm_run () #4 0x00000000007e3bd8 in main ()