1) top命令的功能:top命令是Linux下經常使用的性能分析工具,可以實時顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器。node
2) 使用top命令列出系統狀態時,系統默認每5秒刷新一下屏幕上的顯示結果。linux
top - 14:44:15 up 6:41, 1 user, load average: 0.02, 0.03, 0.05windows
Tasks: 330 total, 2 running, 328 sleeping, 0 stopped, 0 zombiecentos
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st數組
KiB Mem : 1867636 total, 1284776 free, 86760 used, 496100 buff/cache數據結構
KiB Swap: 0 total, 0 free, 0 used. 1622824 avail Mem函數
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 工具
2859 root 20 0 157816 2412 1552 R 0.7 0.1 0:00.22 top 性能
276 root 20 0 0 0 0 S 0.3 0.0 0:32.77 kworker/0:1 測試
14:44:15 |
當前時間 |
up 6:41 |
系統運行時間,格式爲時:分 |
1 user |
當前登陸用戶數 |
load average: 0.02, 0.03, 0.05 |
系統負載。 三個數值分別爲 1分鐘、5分鐘、15分鐘前到如今的平均值。 |
Tasks: 29 total |
進程總數 |
1 running |
正在運行的進程數 |
328 sleeping |
睡眠的進程數 |
0 stopped |
中止的進程數 |
0 zombie |
殭屍進程數 |
Cpu(s): 0.0% us |
用戶空間佔用CPU百分比 |
0.3% sy |
內核空間佔用CPU百分比 |
0.0% ni |
用戶進程空間內改變過優先級的進程佔用CPU百分比 |
99.7% id |
空閒CPU百分比 |
0.0% wa |
等待輸入輸出的CPU時間百分比 |
0.0% hi |
硬件中斷佔用CPU時間的百分比 |
0.0% si |
軟件中斷佔用CPU時間的百分比 |
KiB Mem : 1867636 total, 1284776 free, 86760 used, 496100 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1622824 avail Mem
列名 |
含義 |
PID |
進程id |
PPID |
父進程id |
RUSER |
Real user name |
UID |
進程全部者的用戶id |
USER |
進程全部者的用戶名 |
GROUP |
進程全部者的組名 |
TTY |
啓動進程的終端名。不是從終端啓動的進程則顯示爲 ? |
PR |
優先級 |
NI |
nice值。負值表示高優先級,正值表示低優先級 |
P |
最後使用的CPU,僅在多CPU環境下有意義 |
%CPU |
上次更新到如今的CPU時間佔用百分比 |
TIME |
進程使用的CPU時間總計,單位秒 |
TIME+ |
進程使用的CPU時間總計,單位1/100秒 |
%MEM |
進程使用的物理內存百分比 |
VIRT |
進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES |
SWAP |
進程使用的虛擬內存中,被換出的大小,單位kb。 |
RES |
進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
CODE |
可執行代碼佔用的物理內存大小,單位kb |
DATA |
可執行代碼之外的部分(數據段+棧)佔用的物理內存大小,單位kb |
SHR |
共享內存大小,單位kb |
nFLT |
頁面錯誤次數 |
nDRT |
最後一次寫入到如今,被修改過的頁面數。 |
S |
進程狀態。 D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/中止 Z=殭屍進程 |
COMMAND |
命令名/命令行 |
WCHAN |
若該進程在睡眠,則顯示睡眠中的系統函數名 |
Flags |
任務標誌,參考 sched.h |
cpu是用來幹活的,按照這個層面去理解,每一個碼農都是一個cpu
上一天班的時間是8個小時,而碼農敲代碼的時間爲2個小時,2/8=0.25 ,25%就是碼農在一天的時間內的利用率(正常狀況,cpu利用率<70%)
公司在一分鐘內爲某個碼農安排了3個任務,而1分鐘內該碼農能作6個任務,那麼該碼農一分鐘內的負載爲0.5
若是公司在5分鐘內爲某個碼農安排了100個任務,而5分鐘內該碼農只能作50個任務,那麼該碼農5分鐘內的負載爲2.0,即超負荷運轉
cpu負載<=1:能正常應付
cpu負載>1:超負荷運轉
若是有4核,至關於將100個任務交給4個碼農去幹,若是每一個碼農的負載都是100%,那麼總體的cpu負載達到4.0則是很正常的現象
多核cpu, load average 應該 <= cpu核數 * 0.7
其實之因此要給出3個值,就是但願咱們能結合起來看。或者說但願展現一個動態的圖表式的數據,好比最近一分鐘顯示負載120%。而最近5分鐘和15分鐘顯示負載爲50%。可能你不用太過擔憂。可是若是你發現系統的負載一直維持在120%以上,就必需要提升硬件配置了。
cpu利用率和cpu負載太高,都是很差的現象,可是也有可能出現,低利用率,高負載的狀況:
爲一個碼農分配了100個項目,毫無疑問,該碼農的負載是很高的,可是碼農在具體去作一個項目時,可能會碰到須要購買機器,或者查詢資料等耗費時間的問題,真正動手寫代碼的時間可能很短,而這段時間纔是碼農真正爲公司幹活的時間,若是每一個項目都有相似這種問題,那麼100個項目加到一塊兒,碼農真正工做的時間也不會太多,這就形成了低利用率。
1. 進程掛起是自身緣由,遇到I/O阻塞,便要讓出CPU讓其餘進程去執行,這樣保證CPU一直在工做
2. 與進程無關,是操做系統層面,可能會由於一個進程佔用時間過多,或者優先級等緣由,而調用其餘的進程去使用CPU。
於是一個進程有三種狀態
命令的功能:顯示內存的使用狀態。(下圖centos6中查看效果,用二維數組表明FO即free output)
1 2 3 4 5 6
1 total used free shared buffers cached
2 Mem: 24677460 23276064 1401396 0 870540 12084008
3 -/+ buffers/cache: 10321516 14355944
4 Swap: 25151484 224188 24927296
物理內存FO[2][1]=24677460KB
物理內存被使用的內存FO[2][2]=23276064KB
能夠用內存F[2][3]=1401396KB
等式:FO[2][1] = FO[2][2] + FO[2][3]
共享內存F[2][4]=0,表示幾個進程共享的內存(數據共享)
F[2][5]=870540表示已經分配可是還未使用的buffers大小
F[2][6]=12084008表示已經分配可是還未使用的buffers大小
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use.
也就是說buffer是用於存放要輸出到disk(塊設備)的數據的,而cache是存放從disk上讀出的數據。這兩者是爲了提升IO性能的,並由OS管理。
Linux和其餘成熟的操做系統(例如windows),爲了提升IO read的性能,老是要多cache一些數據,這也就是爲何FO[2][6](cached memory)比較大,而FO[2][3]比較小的緣由。作一個簡單的測試:
1)釋放掉被系統cache佔用的數據;
echo 3>/proc/sys/vm/drop_caches
2)讀一個大文件,並記錄時間;
3)關閉該文件;
4)重讀這個大文件,並記錄時間;
第二次讀應該比第一次快不少。
free輸出的第二行是從一個應用程序的角度看系統內存的使用狀況。
由於被系統cache和buffer佔用的內存能夠被快速回收,因此一般FO[3][3]比FO[2][3]會大不少。
這裏還用兩個等式:
free命令的全部輸出值都是從/proc/meminfo中讀出的。
顯示內存的使用狀態。(下面均爲centos7中查看效果)
http://www.linuxatemyram.com/提到使用free命令查看Linux系統使用內存時,used一項會把當前cache的大小也會加進去,這樣會形成free這一欄顯示的內存特別少:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 869
Swap: 2047 6 2041
但是實際上,cache根據應用程序的須要是能夠回收利用的,所以free這一欄並不能真實地表現有多少「可使用」的內存。實際系統可用內存應該以available數據爲準。
linuxatemyram所提到的free命令也許是比較老的版本,RHEL 7.2,Ubuntu 16.04和Arch Linux這3個Linux發行版,均沒有出現used包含cache的狀況:
$ free -m
total used free shared buff/cache available
Mem: 64325 47437 3150 1860 13737 14373
另外,從man free命令中也能夠獲得,目前計算used的值是要減掉free和buff/cache的:
used Used memory (calculated as total – free – buffers – cache)
可使用-w命令行選項獲得buff和cache各自使用的數量:
$ free -wm
total used free shared buffers cache available
Mem: 64325 48287 2476 1859 1430 12131 13524
須要注意的是,free表示的是當前徹底沒有被程序使用的內存;而cache在有須要時,是能夠被釋放出來以供其它進程使用的(固然,並非全部cache均可以釋放,好比當前被用做ramfs的內存)。而available才真正代表系統目前能夠提供給應用程序使用的內存。/proc/meminfo從3.14內核版本開始提供MemAvailable的值;在2.6.27~3.14版本之間,是free程序本身計算available的值;早於2.6.27版本,available的值則同free同樣。
(詳見linux系統管理P363)
1) 進程的定義:進程是程序的一次動態執行。
2) 守護進程的定義:守護進程是在後臺運行並提供系統服務的一些進程。
3) 父進程、子進程的定義:當一個進程建立另外一個進程時,第1個進程被稱爲新進程的父進程,而新進程被稱爲子進程。
4) ps命令的功能:用來顯示當前進程的狀態。
ps –aux 顯示全部的與用戶相關的完整信息
centos7默認沒有pstree,須要yum -y install psmisc
1) pstree命令的功能:以樹狀圖顯示程序。
2) pstree命令的用法舉例:
例如:列出PID爲4729的進程的進程狀態樹的命令:
pstree 4729
3) kill命令的功能:把一個信號發送給一個或多個進程。默認發送終止信號。
4) 應用kill命令終止進程
例如:終止PID爲3852的進程的命令:
kill 3852
5) 應用kill -9命令殺死進程
例如:殺死PID爲3906的進程的命令:
kill -9 3906
1. pgrep命令的功能:經過名稱或其餘屬性查找進程
例如:查找名爲firefox的進程的命令爲:
pgrep firefox
pkill命令的功能:經過名稱或其餘屬性發信號給進程
例如:殺死名爲firefox的進程的命令爲:
pkill firefox
(詳見linux系統管理P297)
1) 在Linux系統中,每一個設備都被當初一個文件來對待。
2) 各類設備在Linux中的文件名
(詳見linux系統管理P301)
1) 爲何要進行硬盤分區:
a) 更容易管理和控制系統,由於相關的文件和目錄都放在一個分區中。
b) 系統效率更高。
c) 能夠限制用戶使用硬盤的份額(磁盤空間的大小)。
d) 更容易備份和恢復。
2) 硬盤的邏輯結構:一個硬盤邏輯上能夠被劃分紅塊、磁道、磁柱和分區。
3) 塊的定義:塊是盤片上尋址(訪問)的最小單位,一個塊能夠存儲必定字節的數據。
4) 磁道的定義:磁道是由一系列頭尾相連的塊組成的圓圈。
5) 磁柱的定義:磁柱是由一疊磁道,由在相同半徑上每一個盤面的磁道所組成。
6) 分區的定義:分區是由一組相鄰的磁柱所組成。
(詳見linux系統管理P303)
1) 硬盤分區的分類:硬盤的分區能夠分爲主分區、擴展分區和邏輯分區。
2) 主分區的數量:在一個硬盤上最多能夠劃分出4個主分區。
3) Linux操做系統的內核支持每一個硬盤上的分區數量仍是有必定限制的,Linux內核在每一個硬盤上能夠最多支持:
a) 在SCSI硬盤上劃分15個分區(Partitions)。
b) 在IDE硬盤上劃分63個分區(Partitions)。
(詳見linux系統管理P394)
1) fdisk命令的功能:建立磁盤分區。
2) fdisk命令列表中經常使用的命令:
a) d:刪除一個(已經存在的)分區,其中d是delete的第1個字母。
b) l:列出(已經存在的)分區的類型,其中l是list的第1個字母。
c) m:列出fdisk中使用的全部命令,其中m是menu的第1個字母。
d) n:添加一個新的分區,其中n是new的第1個字母。
e) p:列出分區表的內容,其中p是print的第1個字母。
f) q:退出fdisk,可是不存儲所作的變化,其中q是quit的第1個字母。
g) t:改變分區系統的id,其中t是title的第1個字母。
h) w:退出fdisk並存儲所作的變化,其中w是write的第1個字母。
3) partprobe命令的功能:從新初始化內存中內核的分區表。
(詳見linux系統管理P399)
1) 格式化的定義:所謂的格式化就是將分區中的硬盤空間劃分紅大小相等的一些數據塊(Blocks),以及設定這個分區中有多少個i節點可使用等。
2) 文件系統的定義:文件系統是操做系統用於明確磁盤或分區上的文件的方法和數據結構;即在磁盤上組織文件的方法。
3) 經常使用的文件系統類型
ext2:Linux系統中標準的文件系統
ext3:一種日誌式文件系統
ext4:一種針對ext3系統的擴展日誌式文件系統
lvm:邏輯盤卷管理
iso9660:目前惟一通用的光盤文件系統
4) mkfs命令的功能:格式化磁盤。
5) 經常使用的格式化命令:
mkfs.文件系統類型
例如,將分區/dev/sdb1格式化爲ext4文件系統的命令爲:
mkfs.ext4 /dev/sdb1
(詳見linux系統管理P405)
1) e2label命令的功能:設定或查看一個設備的label名稱。
2) 用e2label命令設定label:
a) 例如:查看/dev/sdb1分區的label的命令爲:
e2label /dev/sdb1
b) 例如:將/dev/sdb1分區的label設定爲wg的命令:
e2label /dev/sdb1 wg
(詳見linux系統管理P406)
1) 掛載的定義:掛載指將一個設備(一般是存儲設備)掛接到一個已存在的目錄上。
2) mount命令的功能:實現文件系統的掛載。
3) 用mount命令實現文件系統的掛載:
例如:將/dev/sdb1分區掛載到/wg目錄上的命令:
mount /dev/sdb1 /wg
4) umount命令的功能:實現文件系統的卸載。
5) 用umount命令實現文件系統的卸載:
例如:卸載/wg上的文件系統的命令:
umount /wg
umount -l /wg #-l參數,強制卸載
(詳見linux系統管理P414)
1) 虛擬內存的定義:所謂虛擬內存就是一塊硬盤空間被當作內存使用,也被稱爲交換分區(swap)。
2) Linux交換分區的類型爲:0x82
3) mkswap命令的功能:設置交換分區。
4) 使用mkswap命令設置交換分區的用法舉例:
例如:將分區/dev/sdb2設置爲交換分區的命令:
mkswap /dev/sdb2
5) swapon命令的功能:啓動交換分區。
6) swapon –a命令的功能:啓動所有的交換分區。
7) swapon –s命令的功能:列出當前正在使用的全部系統交換分區的狀態。
8) 使用swapon命令的用法舉例:
例如:啓用交換分區/dev/sdb2的命令:
swapon /dev/sdb2
(詳見linux系統管理P170)
inode節點的定義:i節點其實是一個數據結構,它存放了有關一個普通文件、目錄或其餘文件系統對象的基本信息。
(詳見linux系統管理P174)
1) 符號連接的定義:符號連接是指向另外一個文件的一個文件。
2) ln命令建立軟鏈接的用法舉例:
a) 爲wolf/dog.wolf.baby文件創建一個dog_ wolf.boy符號連接並放在bodydog目錄中的命令:
ln –s wolf/dog.wolf.baby bodydog/dog_ wolf.boy
(詳見linux系統管理P179)
1) 硬連接的定義:一個硬連接(hard link)是一個文件名與一個i節點之間的對應關係,也能夠認爲一個硬連接是在所對應的文件上添加了一個額外的路徑名。
2) ln命令建立硬鏈接的用法舉例:
a) 爲wolf/wolf.dog文件在backup目錄中創建一個名爲wolf.dog2的硬連接命令:
ln wolf/wolf.dog backup/wolf.dog2
(詳見linux系統管理P183)
1) Linux系統中常見的文件類型:
-:普通文件(regular file),也有人稱爲正規文件。
d:目錄(directory)。
l:符號(軟)連接。
b:塊特殊文件(b是block的第1個字符),通常指塊設備,如硬盤。
c:字符特殊文件(c是character的第1個字符),通常指字符設備,如鍵盤。
(詳見linux系統管理P185)
1) df命令的功能:顯示文件系統中磁盤使用和空閒區的數量。
-a 顯示全部磁盤
-h 單位轉換
2) du命令的功能: 顯示目錄和文件的大小a h同上