Linux進程管理和性能監控

概述

    監控系統的各方面的性能,保障各類服務的有序運行,是運維工作的重要組成部分,本篇就介紹一些常用的系統監控命令和相關參數的說明

    具體包含以下幾個部分:

        1、進程管理基礎

        2、進程管理類工具(ps、top、htop、kill)

        3、內存監控類工具(vmstat、pmap)

        4、系統監控類工具(glances、dstat)

        

第一章    進程管理基礎概念

    1、進程是什么

        運行中的程序的一個副本,因為程序可能會同時被運行多次,故可理解為一個副本,每個進程都有生命周期

        linux內核存儲進程信息的固定格式,被稱為task struct(任務結構體)

        多個任務的task struct組成的鏈表,被稱為task list(任務列表)

    2、cpu和內存的工作模式(個人總結)

        cpu是分時的:一個進程可占用多少cpu時長,一個cpu在同一時刻只能執行一個任務,CPU自身的寄存器中,存放著正在運行的進程的狀態信息,當該進程分配的時間片到了時候,即使該進程沒有執行完成,也會被調度出去,讓下一個進程放到CPU上去運行,但是對于之前沒有執行完成的進程,如果沒有一種機制保存下來進程執行到哪里的等等的一些相關信息,那么當下一次輪到該進程執行時,又要重新開始執行,這樣是不合理的。為了解決這種問題,就有了保存現場和恢復現場的概念

        保存現場就是當正在運行的進程,CPU運行時間到達之后,將進程運行的狀態等信息,由內核調度存儲到內存中,這就是保存現場

        恢復現場就是之前保存過的進程的運行狀態的信息,當該進程又獲得CPU運行時間時,將保存的狀態信息調度到CPU上,這樣CPU就能根據保存的狀態繼續運行進程,而不是從頭開始運行進程

        內存是分空間的:一個進程可占用多少內存空間,內存分配方式有點類似磁盤,分成很多塊,但內存不叫塊,而是叫頁框(page frame)用于存儲頁面數據,一般一個page的大小為4K。分配的頁框可以有多個,且可以不連續。

        進程需要用到內存數據的時候,怎么去找內存中不連續的數據?

            因為數據在實際內存中可以不連續,也就是離散的,故一般情況下,內核會虛擬一個內存空間面向進程,進程不需要直接與實際的物理存儲的內存打交道,只需與內核虛擬出來的內存打交道,內核虛擬出來的內存的大小,與計算機平臺的位數有關系,一般32位系統上,單個進程虛擬出來的內存大小為4G,1G給內核使用,3G給該進程使用;64位系統上,單個進程虛擬出來的內存大小為4G個4G,內核虛擬出來的內存空間叫做線性地址空間,內核虛擬出來的內存對進程而言是連續,且獨占的。這樣,進程讀寫內存數據時就認為自己讀取的是一個連續的地址空間,且是獨占的,這段虛擬出來的空間中,只有真正被使用的部分,內核才會在物理內存上分配空間進行存儲

        swap分區:為了防止過多的進程將實際物理內存占滿導致程序無法運行,從而有了swap交換分區的概念,swap分區實際是用來臨時存放內存中暫時用不到的頁面數據。置換時,通常采用LRU算法(最近最少使用)將最近最少用到的數據暫存在交換分區中

        一次磁盤IO分為兩段進行,第一段是將數據從磁盤拿到內存中內核空間,第二段時將內核空間的數據復制一份放到用戶空間

    3、線程相關概念

        線程:是一個進程內部的多個執行流,一個執行流就叫一個線程

        一個進程只有一個執行流,也可以有線程,這種模式就叫單進程單線程模型

        一個進程有多個執行流,就叫單進程多線程模型

        如果一個進程有多個執行流,也就是有多個線程,但是如果只有1個CPU,那么也多線程也沒有任何意義,因為一個cpu在同一時刻只能同時執行一個任務

        同一個進程內部的多個線程,可以共享內存空間。比如web服務,如果是單進程模型,一個進程相應一個用戶請求,如果100個用戶請求的都是index.html頁面,那么在內存上就需要為每個進程存放都存放一個index.html的數據,這樣就造成了內存浪費,但是如果是采用單進程多線程模式,這樣利用一個線程相應一個用戶請求,這樣就只需要為這個進程在內存上存儲一份index.html的數據,然后多個線程共享這段數據,這樣就大大節約了內存的空間

        Linux原生對線程的支持性不是特別好

        一個進程的數據部分分為指令和數據,程序在執行時,內存中的數據也分指令數據和實際的數據,其中指令數據和部分的實際數據,是不能被交換到交換分區上的,稱之為常駐內存集,而有些數據是可以被交換到交換分區上的,稱之為虛擬內存集

    4、Linux上進程創建模型

        進程創建:

            init進程:初始化進程,后續的所有用戶空間進程管理者(所有進程的父進程)

            其他進程:除了init進程之外,所有進程都由父進程創建,父進程利用fork()系統調用生成,每個進程都是由父進程fork()自身而來,會clone()自身的數據給子進程

            當父進程創建子進程時,子進程和父進程使用的是同一段內存空間;一旦子進程需要對該段內存空間的數據進行修改時,就會復制該段內存空間的數據到另外一段內存空間,子進程就指向了該段新的內存空間

            這種機制叫CoW(寫時復制),如果子進程不對數據進程修改,跟父進程使用的內存空間都是同一個,但是一旦子進程要修改數據,就復制一份數據到另一塊內存供子進程單獨使用,而從此之后,子進程就一直使用新的內存空間了

        進程的終止:子進程完成一定的任務之后,釋放掉自己占用的資源,然后父進程對子進程進行回收

    5、進程的優先級:

        0-139:

            1-99:實時優先級

            100-139:用戶可調度的優先級(數字越小,優先級越高)

            nice值:-20到19分別對應100-139,進程初始時nice默認都為0,普通用戶只能調低自己的優先級,也就是加大自己的nice值,而管理員用戶可以任意指定

        修改進程優先級:nice、renice

            可調整的區間為100-139

        通過調整nice值可以調整進程的優先級:

        nice值的范圍為-20到19,分別對應進程優先級的100-139

        進程啟動時的默認nice值都為0,故其默認優先級為120

        普通用戶:只能調大nice值,也就是降低優先級,不能低于0

        管理員:可以任意調整nice值-20到19

        怎么調整優先級:

            對于尚未啟動的程序:

                nice -n 數字 COMMAND

                表示啟動程序時,以指定的數字作為其nice值

            對于已經啟動的進程:

                renice 數字  PID

                表示對指定的PID進程調整其nice值為指定數字

        blob.png

        blob.png     

    6、進程隊列

        Linux內核為了能夠快速的實現這些優先級不同的進程的調度,將待運行的進程按照對應的優先級分成了140個運行隊列,每個優先級相同的進程為同一個隊列,這樣,內核進行調度時,不需要遍歷整個隊列,而是按照優先級從高到低,取隊列的第一個進程進行調度

        同時也有140個過期隊列,就是將上面運行隊列中,調度過的進程,在為其分配的CPU時間片的時間內尚未運行完成,就放到了過期隊列,當同優先級的運行隊列中的進程都被調度完成后,就會重新調度過期隊列,此時過期隊列就變成了運行隊列

    7、進程類型:

        守護進程:daemon,跟終端無關,由內核在系統引導過程中啟動的進程

        用戶前臺進程:用戶通過終端啟動的進程,跟終端相關

        注意:也可把前臺啟動的進程收網后臺,以守護模式運行

    8、進程的狀態:

        運行態:running,進程正在運行中

        就緒態:ready,可以運行但尚未被運行

        睡眠態:sleeping

                可中斷睡眠:interruptible,調度到CPU上可立即運行起來

                不可中斷睡眠:uninterruptible  通常是指被IO阻塞的進程,等待IO滿足之前無法繼續運行

        僵死態:zombie,找不到歸屬,父進程沒有回收該進程,父進程就掛了

        停止態:stopped  暫停于內存中,不可被調度并運行

    9、進程間通信機制(IPC: Inter Process Communication)

        同一主機上
            通過發送信號(通過kill命令):signal
            共享內存shm: shared memory
            semophore 信號量,一種計數器
        不同主機上:
            rpc: remote procedure call(NFS就是基于這種機制的)
            套接字socket: IP和端口號

    10、Linux系統狀態的查看及管理工具: 

        pstree, ps, pidof,pgrep, top, htop, glance, pmap, vmstat, dstat, kill,pkill, job, bg, fg, nohup

