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