監控系統資源有如下幾個命令:前端
free:觀察內存(memory)使用狀況。shell
uname:查閱系統與核心相關信息。vim
uptime:觀察系統啓動時間與工做負載。緩存
netstat:網絡監控。bash
vmstat:偵測系統資源變化,CPU/內存/磁盤輸入輸出狀態。服務器
free:觀察內存使用狀況。網絡
[root@localhost ~]# free [-b|-k|-m|-g] [-t]
-b:直接輸入free時,顯示的單位是bytes,咱們可使用b(bytes)、m(Mbytes)、k(Kbytes) 及g(Gbytes)來定義顯示單位。部分雲主機供應商可能會優化出一個-h的選項,與ls -h顯示的方式同樣。但系統本來是不提供這樣顯示的方式。ssh
-t:在輸出的最終結果時,顯示物理內存與swap的總量。tcp
顯示目前系統的內存容量:學習
[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 [-asrmpi]
-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:觀察系統啓動時間與工做負載。
[root@localhost ~]# uptime 08:05:08 up 3:10, 2 users, load average: 0.00, 0.00, 0.00
顯示目前系統當前時間、已經開機多長的時間、用戶數、以及一、五、15分鐘的平均負載。
netstat:網絡(network)監控。
netstat -[atunlp]
-a:將目前系統上全部的已經鏈接、監聽、Socket數據都列出來。
-t:列出tcp網絡包的信息。
-u:列出udp網絡包的信息。
-n:以端口(port number)方式來顯示(不以程序的服務名稱)。
-l:列出目前正在監聽(listen)的服務。
-p:列出該網絡服務的進程id(PID)。
[root@localhost ~]# netstat -atp #全部tcp協議的連接,並輸出pid號 [root@localhost ~]# netstat -antp [root@localhost ~]# netstat -lntp
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
防火牆的啓動、狀態查看、關閉!!(建議我的學習研究時關閉)
# service iptables start # service iptables status # service iptables stop # service iptables restart
以上狀態的修改,在服務器重啓前生效。
#永久關閉: chkconfig iptables off #永久開啓: chkconfig iptables on
在服務狀態並無發生改變。服務器重啓後生效,防火牆會恢復到服務器重啓以前的狀態。
vmstat:偵測系統資源變化(必須記住)。
動態的瞭解一下系統資源的運做,CPU/內存/磁盤輸入輸出狀態。
-a:使用inactive/active(活躍與否)取代buffer/cache的內存輸出信息。
-f:開機到目前爲止,系統複製(fork)的進程數。
-s:將一些事件(開機至目前爲止)致使的內存變化狀況列表說明。
-S:後面能夠接單位,讓顯示的數據有單位。例如以K、M展現的形式取代bytes展現。
-d:列出磁盤的讀寫總量統計表。
-p: 後面列出磁盤分區,可顯示該磁盤分區的讀寫總量統計。
統計目前主機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 之後才支持)。
登陸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能不能讓某一個程序在執行的時候在後臺運行呢?
能夠控制與執行命令的bash環境稱爲前臺進程。
在操做系統中自行運行,你沒法使用[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查看當前工做狀態。
-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
將後臺拿到前臺執行:fg(ForeGround)。
命令格式:fg %jobnumber
job number爲任務號碼(數字);%無關緊要。
示例:
fg 1
將任務號爲1的進程調到前臺執行。
[root@localhost ~]# jobs [1]+ Stopped vim anaconda-ks.cfg [2]- Stopped vim install.log
+做用「表示當前的」,若是命令fg後面沒有跟任務號,默認將帶+的進程調到前臺執行。-表示+號對應的進程被調前臺後,「-」對應的進程當即變爲「+」。
讓任務在後臺中變成執行狀態: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 &
終止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