第二章    進程管理類工具(ps、top、htop、kill)

    1、ps命令(ps、pgrep、pidof)

        ps命令:顯示系統當前進程的運行情況,實際是將/proc/目錄下的各個進程的相關信息轉換為我們易讀的模式展現出來

        選項與參數:

            -A  所有的進程都顯示出來,與-e具有同樣的效果

            a  與終端無關的所有進程

            u  以用戶為中心顯示與用戶相關的進程信息

            x  通常與a一起使用,可列出較完整的信息

            輸出格式定義:

                l  列出詳細的信息

                j  工作的格式

                -f  完整格式列表,做一個更為完整的輸出

                o 屬性選項顯示定制的信息:                  

                    psr  當前進程運行的CPU編號(四顆CPU就是0、1、2、3)

                    pri  當前進程的優先級

                    ni   當前進程的nce值(-20,19),nice值越低,優先級越高

                    pid  進程號

                    command  發起進程的命令

                    state  進程狀態

                    %cpu   占用CPU的百分比

                    %mem   占用內存的百分比

                    tty    占用的終端

                    euser  進程的有效用戶

                    ruser  進程的實際用戶

                        有效用戶和實際用戶可用于驗證設置了SUID權限的二進制程序文件運行時,有效用戶為進程文件的屬主用戶,實際用戶為運行程序文件的用戶

        常用的組合方式:

            ps -ef  以完整的信息顯示所有進程的信息

            ps aux  

            ps axo

    ps aux的顯示出來的參數的意義

    [root@localhost ~]# ps aux    
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1  19352  1548 ?        Ss   Sep05   0:01 /sbin/i
    root          2  0.0  0.0      0     0 ?        S    Sep05   0:00 [kthre]
    root          3  0.0  0.0      0     0 ?        S    Sep05   0:00 [migra]
    root          4  0.0  0.0      0     0 ?        S    Sep05   0:00 [ksoft]
    root          5  0.0  0.0      0     0 ?        S    Sep05   0:00 [stopp]
    root          6  0.0  0.0      0     0 ?        S    Sep05   0:00 [watch]
    root          7  0.0  0.0      0     0 ?        S    Sep05   0:00 [migra]
    
    ——————————————————————————————————————
    USER:進程的發起者
    PID:進程號
    %CPU:進程占用掉的CPU資源的比例
    %MEM:進程所占用的物理內存百分比
    VSZ:進程使用掉的虛擬內存的大小,也就是內核虛擬出來的給該進程的線性地址空間的大小,
            假如分配給其1000k,或許實際并沒有數據占用,單位為kb
    RSS:進程占用的固定物理內存的大小,實際占用的內存的大小,常駐內存集,也就是不能交換到swap分區上的數據的大小,單位為kb
        一個進程的數據部分分為指令和數據,程序在執行時,內存中的數據也分指令數據和實際的數據,
        其中指令數據和部分的實際數據,是不能被交換到交換分區上的,稱之為常駐內存集,而有些數
        據是可以被交換到交換分區上的,稱之為虛擬內存集
    TTY:進程在哪個終端運行
    STAT:進程目前的狀態
        各狀態的值代表的意義
            R  運行狀態
    	S  可中斷睡眠態
    	D  不可中斷睡眠態
    	Z  僵死態
    	T  停止態
        有的進程在進程狀態之后還會有其他字母,其分別代表的含義為:
    	s  seesion leader 會話領導者,主進程
    	N  低優先級進程
    	<  高優先級進程
    	l  多線程進程(小寫的L)
    	+  前臺進程,占據著某終端
    START:進程被觸發的時間
    TIME:進程實際使用cpu的時間
    COMMAND:觸發此進程的命令

    ps -ef顯示出來的結果代表的意義

    [root@localhost ~]# ps -ef    
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 Sep05 ?        00:00:01 /sbin/init
    root          2      0  0 Sep05 ?        00:00:00 [kthreadd]
    root          3      2  0 Sep05 ?        00:00:00 [migration/0]
    root          4      2  0 Sep05 ?        00:00:00 [ksoftirqd/0]
    root          5      2  0 Sep05 ?        00:00:00 [stopper/0]
    root          6      2  0 Sep05 ?        00:00:00 [watchdog/0]
    root          7      2  0 Sep05 ?        00:00:00 [migration/1]
    root          8      2  0 Sep05 ?        00:00:00 [stopper/1]
    root          9      2  0 Sep05 ?        00:00:00 [ksoftirqd/1]
    
    ——————————————————————————————————————
    UID:進程發起者的UID
    PID:進程號
    PPID:進程的父進程ID號
    C:CPU利用率,使用時間
    STIME:進程的啟動時間,就是指從什么時候啟動的進程
    TTY:登錄者的終端位置,遠程則顯示pts/N 本地則顯示ttyN,?代表是系統進程
    TIME:進程實際花費CPU的運行時間,不是系統時間
    CMD:觸發此進程的命令

   

    pgrep命令:(基于ps aux顯示出來的結果過濾)

        語法:pgrep [OPTIONS] “PATTERN”

        選項:

            -u uid: effective user,生效者
            -U uid: real user,真正發起運行命令者
            -t terminal: 與指定終端相關的進程
            -l: 顯示進程名
            -a: 顯示完整格式的進程名
            -P pid: 顯示指定進程的子進程

            -G GID|GROUPNAME  僅顯示以指定用戶組身份運行的進程(只指定該選項只會顯示出一列以該組身份運行的PID,配合-l選項使用,可顯示進程的PID和進程名)

        blob.png

        

    pidof命令:根據進程名,取其PID(基于ps aux顯示出來的結果過濾,只顯示指定進程發起命令的PID)

        blob.png 

    2、top命令      

        top命令:

        語法:top [OPTIONS]

        選項:

            -d 數字  指定刷新時間間隔

            -n 數字  顯示多少次

            -b   以批次顯示top的刷新,要和-n 數字  一起使用,指定要顯示多少批次

        進入top命令顯示界面下常用的交互式的子命令:

            M鍵:可以按內存占用百分比大小排序

            P鍵:可以按CPU占用百分比大小排序,默認就是此項

            T鍵:可以按累計占用CPU時長大小排序

            q鍵:退出top交互式界面

            k鍵:可kill某個進程,進入交互式殺死某個PID進程

            s鍵:可指定刷新時間間隔,默認是3秒刷新一次

            W鍵:將結果保存到/root/.toprc文件中

            l鍵:是否顯示第一分欄的負載信息

            t鍵:是否顯示第一分欄的CPU信息

            m鍵:是否顯示定義芬蘭的內存相關信息

    top命令顯示出來的內容的各個參數代表的意義

    [root@localhost ~]# top -n 1    
    top - 01:44:06 up 10:15,  2 users,  load average: 0.05, 0.04, 0.05
    Tasks: 144 total,   1 running, 143 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   1004136k total,   295800k used,   708336k free,    26872k buffers
    Swap:  1023996k total,        0k used,  1023996k free,   166232k cached

   PID USER      PR  NI  VIRT   RES   SHR  S   %CPU   %MEM    TIME+   COMMAND                                                                                       
  3700 root      20   0 15028  1152   836  R    2.0    0.1   0:00.01  top                                                                                            
     1 root      20   0 19352  1548  1228  S    0.0    0.2   0:01.55  init                                                                                
     2 root      20   0     0     0     0  S    0.0    0.0   0:00.04  kthreadd                                                                                        
     
 —————————————————————————————————————————
    top - 01:44:06 up 10:15,  2 users,  load average: 0.05, 0.04, 0.05
    分別表示:系統當前時間;持續多長時間;當前有多少個用戶;
    平均負載1、5、15分鐘的平均負載,是指cpu上等待運行的隊列長度的負載,一般不會超過1
    如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。 
    如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題
    如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了
    不想顯示改行,就按l(小寫的L)鍵
    
    利用uptime命令,顯示出來的結果就是該行的結果
    
    Tasks: 144 total,   1 running, 143 sleeping,   0 stopped,   0 zombie
    分別表示:總共的進程數,正在運行進程數,睡眠狀態進程數,停止狀態進程數,僵尸狀態進程數
    
    Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    分別表示cpu的占用時長百分比:
    us-用戶空間占用百分比;
    sy-內核空間占用百分比;
    ni-調整nice值之后的進程占用的百分比;
    id-空閑百分比;wa-等待I/O完成的進程占用的百分比(該值大,代表硬盤速度慢);
    hi-為了處理硬件中斷占用的百分比;
    si-為了處理軟中斷占用的百分比;
    st-被偷走的百分比,例如啟動虛擬化后,虛擬化占用的cpu在主機看來就是被偷走的
    如果有多個CPU,顯示的時候按1可以列出每顆CPU的占用情況,不想顯示CPU相關信息,就按t鍵
    
    Mem:   1004136k total,   295800k used,   708336k free,    26872k buffers
    分別表示內存占用的相關信息:總內存大??;已用內存大小,空閑內存大小,緩沖大小
    (往硬盤上寫時,硬盤速度慢,故先放到內存緩沖,再往硬盤上寫;
        或許多小數據集中放在內存中,然后集中的往硬盤寫,降低磁盤IO次數)  
    不想顯示內存和swap的信息可以按m鍵
    
    Swap:  1023996k total,        0k used,  1023996k free,   166232k cached  
    表示swap交換分區的占用情況:總大小,已用大小,空閑大小,
    cache緩存大小,實際還是物理內存的cache,放在swap這里顯示而已
        (硬盤上的數據往內存里存,方便CPU調用時的讀取速率)
    
    PID:進程號
    USER:進程發起者
    PR:進程優先級,越小優先級越高
    NI:進程的nice值,越小優先級越高
    VIRT:進程需要的虛擬內存大小,而非實際使用的虛擬內存大小
    RES:進程當前使用的內存大小,不包括swap
    SHR:進程與其他進程共享的內存大小,可以通過RES-SHR來計算進程所占用的物理內存大小
    S:進程的狀態
    %CPU:CPU的占用率
    %MEM:內存的占用率
    TIME+:CPU使用時間的累加

    3、htop命令:top命令的升級版,功能比top強大很多,默認沒安裝,只在epel yum源中有安裝包,支持鼠標操作

        進入htop顯示界面后的子命令:

            u  顯示指定用戶的進程

            H  顯示或隱藏用戶的進程

            K  顯示或隱藏系統內核的進程

            M  可以按內存占用百分比大小排序

            P  可以按CPU占用百分比大小排序,默認就是此項

            T  可以按累計占用CPU時長大小排序

            l  顯示進程所打開的文件列表

            s  顯示進程執行的系統調用

            a  綁定進程到指定的CPU上,如果不指定則由內核調度

            數字  快速將光標定位至指定的PID進程上

            F1  顯示幫助信息

            F2  進入交互式選定第一分欄中要顯示的字段和字段內容的顯示格式

            F3  搜索指定的內容

            F4  過濾只顯示指定的內容

            F5  以tree方式顯示進程的樹形關系

            F6  指定排序的字段

    blob.png   

    4、kill命令

        進程間通信(IPC):

            同一主機進程間通信的幾種機制:

                1、signal  信號

                2、semaphore  旗語

                3、share memory  共享內存

            不同主機上的進程間通信機制:

                1、跨主機的進程間通信  RPC (遠程過程調用)

                2、socket 基于套接字通信,套接字就是IP和端口的集合

        kill命令:能夠實現想起他進程發送信號,可使用的信號類型:(可用kill -l查看 或man 7 signal查看)

            常用的信號有:

                1信號 SIGHUP :通知程序重讀配置文件,而不必重啟程序來實現重讀配置文件

                2信號 SIGINT :中斷信號,Ctrl+c就是發送此信號給進程

                9信號 SIGKILL :殺死進程,直接殺死該進程

                15信號 SIGTERM :終止進程,讓進程釋放資源后殺死該進程

        向進程發信號的方法:

            kill -SIGNAL PID    kill 不指定發送哪個信號,則默認發送15信號

            SIGNAL可以是:

                數字代號,如1,9,15等

                信號名稱,如SIGHUP等

                簡寫的信號名稱,如HUP等

            如:kill -15 3132  對PID為3132的進程發送15號信號

    blob.png

        killall -SIGNAL 進程名

            可以一次性對所有進程名為指定名稱的進程發送信號

            如:

            killall -15 httpd

    blob.png 

    

