Linux基礎之系統資源監控與任務管理

Linux基礎之系統資源監控與任務管理

1、系統資源監控

監控系統資源有如下幾個命令:前端

free:觀察內存(memory)使用狀況。shell

uname:查閱系統與核心相關信息。vim

uptime:觀察系統啓動時間與工做負載。緩存

netstat:網絡監控。bash

vmstat:偵測系統資源變化,CPU/內存/磁盤輸入輸出狀態。服務器

一、free內存

free:觀察內存使用狀況。網絡

[root@localhost ~]# free [-b|-k|-m|-g] [-t] 

1.選項與參數

-b:直接輸入free時,顯示的單位是bytes,咱們可使用b(bytes)、m(Mbytes)、k(Kbytes) 及g(Gbytes)來定義顯示單位。部分雲主機供應商可能會優化出一個-h的選項,與ls -h顯示的方式同樣。但系統本來是不提供這樣顯示的方式。ssh

-t:在輸出的最終結果時,顯示物理內存與swap的總量。tcp

2.顯示選項釋義

顯示目前系統的內存容量:學習

[root@localhost ~]# free
       total       used      free      shared    buffers     cached
Mem:  1012352   318528     693824     0       23592     113208
-/+ buffers/cache: 181728    830624
Swap:  2031608     0        2031608

Mem一行顯示的是物理內存的量;Swap顯示的是虛擬內存的量。

total是總量、used是已被使用的量、free則是剩餘可用的量、shared共享內存、buffers將寫磁盤的內容、cached已寫磁盤或者已從磁盤讀出的內容。

二、uname系統核心

uname:查閱系統與核心相關信息。

uname [-asrmpi]

1.選項與參數

-a:全部系統相關的信息,包括如下的數據都會被列出來。

-s:系統內核名稱。

-r:內核版本。

-p:CPU的類型,與-m相似,是顯示的是CPU的類型。

-m:本系統的硬件名稱,例如i686或x86_64等。

-i:硬件的平臺(ix86)。

簡單記憶方法:
uname as rpm -ivh
全部系統內核版本cpu系統硬件平臺安裝軟件。

輸出系統的基本信息:

[root@localhost ~]# uname -a
Linux localhost 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

三、uptime系統負載

uptime:觀察系統啓動時間與工做負載。

[root@localhost ~]# uptime
 08:05:08 up  3:10,  2 users,  load average: 0.00, 0.00, 0.00

顯示目前系統當前時間、已經開機多長的時間、用戶數、以及一、五、15分鐘的平均負載。

四、netstat網絡監控

netstat:網絡(network)監控。

1.命令格式

netstat -[atunlp]

2.選項與參數

-a:將目前系統上全部的已經鏈接、監聽、Socket數據都列出來。

-t:列出tcp網絡包的信息。

-u:列出udp網絡包的信息。

-n:以端口(port number)方式來顯示(不以程序的服務名稱)。

-l:列出目前正在監聽(listen)的服務。

-p:列出該網絡服務的進程id(PID)。

3.netstat經常使用的命令

[root@localhost ~]# netstat -atp  #全部tcp協議的連接,並輸出pid號
[root@localhost ~]# netstat -antp
[root@localhost ~]# netstat -lntp

4.顯示選項釋義

Proto:網絡的封包協議,主要分爲TCP與UDP封包。

Recv-Q:接收消息緩存區,遠端進程發送而來,還沒有被當前進程處理 的信息數,單位:字節。

Send-Q:發送消息緩存區,向遠端進程發送,還沒有被其接收的消息數,單位:字節。

Local Address:本地地址:端口號。

Foreign Address:與當前本端網絡地址(IP:port)程進行行通訊的遠程進程的網絡地址(IP:port)(遠程通訊主機)。

State:網絡鏈接狀態,主要有創建(ESTABLISED)及監聽(LISTEN)。

PID/Program name:顯示此服務的PID號碼以及程序的命令名稱。

目前系統上已在監聽的網絡連接以及PID:

[root@localhost ~]# netstat -lntp |head -n 10

5.防火牆

防火牆的啓動、狀態查看、關閉!!(建議我的學習研究時關閉)

# service iptables start
# service iptables status
# service iptables stop
# service iptables restart

以上狀態的修改,在服務器重啓前生效。

#永久關閉:
chkconfig iptables off
#永久開啓:
chkconfig iptables on

在服務狀態並無發生改變。服務器重啓後生效,防火牆會恢復到服務器重啓以前的狀態。

五、vmstat系統資源

vmstat:偵測系統資源變化(必須記住)。

動態的瞭解一下系統資源的運做,CPU/內存/磁盤輸入輸出狀態。

1.選項與參數

-a:使用inactive/active(活躍與否)取代buffer/cache的內存輸出信息。

-f:開機到目前爲止,系統複製(fork)的進程數。

-s:將一些事件(開機至目前爲止)致使的內存變化狀況列表說明。

-S:後面能夠接單位,讓顯示的數據有單位。例如以K、M展現的形式取代bytes展現。

