Linux上面查看服務器壓力的一些思路

前言

我標題寫的是思路,其實也是工作一天之後坐在牀上靜靜思考,關於linux,怎麼去聊這個事情會好一些。事實上就我個人而言,linux對於一名開發來講需求是比較直接的,其實就是學會看性能就可以了。因爲真實在生產線上的時候同時還會有專業的運維同學,還有一些系統專門去讓我們去看,我們需要挑關鍵點。

從我們日常的Window出發

其實不管是window和linux,我們其實都是會按照一樣的想法去看性能的;我們平時在window用得比較多,當系統負載高的時候我們直觀的感覺就是卡,然後我們會打開我們的任務管理器,看看我們的CPU,看看我們的磁盤,是不是有什麼東西佔用高了。其實這個思路到了linux上面也是一樣的,只不過的話,linux命令行方式多一些,我們只要把window上面看性能的思路遷移到linux就可以。
在這裏插入圖片描述
我們windows是用資源管理器去看的,曲線其實很明朗就可以看到了。
我們可以按照這個思路
CPU->內存->磁盤->網絡,我們按照這個思路來,應該是清晰的。

性能評判的原則

還一個需要強調的是,生產上面其實會有一個原則,一般不能等系統掛了的時候再去處理,通常來說一臺機器(多核)超過60%-70%其實就算壓力比較大了,超過了80%的話其實就已經負荷很高了,這個是我們用來判斷的性能的參考。

命令介紹

我們其實要先知道我們的目的,再介紹命令會比較合適,正如我們想要編輯文檔的時候,我們會有word和wps的介紹,我們其實可以有不止一種的方式去實現我們的這個需求。

linux下的資源監視器

top命令是最常用的,對應我們的windos下面的資源監視器,linux top命令一敲,便是下面的內容

top - 22:33:12 up 467 days, 12:44,  3 users,  load average: 2.82, 3.14, 3.33
Tasks: 468 total,   1 running, 467 sleeping,   0 stopped,   0 zombie
Cpu(s): 14.8%us,  0.9%sy,  1.4%ni, 82.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132244968k total, 75537804k used, 56707164k free,  1201448k buffers
Swap: 33554428k total,        0k used, 33554428k free, 53700216k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                             
 63276 hdfs      20   0 19.7g 8.7g  25m S 356.0  6.9 297879:19 java                                                                                                                                                
  2123 root      20   0 49960 2252 1704 S  0.7  0.0 149:44.81 syslog-ng                                                                                                                                            
  2152 nscd      20   0  945m 1736 1068 S  0.3  0.0 383:46.29 nscd                                                                                                                                                 
...... 

因爲沒得曲線看,我們需要曉得一下關鍵的字段:
load average 便是我們的系統負載情況,分別表示系統一分鐘 五分鐘 十五分鐘的平均負載
id 全稱的 idle,這個是空閒率,這個當然就是越空閒就係統壓力越小,如果這三個值加起來/3 x100% 超過60% 說明負載比較高 如果超過80%就掛了!
另外top面板上面按1的時候可以切換多核的情況,可以試試。

簡要面板

top命令其實信息太多了,我們其實有個迷你版本的面板

$ uptime
 22:41:54 up 467 days, 12:53,  3 users,  load average: 3.60, 3.53, 3.40

直接可以查看系統負荷情況

CPU和內存查看

vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監控。是對系統的整體情況進行統計。

$ vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 56691984 1201452 53722160    0    0     0     9    0    0  5  1 94  0  0
 1  0      0 56692212 1201452 53722164    0    0     0     0 2539 1077  6  0 94  0  0
 2  0      0 56692668 1201452 53722168    0    0     0    24 6199 8175 21  0 79  0  0

2是指2秒來一次,3的統計3下的意思,需要關注幾個項目
r其實就是runing的意思,是指線程running
b是block的意思,線程block,這肯定不好,越少越好
us是user是的意思,用戶使用cpu
sy是system的意思,系統使用cpu
us和sy兩個值加起來超過80%,系統壓力大,需要處理了
剩下可以看到內存和其他,稍微看得少些。

內存查看
free -m

 free -m
             total       used       free     shared    buffers     cached
Mem:        129145      73937      55207          1       1173      52465
-/+ buffers/cache:      20298     108846
Swap:        32767          0      32767

這條命令就是查看內存,因爲四捨五入,-m的兆的意思,也可以free -g,但是會被捨去很多內存,一般的m

磁盤查看

磁盤這個好說,就是看容量,這個就是滿了就是100%,很容易看

$ df -ah
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       518G  175G  317G  36% /
proc               0     0     0    - /proc
sysfs              0     0     0    - /sys
devpts             0     0     0    - /dev/pts
tmpfs            63G     0   63G   0% /dev/shm
/dev/sda1       190M   27M  153M  15% /boot
none               0     0     0    - /proc/sys/fs/binfmt_misc

磁盤一個查看是需要看讀寫情況

$ iostat -xdk 2 3
Linux 2.6.32-504.23.4.el6.x86_64     03/16/2020      _x86_64_        (24 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    49.04    0.01    5.48     0.23   217.89    79.48     0.01    2.29   0.18   0.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
  • rrqm/s: 每秒進行 merge 的讀操作數目
  • wrqm/s:每秒進行 merge 的寫操作數目
  • r/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s
  • w/s:每秒完成的寫 I/O 設備次數。即 delta(wio)/s
  • rkB/s: 每秒讀K字節數。是 rsect/s 的一半,因爲每扇區大小爲512字節
  • avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)
  • avgqu-sz:平均I/O隊列長度。即 delta(aveq)/s/1000 (因爲aveq的單位爲毫秒)
  • await:平均每次設備I/O操作的等待時間 (毫秒)
  • svctm: 平均每次設備I/O操作的服務時間 (毫秒)
  • %util:一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因爲use的單位爲毫秒)
    如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸

網絡查看

其實可想而知想象得到,我們的網絡應該是xxstat這種形式吧,其實還真是。
網絡的查看是ifstat,不過這個軟件有時候不帶,需要自己安裝

 wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
 tar -zxvf ifstat-1.1.tar.gz 
 cd ifstat-1.1
 ./configure
 make 
 make install

敲命令ifstat就行,這個顯示比較簡單,網卡和上傳下載的速度

       eth0                eth1               bond0       
 KB/s in  KB/s out   KB/s in  KB/s out   KB/s in  KB/s out
    0.00      0.21      0.06      0.00      0.06      0.21
    0.00      0.00      0.06      0.15      0.06      0.15
    0.00      0.15      0.06      0.00      0.06      0.15
    0.00      0.00      0.06      0.15      0.06      0.15
    1.24     15.24      0.06     17.02      1.29     32.25
    0.14      1.15      0.06      0.20      0.20      1.35

總結

從我們window是遷移的思路是比較清晰的,按照設備+stat這種規律的命令也是比較容易推導出來的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章