第三章    內存監控類工具(vmstat、pmap)

    1、vmstat命令

        vmstat語法:

           直接運行vmstat  顯示當前的系統相關的使用信息,顯示完成自動退出

           vmstat 數字  表示指定多少秒鐘刷新一次,連續顯示系統相關的信息,不會自動退出

           vmstat 數字1  數字2   表示指定數字1的秒數刷新一次,連續顯示數字2指定的次數后自動退出

           vmstat -s  顯示內存使用的摘要統計信息

    vmstat命令顯示內容詳解

    [root@localhost ~]# vmstat 2 5    
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us sy id  wa st
     1  0      0 707328  27584 166352    0    0     1     0   13    4   0  0 100  0  0	
     0  0      0 707296  27584 166352    0    0     0     0   44   17   0  0 100  0  0	
     0  0      0 707264  27584 166352    0    0     0     0   40   15   0  0 100  0  0	
     0  0      0 707264  27584 166352    0    0     0     0   40   21   0  0 100  0  0	
     0  0      0 707264  27584 166352    0    0     0     0   53   16   0  0 100  0  0	
    [root@localhost ~]# 
    
——————————————————————————————————————————————————
    procs:進程隊列
        r:運行或等待CPU時間片的進程的個數(數值大,說明CPU不夠用,或者跑的進程過多)
        b:不可中斷睡眠的進程,被阻塞的進程隊列長度(通常為等待IO完成的應用)
        
    memory:內存的相關信息
        swpd:從物理內存交換到swap上的數據量大?。ㄓ兄祷蛘咧荡?,說明物理內存不夠用)
        free:未使用的物理內存大小
        buff:緩沖空間大小,通常與緩存寫操作相關
        cache:緩存空間大小,通常與緩存讀操作相關
        
    swap:swap分區的相關信息
        si:swap in  從swap交換進內存的數據速率,通常是速率,kb/s
        so:swap out  從內存交換至swap的數據速率,通常是速率,kb/s
        
    io:跟磁盤IO相關的信息
        bi:block in 從塊設備讀入內存的數據量,通常是速率,kb/s
        bo:block out  從內存讀出保存到塊設備的數據量,通常是速率,kb/s
        
    system:跟系統相關的信息
        in:中斷發生速率,也就是每秒鐘產生的中斷次數
        cs:context switch  上下文切換,也就是進程切換的速率,也就是每秒鐘切換的次數
        
    cpu:跟cpu相關的信息(與top中的cpu的幾個指標類似)
        us:用戶空間占用的cpu的百分比
        sy:系統內核空間占用的cpu的百分比
        id:空閑的cpu百分比
        wa:等待IO完成所消耗的cpu百分比
        st:被偷走的cpu百分比(虛擬機偷走)

    2、pmap命令:顯示指定PID進程所占用的內存地址空間的使用情況

        如:pmap 10  顯示PID為10的進程所占用的內存的地址空間的情況

        也可以用過cat /proc/進程號/maps 來查看,pmap實際就是抽取這個文件里面的信息進行顯示的

    1.png

