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