經常使用Linux網絡/內存/磁盤分析工具

閱讀文本大概須要3分鐘。css

0x01:網絡IO

一、sar -n DEV 1 3 監控網卡IOhtml

二、ethtool 網卡名 查看網卡的最大速率等參數信息java

三、netstat -nat | awk 'FNR>2{print $NF}' | sort | uniq -c 查看系統TIME_WAIT狀態鏈接數node

四、查看DND信息dig命令linux

dig baidu.com # 輸出hostcname記錄與A記錄,能夠看到ip地址和使用的DNS服務器信息,添加` +short`能夠簡化輸出
dig -x 204.152.184.167 +short # 用 -x的選項查找IP地址的主機名
dig @ns1.google.com www.google.com 指定查詢的DNS server


tcpdumpios

tcpdump -D # 顯示能夠抓取的全部網絡接口
# 抓取9100端口,網卡xgbe0TCP網絡包信息,保存到aaa.pcap
tcpdump tcp port 9100 -i xgbe0 -nn -s 0 -XX -w aaa.pcap

# 指定目的或者源ip,可使用andor
tcpdump -i eth0 src and dst 172.16.11.1 and port 80 -nn -s 0 -XX -w aaa.pcap

# 指定主機
tcpdump -i eth0 host 172.16.11.1 and port 80 -nn -s 0 -XX -w aaa.pcap

# 抓取http包,通常是eth0xgbe0,能夠加上port 80做爲條件,這裏是指本機接收http請求的80端口,發出端口爲隨機
tcpdump -i xgbe0 -nn -s 0 -XX -w yq41.pcap


wireshark分析網絡包nginx

一、tcpdump保存的文件是二進制的文件,須要下載到本地用wireshark查看程序員

二、過濾器:tcp.streamweb

三、抓包參數和結果解析sql

CPU

一、mpstat -P ALL 1 1 查看cpu佔用率波動狀況;也能夠top,而後1

二、taskset綁定進程或者線程到指定CPU的核

taskset -cp pid   查看進程所屬核
taskset -acp pid   查看進程及全部線程的所屬核
taskset -pc 3 pid   表示將進程pid綁定到第3個核上
taskset -a -pc 3 pid  表示將進程pid(包括全部線程)綁定到第3個核上
taskset -cp 1,2,3 pid

pidstat 用於監控所有或指定進程的cpu、內存、線程、設備IO等系統資源的佔用狀況

# 查看CPU
pidstat -p pid 3 3
# 查看進程內存狀態,用ps效果同樣,RSS單位爲KB
pidstat -r -p 26716 3 3
# 查看進程磁盤IO
pidstat -d -p 26716 3 3
# 查看進程上下文切換
pidstat -wt -p 26716 3 3
# 查看進程中的線程信息
pidstat -t -p 26716 3 3

vmstat 2 1 查看系統上下文切換

內存

top

一、top命令經常使用參數

二、P,M分別是按cpu和內存排序;mac系統使用o + 列名

三、sar -u 1 3 監控CPU狀態

四、top -p 345 查看指定pid=345的進程,在mac中用-pid代替-p

五、%cpu參數不可靠,須要1查看每一個CPU的使用率纔可靠

free

-g```:以GB爲顯示單位,也能夠-m以MB爲顯示單位

name |    total   |    used    |   free  |   shared  |  buffers |cached
--- | --- | --- | --- | --- | --- | ---
Mem: | 125 | 125 | 0 | 0 | 0 | 109 |
-/+ buffers/cache: | | 15(上一行的used - buffers - cached) | 110(上一行的 free + buffers + cached)
Swap: | 0 | 0 | 0

對操做系統來說,爲了內存利用率最大化,會把剩餘內存申請爲cached,因此係統運行時間長了,cached就會比較大,對於頻繁讀寫的系統就更加明顯。used 和 free都是Mem的參數,因此 buffers/cached這兩項對於操做系統來說都是已經被使用的內存,因此呢 free的就比較少;

而對於應用程序來講呢,buffers/cached等同於可用的內存,由於buffers/cached可提升程序執行的性能,當程序使用內存時,buffers/cached很快就會被使用。

因此從應用程序的角度來看,應以(-/+ buffers/cached)的free 和 used爲主,即咱們主要與他相關的free和used就能夠了

咱們在觀察Linux的內存使用狀況時,只要沒發現用swap的交換空間,就沒必要擔憂本身的內存太少。若是經常看到swap用了不少,那麼你就要考慮加物理內存了,能夠用`vmstat`查看swap IO情況。這也是在Linux服務器上看內存是否夠用的標準。由於swap用的多,說明OS把本應該存在物理內存中的部份內存頁調度到了磁盤,騰出空間給當前進程使用,等到其餘進程運行時纔會把這部份內存頁再次調度到物理內存。

#### buffer/cache/shared memory區別與聯繫

#### pmap
1. 查看進程內存分佈情況,能夠用來分析線程堆棧:`pmap -d 12345 # 12345 是進程號`