第四章    系統監控類工具(glances、dstat)

    1、glances工具,系統上默認沒有安裝,需要通過EPEL源進行安裝,功能強大,支持C/S架構模式進行遠程查看

        內建命令:跟htop類似,可通過h進行查看

        命令的常用選項:

            -b  以byte為單位顯示網上數據速率

            -d  關閉磁盤I/O模塊

            -m  關閉mount模塊

            -n  關閉network模塊

            -t 數字  設定刷新時間間隔

            -1  每個cpu的相關數據單獨顯示

            -o 指定將顯示結果輸出到文件中,可支持html格式或csv格式,一般與-f選項一起使用,指定輸出的路徑,如:

                glances -o {HTML|CSV} -f /PATH/TO/SOMEDIR  

                只要glances不退出,輸出的文件就會一直更新

        11.png

        C/S模式下運行glances命令:

            服務模式:

                glances -s -B IPADDR  -B指明本機所監聽的地址

            客戶端模式:

                glances -c IPADDR  IPADDR為遠程服務器的地址

        

    2、dstat命令,非常強大的工具,對系統各類資源進行統計,可以實時的監控cpu、磁盤、網絡、IO、內存等使用情況

        語法:dstat [-afv] [options..] [delay [count]]

        選項:

            -c:顯示CPU系統占用,用戶占用,空閑,等待,中斷,軟件中斷等信息。

            -C:當有多個CPU時候,此參數可按需分別顯示cpu狀態,

                    例:-C 0,1 是顯示cpu0和cpu1的信息。

            -d:顯示磁盤讀寫數據大小。

            -D sda,sdb,…total:顯示指定磁盤的使用情況

            -n:顯示網絡狀態。

            -N eth1,total:有多塊網卡時,指定要顯示的網卡。

            -l:顯示系統負載情況。

            -m:顯示內存使用情況。

            -g:顯示內存頁面使用情況,顯示的是速率數據。

            -p:顯示進程相關統計數據狀態。

            -s:顯示swap交換分區使用情況。

            -S:類似D/N。

            -r:顯示I/O請求相關情況。

            -y:系統狀態。

            –ipc:顯示ipc進程間通信的相關數據,消息隊列,信號,旗語等信息。

            –tcp  顯示tcp相關統計數據

            –udp  顯示udp相關統計數據

            –socket:用來顯示tcp udp端口狀態。

            –top-cpu  顯示最占用CPU的進程

            –top-mem  顯示最占用內存的進程

            –top-io  顯示最占用I/O的進程

            –top-latency  顯示延遲最大的進程

            -a:此為默認選項,等同于-cdngy。

            -v:等同于 -pmgdsc -D total。

            –output 文件:此選項也比較有用,可以把狀態信息以csv的格式重定向到指定的文件中,以便日后查看。

                例:

                dstat –output /root/dstat.csv & 此時讓程序默默的在后臺運行并把結果輸出到/root/dstat.csv文件中

    dstat1.png

    dstat2.png    

    dstat3.png

    dstat4.png

    dstat5.png

    dstat6.png

    dstat7.png

