I/O子系統是作業系統中最慢的部分。
disk I/O
-
df指令
檢查檔案系統的磁盤空間占用情況
-
du 指令
du能以指定的目錄下的子目錄為機關,顯示每個目錄内所有檔案所占用的磁盤空間大小
-
iostat指令
常用參數 -x -d
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util xvda
rrqm/s: 每秒進行 merge 的讀操作數目。即 delta(rmerge)/s
wrqm/s: 每秒進行 merge 的寫操作數目。即 delta(wmerge)/s
r/s: 每秒完成的讀 I/O 裝置次數。即 delta(rio)/s
w/s: 每秒完成的寫 I/O 裝置次數。即 delta(wio)/s
rsec/s: 每秒讀扇區數。即 delta(rsect)/s
wsec/s: 每秒寫扇區數。即 delta(wsect)/s
rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組。(需要計算)
wkB/s: 每秒寫K位元組數。是 wsect/s 的一半。(需要計算)
avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因為aveq的機關為毫秒)。
await: 平均每次裝置I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次裝置I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因為use的機關為毫秒)
如果%util接近100%,說明産生的I/O請求太多,I/O系統已經滿負荷,該磁盤
可能存在瓶頸;idle小于70% IO壓力就較大了,一般讀取速度有較多的wait。
同時可以結合vmstat 檢視檢視b參數(等待資源的程序數)和wa參數(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)
- sar指令
network
-
netstat指令
netstat 指令用于顯示各種網絡相關資訊,如網絡連接配接,路由表,接口狀态 (Interface Statistics),masquerade 連接配接,多點傳播成員 (Multicast Memberships) 等等。
常見參數
-a (all)顯示所有選項,預設不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示别名,能顯示數字的全部轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀态
-p 顯示建立相關連結的程式名
-r 顯示路由資訊,路由表
-e 顯示擴充資訊,例如uid等
-s 按各個協定進行統計
-c 每隔一個固定時間,執行該netstat指令。
提示:LISTEN和LISTENING的狀态隻有用-a或者-l才能看到
- sar指令
sar -n SOCK 04:15:01 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw 04:16:01 PM 24002 1931 2 0 0 42858
totsck: Total number of sockets used by the system.
tcpsck: Number of TCP sockets currently in use.
sar -n DEV :: PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s :: PM lo
rxpck/s Total number of packets received per second.
txpck/s Total number of packets transmitted per second.
rxbyt/s Total number of bytes received per second.
txbyt/s Total number of bytes transmitted per second.
-
lsof指令
可以列出被程序打開的檔案的資訊
lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init root cwd DIR , / init root rtd DIR , / init root txt REG , /sbin/init udevd root u CHR , t0 /dev/null udevd root u CHR , t0 /dev/null udevd root u CHR , t0 /dev/null
lsof輸出各列資訊的意義如下:
COMMAND:程序的名稱 PID:程序辨別符
USER:程序所有者
FD:檔案描述符,應用程式通過檔案描述符識别該檔案。如cwd、txt等 TYPE:檔案類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:檔案的大小
NODE:索引節點(檔案在磁盤上的辨別)
NAME:打開檔案的确切名稱
Type: 檔案類型。檔案和目錄分别稱為 REG 和 DIR。而CHR 和 BLK,分别表示字元和塊裝置;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協定 (IP) 套接字。
lsof -p 列出程序号為的程序所打開的檔案 lsof +d /usr/local/ 顯示目錄下被程序開啟的檔案 lsof +D /usr/local/ 同上,但是會搜尋目錄下的目錄,時間較長