-d:列出磁盤的讀寫總量統計表。

-p: 後面列出磁盤分區,可顯示該磁盤分區的讀寫總量統計。

2.顯示選項釋義

統計目前主機CPU狀態,每秒一次,共計四次:

[root@localhost ~]# vmstat 1 4
procs  -----------memory----------   --swap--  --io---  --system--  -------cpu---------
r b  swpd free   buff  cache     si  so  bi  bo  in  cs   us sy  id  wa  st
0 0  0  690740  25596  113444  0  0   4  1   15  20   0  0  100  0  0
0 0  0  690716  25596  113472  0  0   0  0   36  41   0  0  100  0  0
0 0  0  690716  25596  113472  0  0   0  0   27  35   0  0  100  0  0
0 0  0  690716  25596  113472  0  0   0  0   32  41   0  0  100  0  0

procs(進程字段)
    r:等待運行的進程數量。
    b:不可被喚醒的進程數量。
    這兩個項目越多,表明系統越忙碌(由於系統太忙,因此不少進程就沒法被執行或一直在等待而沒法被喚醒)。

memory(內存字段)

    swpd:虛擬內存被使用的容量。
    free:未被使用的內存容量。
    buff/cache:用於緩衝的內存。

swap(交換分區字段)

重點記憶下si和so。
si:每秒從交換分區寫到內存的數據量大小,由磁盤->內存。之內存爲參照物。
    so:每秒寫入交換分區的內存數據量大小,由內存->磁盤。
    若是si/so的數值太大,表示內存內的數據經常得在磁盤與主存儲器之間傳來傳去,系統效能會不好。

io(磁盤讀寫字段) 
    bi:從塊設備讀入數據的總量(讀磁盤)(每秒kb)。
    bo:塊設備寫入數據的總量(寫磁盤)(每秒kb)。
    若是這部份的值越高,表明系統的I/O很是忙碌。

system(系統字段 )
    in:每秒被中斷的進程次數。
    cs:每秒鐘進行的事件切換次數。
    這兩個數值越大,表明系統與接口設備的通訊很是頻繁。

CPU(cpu字段)
    us:(user)非內核態的(用戶進程)CPU使用狀況。
    sy:(system)內核態所使用(系統進程)的CPU狀況。
    id:(idle)閒置的CPU狀況。
    wa:(wait)等待I/O所耗費的CPU。
st:被虛擬機(virtual machine)所盜用的CPU(2.6.11 之後才支持)。

2、任務管理

登陸bash以後,就會取得一個名爲bash的進程(它有本身的PID)了。在這個環境中所執行的其餘指令,幾乎都是所謂的子進程。

在一個會話終端上:

[root@localhost ~]# ls
… install.log  …
[root@localhost ~]# tail –F  install.log   #啓動一個進程(用來跟蹤日誌文件)

在另一個會話終端上(鏈接同一臺虛擬機):