#### 清理linux cache
Kernels 2.6.16 and newer provide a mechanism to have the kernel drop the page cache and/or inode and dentry caches on command, which can help free up a lot of memory.

This is a non-destructive operation and will only free things that are completely unused. Dirty objects will continue to be in use until written out to disk and are not freeable. If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.

    To free pagecache:
    # echo 1 > /proc/sys/vm/drop_caches

    To free dentries and inodes:
    # echo 2 > /proc/sys/vm/drop_caches

    To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches


> 遇到報錯:```tcpdump: can't create rx ring on packet socket: cannot allocate memory```, 可使用該命令清除cache


### 磁盤IO

#### 磁盤IOPS和Throughput

1. 磁盤的 IOPS,也就是在一秒內磁盤進行多少次 I/O 讀寫。磁盤的吞吐量,也就是每秒磁盤 I/O 的流量,即磁盤寫入加上讀出的數據的大小。每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE
2. 隨機讀寫頻繁的應用,如OLTP(Online Transaction Processing),IOPS是關鍵衡量指標;對於大量順序讀寫的應用,如VOD(Video On Demand),則更關注吞吐量指標。

#### 影響IOPS的因素

1. 第一個**尋址時間**,考慮到被讀寫的數據可能在磁盤的任意一個磁道,既有可能在磁盤的最內圈(尋址時間最短),也可能在磁盤的最外圈(尋址時間最長),因此在計算中咱們只考慮平均尋址時間,也就是磁盤參數中標明的那個平均尋址時間,這裏就採用當前最多的10krmp硬盤的5ms。
2. 第二個**旋轉延時**,和尋址同樣,當磁頭定位到磁道以後有可能正好在要讀寫扇區之上,這時候是不須要額外額延時就能夠馬上讀寫到數據,可是最壞的狀況確實要磁盤旋轉整整一圈以後磁頭才能讀取到數據,因此這裏咱們也考慮的是平均旋轉延時,對於10krpm的磁盤就是(60s/10k)*(1/2) = 2ms。
3. 第三個**傳送時間**,磁盤參數提供咱們的最大的傳輸速度,固然要達到這種速度是頗有難度的,可是這個速度倒是磁盤純讀寫磁盤的速度,所以只要給定了單次 IO的大小,咱們就知道磁盤須要花費多少時間在數據傳送上,這個時間就是IO Chunk Size / Max Transfer Rate。

#### I/O 讀寫的類型

大致上講,I/O 的類型能夠分爲:讀 / 寫 I/O、大 / 小塊 I/O、連續 / 隨機 I/O, 順序 / 併發 I/O。在這幾種類型中,咱們主要討論一下:大 / 小塊 I/O、連續 / 隨機 I/O, 順序 / 併發 I/O。

##### 大 / 小塊 I/O

這個數值指的是控制器指令中給出的連續讀出扇區數目的多少。若是數目較多,如 64128 等,咱們能夠認爲是大塊 I/O;反之,若是很小,好比 48,咱們就會認爲是小塊 I/O,實際上,在大塊和小塊 I/O 之間,沒有明確的界限。

##### 連續 / 隨機 I/O