原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/44050

(1)
M20-1倪文超M20-1倪文超
上一篇 2016-09-07
下一篇 2016-09-07

相關推薦

  • 正則

    Edit 正則 概述: 正則表達式,Regular Expression,縮寫regex、regexp、RE 正則表達式是文本處理極為重要的技術,用它可以對字符串按照某種規則進行檢索、替換 1970年,Unix之父ken Thompson將正則表達式引入到Unix中文本編輯器ed和grep命令中,由此正則表達式普及開來 1980年后,perl語言對Henry…

    Linux干貨 2017-11-06
  • Linux運維不想早死的方法 一

    Linux運維不想早死的方法 一 為了提高工作效率,減少工作時間,愛惜生命,遠離輻射;務必做好以下幾點: 1,一定用快捷鍵         這里簡單的說下幾個常用的快捷按鍵。 Ctrl + l     清屏,相當于clear命令。 Ctrl…

    Linux干貨 2017-03-26
  • 程序包的編譯安裝

    程序包的編譯安裝 之所以需要安裝編譯程序包,是為了能及時更新程序包,制作好的rpm包,版本一般都有點老了,所以編譯安裝是必報的,而且我們可以自己定義安裝路徑,想卸載直接刪除就KO了; 在centos7.3環境下安裝apache http服務: 1.首先獲取最新的apache源碼包下載到/root目錄下; 2.檢查安裝環境,沒有就安裝環境:   記住…

    Linux干貨 2017-03-09
  • 22期第十二周課堂練習

    1、請描述一次完整的http請求處理過程; (1)建立和處理連接:接收請求或者拒絕請求; (2)接收請求:接收來自于網絡上的主機請求報文中對某特定的資源的一次請求的過程; (3)處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息 (4)訪問資源:獲取請求報文中請求的資源 (5)構建響應報文; (6)發送響應報文; (7)記錄日志; 2、h…

    Linux干貨 2016-12-26
  • shell腳本基礎

    1、編程基礎     程序:指令+數據   程序編程風格:                         過程式:以指令為中心,數據服務于指令         &nbs…

    2017-04-20
  • 推薦-LVM

    LVM LVM Linux應用 1.LVM簡介 LVM:Logical Volume Manager,邏輯卷管理器。LVM利用Linux內核的device-mapper模塊來實現存儲系統的虛擬化(系統分區獨立于底層硬件)。通過LVM,你可以實現存儲空間的抽象化并在上面建立虛擬分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增刪分…

    2016-04-11
欧美性久久久久