[root@localhost ~]# pstree –Aup
|-sshd(2928)-+-sshd(3332)---bash(3336)---tail(3460)
        |            `-sshd(3440)---bash(3444)---pstree(3498)

在Windows中咱們常常會執行多個任務,例如打開qq和音樂。那麼在通過幾天的學習後,咱們發現Linux的命令行窗口只能作一個任務,好比咱們用vim編輯1.txt的時候沒法去編輯2.txt (假設說存在)。但咱們又須要執行這麼一個操做的時候怎麼辦?Linux能不能讓某一個程序在執行的時候在後臺運行呢?

一、概念

1.前臺

    能夠控制與執行命令的bash環境稱爲前臺進程。

2.後臺

    在操做系統中自行運行,你沒法使用[ctrl]+c終止,可以使用bg/fg命令操做的任務,能夠經過jobs命令查看後臺執行的任務(非系統進程)。

    能夠經過Ctrl+z將前臺執行的任務放置後臺(放置到後臺,會暫停該任務)。

二、多任務執行

在當前bash執行多個任務,任務後面添加&符號便可將任務放置後臺執行。

命令樣式:cp file1 file2 &

重點在以上的這個「&」符號,他表示將file1這個文件複製爲file2,同時將這個拷貝進程放到後臺執行。也就是說執行這一個命令以後,在這一個終端仍然能夠作其餘的工做。拷貝任務執行完成後,系統將會在終端顯示完成的消息。

舉例來講,咱們在登陸bash後,想要一邊複製文件、一邊進行編譯。那麼就須要任務管理。

Ctrl+z和&有什麼區別:

Ctrl+z 將前臺程序放置後臺——狀態爲暫停。

在執行的命令後面追加「&」——狀態爲後臺運行。

Vim編輯無論用那個方式轉到後臺,都是暫停狀態。

在同一個會話終端上:

[root@localhost ~]# tail -F install.log  &   #啓動一個後臺進程
[1] 3517   #返回該後臺進程的PID
[root@tedu ~]# pstree –Aup
|-sshd(2928)-+-sshd(3332)---bash(3336)-+-pstree(3518)
        |                                      `-tail(3517)
        |            `-sshd(3440)---bash(3444)   #另一個終端進程
[root@localhost  ~]# ps ax | grep tail
     3517 pts/0    S      0:00 tail -f install.log
     3523 pts/0    S+     0:00 grep tail
[root@localhost ~]#kill 3517
    [root@localhost ~]#         (敲回車)
     [1]+  Terminated              tail -f install.log

直接將命令放到後臺執行&,在叧有一個 bash 的環境下,若是想要同時進行多個工做,那麼能夠將某些工做接放到後臺,用戶能夠繼續操做前臺任務。

舉例:

將/etc/備份爲/tmp/etc.tar.gz且不想要等待其完成。

[root@localhost ~]# tar -czPf /tmp/etc.tar.gz /etc & (將/etc目錄壓縮到/tmp/下命名爲etc.tar.gz)
[1] 3581

    當job執行完成以後會顯示Done(敲回車)。

[root@localhost ~]#
[1]+  Done                    tar -czPf /tmp/lib.tar.gz /etc

其中中括號爲job number。

將目前的工做丟到後臺暫停:[ctrl]+z。

[root@localhost ~]# vim anaconda-ks.cfg  #ctrl+z
[1]+  Stopped                 vim anaconda-ks.cfg

說明:

在vim的通常模式下,按下[ctrl]+z,屏幕上會出現[1],表示這是第一個任務。+表明最近一個被放到後臺的任務,且目前在後臺預期會被取用的任務(調用切換到前臺命令時會第一個被調用到)。

Stopped使用[ctrl]+z放到後臺的任務都是暫停狀態 。

[root@localhost ~]# vim install.log   #ctrl+z
[2]+  Stopped                 vim install.log
[root@tedu ~]# pstree –Aup

三、jobs

觀察後臺任務。jobs查看當前工做狀態。

1.選項與參數

-l:除了列出job number與指令串以外,同時列出PID的號碼。

-r:僅列出正在後臺run的任務。

-s:僅列出正在後臺暫停(stop)的任務。

演示:

[root@localhost ~]# jobs  #顯示所有後臺進程(不含PID)
[root@localhost ~]# jobs –l#顯示所有後臺進程(含PID)
[root@localhost ~]# jobs –r
[root@localhost ~]# jobs -s 

2.fg

將後臺拿到前臺執行:fg(ForeGround)。

命令格式:fg %jobnumber

 job number爲任務號碼(數字);%無關緊要。

示例:

fg 1

將任務號爲1的進程調到前臺執行。

[root@localhost ~]# jobs
[1]+  Stopped                 vim anaconda-ks.cfg
[2]-  Stopped                  vim install.log

+做用「表示當前的」,若是命令fg後面沒有跟任務號,默認將帶+的進程調到前臺執行。-表示+號對應的進程被調前臺後,「-」對應的進程當即變爲「+」。

3.bg

讓任務在後臺中變成執行狀態:bg。針對vim能夠改變其前臺調用的優先級。

bg 2執行後臺進程中任務號爲2的進程。

[root@localhost ~]#bg 2
[2]- vim install.log &  
[root@localhost ~]# jobs  -l
[1]+  Stopped                 vim anaconda-ks.cfg
[2]-  Stopped (tty output)   vim install.log

發現任務號2仍然是Stopped的,緣由是vim沒有前端(tty output),因此沒法在後臺running,但此時若是執行fg的話會優先打開2(vim install)。

[root@localhost ~]# tail -f test  &
[root@localhost ~]# jobs
[4]+  Stopped tail -f test&
[root@localhost ~]#bg 4  #jobs: [4]   Running    tail -f test &

4.終止job

終止job只能使用kill命令,來將進程殺掉。

[root@localhost ~]#jobs -l
[2]-  3716 Stopped (tty output)    vim install.log
[3]+  3775 Stopped                 vim anaconda-ks.cfg
[4]   3790 Running                 tail -f test &
[root@localhost ~]#kill  -9  3775  #kill vim進程須要 -9
[root@localhost ~]# jobs  -l
[2]-  3716 Stopped (tty output)    vim install.log
[3]+  3775 Killed                  vim anaconda-ks.cfg
[4]   3790 Running                 tail -f test & 
[root@localhost ~]#kill  3716   
#缺省爲 -15,發現vim進程kill不掉,須要強制執行。
[root@localhost ~]#kill  3790
#普通進程是能夠kill 掉的

jobs –l查看: [4]-  3790 Terminated  tail -f test,稍後該記錄被清掉。

四、脫機及註銷後任務執行

此方式不經常使用。

nohup 可讓你在脫機或註銷後(好比exit退出當前shell),還可以讓工做繼續進行。

nohup [命令與參數] 在當前終端前臺執行。

nohup [命令與參數] & 在後臺執行。

[root@localhost ~]# nohup tail -F test &
[1] 3877
[root@localhost ~]# exit
[root@localhost ~]# ps ax |grep tail
3877 ?        S      0:00 tail -f test

上一篇:Linux基礎之進程

下一篇:Linux基礎之vim

相關文章
相關標籤/搜索