連續 I/O 指的是本次 I/O 給出的初始扇區地址和上一次 I/O 的結束扇區地址是徹底連續或者相隔很少的。反之,若是相差很大,則算做一次隨機 I/O

連續 I/O 比隨機 I/O 效率高的緣由是:在作連續 I/O 的時候,磁頭幾乎不用換道,或者換道的時間很短;而對於隨機 I/O,若是這個 I/O 不少的話,會致使磁頭不停地換道,形成效率的極大下降。

##### 順序 / 併發 I/O

從概念上講,併發 I/O 就是指向一塊磁盤發出一條 I/O 指令後,沒必要等待它迴應,接着向另一塊磁盤發 I/O 指令。對於具備條帶性的 RAID(LUN),對其進行的 I/O 操做是併發的,例如:raid 0+1(1+0),raid5 等。反之則爲順序 I/O。



#### [磁盤I/O那些事](https://tech.meituan.com/about_desk_io.html)



#### [Linux下的IO監控與分析](https://www.cnblogs.com/quixotic/p/3258730.html)

1. `iostat -xm 1 1`: 監控CPU狀態和磁盤IO
2. [iostat命令輸出詳解](http://www.cnblogs.com/peida/archive/2012/12/28/2837345.html)



### 系統端口占用信息和進程信息

```lsof | grep pid/pname``` 查看進程信息
```lsof -i:port```查看端口號port使用的進程號和鏈接狀況
```lsof -i@ip:port```使用@host:port來顯示指定到指定主機的鏈接
```lsof -iTCP```顯示TCP鏈接
```lsof -c abc``` 顯示 abc 進程如今打開的文件
```lsof -p 12``` 看進程號爲 12 的進程打開了哪些文件
```netstat -np/c/atux | grep pid/port/pname```查看進程號所佔用的端口號和端口占用狀況
`netstat -n | grep tcp | grep 偵聽端口 | wc -l` : 監聽端口鏈接數
`netstat -nat | grep 3306 -c` : 查看數據庫鏈接使用數目
```ps aux```只能看到pid等信息,不能看到端口號
`ps -eLf | grep java | wc -l`: 監控java進程的線程數, 或者`ps -eLf | grep 27955 -c`
`ps -eo pid,pcpu | sort -rn -k 2 | less` 查看CPU高佔用的進程pid
`ps H -eo pid,tid,pcpu | sort -rn -k 3 | less` 查看CPU高佔用的pid及線程id
`cat /proc/進程號/task/線程號/status` 查看線程具體信息
`printf "%x\n" 7444` 線程id轉成十六進制,能夠用於jstack dump信息的搜索id
- 遠程登陸 `telnet hostname`

### sar命令查看網絡、磁盤、CPU、內存信息
sar - Collect, report, or save system activity information.

參數說明

-A 彙總全部的報告
-a 報告文件讀寫使用狀況
-B 報告附加的緩存的使用狀況
-b 報告緩存的使用狀況
-c 報告系統調用的使用狀況
-d 報告磁盤的使用狀況
-g 報告串口的使用狀況
-h 報告關於buffer使用的統計數據
-m 報告IPC消息隊列和信號量的使用狀況
-n 報告命名cache的使用狀況
-p 報告調頁活動的使用狀況
-q 報告運行隊列和交換隊列的平均長度
-R 報告進程的活動狀況
-r 報告沒有使用的內存頁面和硬盤塊
-u 報告CPU的利用率
-v 報告進程、i節點、文件和鎖表狀態
-w 報告系統交換活動情況
-y 報告TTY設備活動情況

系統平均load負載

sar -q 2 2

參數:
runq-sz:運行隊列的長度(等待CPU時間片來運行的進程數)
plist-sz:進程列表中進程(processes)和線程(threads)的數量
ldavg-1:最後1分鐘的系統平均負載 ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載

查看內存信息

sar -r 1 3

參數解釋:
kbmemfree:剩餘可用內存、單位K
kbmemused:已用內存、以K 爲單位、該值不考慮內核自身所使用的內存
%memused:已用內存百分比
kbbuffers:已用buffer(內核所用)、單位K
kbcached:已用cache(內核所用)、單位K
kbswpfree:剩餘Swap、單位K
kbswpused:已用Swap、單位K
%swpused:已用Swap百分比
kbswpcad:被緩存的Swap、單位K

內存分頁統計

sar -B 5 3

參數解釋:

pgpgin/s:表示每秒從磁盤或SWAP置換到內存的字節數(KB)
pgpgout/s:表示每秒從內存置換到磁盤或SWAP的字節數(KB)
fault/s:每秒鐘系統產生的缺頁數,即主缺頁與次缺頁之和(major + minor)
majflt/s:每秒鐘產生的主缺頁數.

系統交換活動情況

sar -w 1 3

參數:
pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswpout/s:每秒系統換出的交換頁面(swap page)數量

CPU信息

sar -u 3 5

參數解釋:

%user:顯示在用戶級別(application)運行使用 CPU 總時間的百分比
%nice:顯示在用戶級別,經過nice改變了進程調度優先級的進程,在用戶模式下消耗的CPU時間的比例
%system:在內核級別(kernel)運行所使用 CPU 總時間的百分比
%iowait:顯示用於等待I/O操做佔用 CPU 總時間的百分比
%idle:顯示 CPU 空閒時間佔用 CPU 總時間的百分比

1)若 %iowait 的值太高(大於0的長時間值),表示硬盤或者網絡存在I/O瓶頸
2)若 %idle 的值高但系統響應慢時,有多是 CPU 等待分配內存,此時應加大內存容量
3)若 %idle 的值持續低於1,則系統的 CPU 處理能力相對較低,代表系統中最須要解決的資源是 CPU

