1.CPU
2.內(nèi)存
操作系統(tǒng) IPC 共享內(nèi)存/隊列:
平時我們經(jīng)常需要監(jiān)控內(nèi)存的使用狀態(tài),常用的命令有free、vmstat、top、dstat -m等。
2.1 free
各行數(shù)據(jù)含義
第一行Mem:
total:內(nèi)存總數(shù)7.7G,物理內(nèi)存大小,就是機器實際的內(nèi)存
used:已使用內(nèi)存6.2G,這個值包括了cached和應(yīng)用程序?qū)嶋H使用的內(nèi)存
free:空閑的內(nèi)存1.5G,未被使用的內(nèi)存大小
shared:共享內(nèi)存的大小,17M
buffers:被緩沖區(qū)占用的內(nèi)存大小,33M
cached:被緩存占用的內(nèi)存大小,184M
其中有:
Copy
第二行-/+ buffers/cache,代表應(yīng)用程序?qū)嶋H使用的內(nèi)存:
前一個值表示used - buffers/cached,表示應(yīng)用程序?qū)嶋H使用的內(nèi)存
后一個值表示free + buffers/cached,表示理論上都可以被使用的內(nèi)存
可以看到,這兩個值加起來也是total
第三行swap,代表交換分區(qū)的使用情況:總量、使用的和未使用的
緩存 cache
cache代表緩存,當系統(tǒng)讀取文件時,會先把數(shù)據(jù)從硬盤讀到內(nèi)存里,因為硬盤比內(nèi)存慢很多,所以這個過程會很耗時。
為了提高效率,Linux 會把讀進來的文件在內(nèi)存中緩存下來(局部性原理),即使程序結(jié)束,cache 也不會被自動釋放。因此,當有程序進行大量的讀文件操作時,就會發(fā)現(xiàn)內(nèi)存使用率升高了。
當其他程序需要使用內(nèi)存時,Linux 會根據(jù)自己的緩存策略(例如 LRU)將這些沒人使用的 cache 釋放掉,給其他程序使用,當然也可以手動釋放緩存:
緩沖區(qū) buffer
考慮內(nèi)存寫文件到硬盤的場景,因為硬盤太慢了,如果內(nèi)存要等待數(shù)據(jù)寫完了之后才繼續(xù)后面的操作,效率會非常低,也會影響程序的運行速度,所以就有了緩沖區(qū)buffer。
當內(nèi)存需要寫數(shù)據(jù)到硬盤中時會先放到 buffer 里面,內(nèi)存很快把數(shù)據(jù)寫到 buffer 中,可以繼續(xù)其他工作,而硬盤可以在后臺慢慢讀出 buffer 中的數(shù)據(jù)并保存起來,這樣就提高了讀寫的效率。
例如把電腦中的文件拷貝到 U 盤時,如果文件特別大,有時會出現(xiàn)這樣的情況:明明看到文件已經(jīng)拷貝完,但系統(tǒng)還是會提示 U 盤正在使用中。這就是 buffer 的原因:拷貝程序雖然已經(jīng)把數(shù)據(jù)放到 buffer 中,但是還沒有全部寫入到 U 盤中
同樣的,可以使用sync命令來手動flush buffer中的內(nèi)容:
交換分區(qū) swap
交換分區(qū)swap是實現(xiàn)虛擬內(nèi)存的重要概念。swap就是把硬盤上的一部分空間當作內(nèi)存來使用,正在運行的程序會使用物理內(nèi)存,把未使用的內(nèi)存放到硬盤,叫做swap out。而把硬盤交換分區(qū)中的內(nèi)存重新放到物理內(nèi)存中,叫做swap in。
交換分區(qū)可以在邏輯上擴大內(nèi)存空間,但是也會拖慢系統(tǒng)速度,因為硬盤的讀寫速度很慢。Linux 系統(tǒng)會將不經(jīng)常使用的內(nèi)存放到交換分區(qū)中。
cache 和 buffer 的區(qū)別
cache:作為page cache的內(nèi)存,是文件系統(tǒng)的緩存,在文件層面上的數(shù)據(jù)會緩存到page cache中
buffer:作為buffer cache的內(nèi)存,是磁盤塊的緩存,直接對磁盤進行操作的數(shù)據(jù)會緩存到 buffer cache 中
簡單來說:page cache用來緩存文件數(shù)據(jù),buffer cache用來緩存磁盤數(shù)據(jù)。在有文件系統(tǒng)的情況下,對文件操作,那么數(shù)據(jù)會緩存到page cache中。如果直接采用dd等工具對磁盤進行讀寫,那么數(shù)據(jù)會緩存到buffer cache中。
2.2 vmstat
vmstat (Virtual Memory Statics,虛擬內(nèi)存統(tǒng)計) 是對系統(tǒng)的整體情況進行統(tǒng)計,包括內(nèi)核進程、虛擬內(nèi)存、磁盤、中斷和 CPU 活動的統(tǒng)計信息:
procs
r列:表示運行和等待 CPU 時間片的進程數(shù),這個值如果長期大于 CPU 個數(shù),就說明 CPU 資源不足,可以考慮增加 CPU
b列:表示在等待資源的進程數(shù),例如正在等待 I/O 或者內(nèi)存交換
memory
swpn列:表示切換到交換分區(qū)的內(nèi)存大小,如果swpd的值不為 0 或者比較大,且si、so的值長期為 0,那么這種情況暫時不會影響系統(tǒng)性能
free列:當前空閑的物理內(nèi)存大小
buff列:表示buffers cache的內(nèi)存大小,一般對塊設(shè)備的讀寫才需要緩沖
cache列:表示page cache的內(nèi)存大小,一般作為文件系統(tǒng)的緩存,頻繁訪問的文件都會被 cached。如果 cache 值比較大,就說明 cached 文件數(shù)量較多。如果此時 I/O 中的bi比較小,就說明文件系統(tǒng)效率比較好
swap
si列:表示swap in,即內(nèi)存由交換分區(qū)放入物理內(nèi)存中
so列:表示swap out,即將未使用的內(nèi)存放到硬盤的交換分區(qū)中
io
bi列:表示從塊設(shè)備讀取的數(shù)據(jù)總量,即讀磁盤,單位KB/s
bo列:表示寫入塊設(shè)備的數(shù)據(jù)總量,即寫磁盤,單位KB/s
這里設(shè)置的bi+bo參考值為1000,如果超過1000,且wa值比較大,則表示系統(tǒng)磁盤 I/O 性能瓶頸
system
in列:表示在某一時間間隔中觀察到的每秒設(shè)備中斷數(shù)
cs列:表示每秒產(chǎn)生的上下文切換次數(shù)
上面這兩個值越大,內(nèi)核消耗的 CPU 時間就越多
cpu
us列:表示用戶進程消耗 CPU 的時間百分比。us值比較高時,說明用戶進程消耗的 CPU 時間多,如果長期大于 50%,可以考慮優(yōu)化程序
sy列:表示內(nèi)核進程消耗 CPU 的時間百分比。sy值比較高時,說明內(nèi)核消耗的 CPU 時間多,如果us+sy超過 80%,就說明 CPU 資源存在不足
id列:表示 CPU 處在空閑狀態(tài)的時間百分比
wa列:表示 I/O Wait 所占 CPU 的時間百分比。wa值越高,說明 I/O Wait 越嚴重。如果wa值超過 20%,說明 I/O Wait 嚴重
st列:表示 CPU Steal Time,針對虛擬機
3.網(wǎng)絡(luò)
3.1 接口
3.2 端口
3.3 tcpdump
3.4 nethogs
監(jiān)控各進程的網(wǎng)絡(luò)流量
4.I/O 性能
5.進程
5.1 top
例如最常用的top命令:
1: 顯示各個 CPU 的使用情況
c: 顯示進程完整路徑
H: 顯示線程
P: 排序 - CPU 使用率
M: 排序 - 內(nèi)存使用率
R: 倒序
Z: Change color mappings
B: Disable/enable bold
l: Toggle load avg
t: Toggle task/cpu stats
m: Toggle mem info
5.2 lsof
6.性能測試
7.用戶
8.系統(tǒng)狀態(tài)
9.硬件設(shè)備
10.文件系統(tǒng)
11.內(nèi)核、中斷
12.系統(tǒng)日志、內(nèi)核日志
13.cron 定時任務(wù)
14.調(diào)試工具
14.1 perf
14.2 strace
strace命令用于打印系統(tǒng)調(diào)用、信號:
14.3 ltrace
ltrace命令用于打印動態(tài)鏈接庫訪問:
15.場景案例
場景 1:連上服務(wù)器之后
場景 2:/proc 目錄有哪些信息 cat /proc/...
場景 3:后臺執(zhí)行命令
一些命令