磁盤信息

sar -b 3 5

tps:每秒磁盤的 I/O 傳輸總量
rtps:每秒從磁盤讀出的數據總量
wtps:每秒向磁盤寫入的數據總量
bread/s:每秒從磁盤讀出的數據量,單位爲 塊/s
bwrtn/s:每秒向磁盤寫入的數據量,單位爲 塊/s

網絡IO

sar -n DEV 2 3

監控TCP鏈接狀態

sar -n TCP/ETCP 1

active/s: 每秒本地發起的TCP鏈接數,即服務器經過connect調用建立的TCP鏈接數
passive/s: 每秒遠程發起的TCP鏈接數,即服務器經過accept調用建立的鏈接數
retrans/s: 每秒重傳數量

### Linux /proc目錄
在Linux系統「一切都是文件」的思想貫徹指導下,全部進程的運行狀態均可以用文件來獲取。系統根目錄/proc中,每個數字子目錄的名字都是運行中的進程的PID,進入任一個進程目錄,可經過其中文件或目錄來觀察進程的各項運行指標,例如task目錄就是用來描述進程中線程的

能夠經過下面的方法獲取某進程中運行中的線程數量(PID指的是進程ID)

ls /proc/PID/task | wc -l

獲取進程相關信息

cat /proc/PID/status

獲取內存信息

vmstat -s -S M
cat /proc/meminfo

CPU信息

cat /proc/cpuinfo

調整TCP receive窗口大小

淺談TCP參數優化

/sbin/sysctl net.ipv4.tcp_rmem
cat /proc/sys/net/ipv4/tcp_rmem

Linux單機性能評估和優化

  1. Linux服務器性能評估與優化(一)

  2. Linux服務器性能評估與優化(二)

單機性能主要包括CPU、內存、網絡IO、磁盤IO幾個方面,互相依賴,互相影響。例如,網卡巨量吞吐或者磁盤頻繁讀寫均可能致使CPU系統調用太高而佔用率很高。CPU通常認爲user%+sys%<70%爲良好狀態,內存通常認爲si和swap out都爲0爲良好狀態,磁盤認爲iowait%<20%爲良好狀態


往期精彩


01 漫談發版哪些事,好課程推薦

02 Linux的經常使用最危險的命令

03 精講Spring&nbsp;Boot—入門+進階+實例

04 優秀的Java程序員必須瞭解的GC哪些

05 互聯網支付系統總體架構詳解

關注我

天天進步一點點

喜歡!在看☟


本文分享自微信公衆號 - JAVA樂園(happyhuangjinjin88)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索