性能調優

本文章參考高俊峯寫的《循序漸進Linux》。

Linux的性能優化與管理。使用Linux系統要達到的一個最終目的是讓系統高效、穩定地運行,這就需要對Linux進行合理、專業的優化。


       系統性能優化一般遵循的流程:首先,Linux運維人員查看系統的整體狀態,然後主要從系統硬件、網絡設備、操作系統配置、應用程序架構和程序代碼五個方面進行綜合判斷。

       性能調優的主要目的是使系統能夠有效地利用各種資源,最大地發揮應用程序和系統之間的性能融合,使應用高效、穩定地運行。

       參考標準:

影響性能因素

評判標準

糟糕

CPU

%user+%sys< 70%

%user+%sys = 85%

%user+%sys >= 90%

內存

swap in(si) = 0

swap out(so) = 0

Per CPU whit 10 page/s

更多swap in

swap out

磁盤

%iowait < 20%

%iowait = 35%

%iowait >= 50%

我們分別介紹CPU性能評估、內存性能評估、磁盤I/O性能評估及網絡性能評估。

1.CPU性能評估

CPU是影響Linux性能的主要因素之一。

1.1 vmstat命令

[root@localhost dev]# 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
 1  0      0 546880    440 182640    0    0    13     1   18   29  0  0 100  0  0
 0  0      0 546864    440 182672    0    0     0     0   71  114  0  0 100  0  0
 1  0      0 546864    440 182672    0    0     0     0   74  112  0  0 100  0  0
每個2秒統計一次,一共統計三次。
對上面每項的輸出解釋如下:

procs

     r列表示運行和等待CPU時間片的進程數,這個值如果長期大於系統CPU的個數,說明CPU不足,需要增加CPU。

     b列表示在等待資源的進程數。比如正在等待I/O或者內存交換等。


memory

     swpd列表示切換到內存交換區的內存數量(以KB爲單位)。如果swpd的值不爲0,或者比較大,只要si、so的值長期爲0,這種情況下一般就不用擔心,它不會影響系統性能。

     free列表示當前空閒的物理內存數量(以KB爲單位)。

     buff列表示緩衝區緩存的內存數量。一般對塊設備的讀寫才需要緩衝。

     cache列表示頁面緩存的內存數量,一般作爲文件系統的緩存,頻繁訪問的文件都會被緩存,如果cache值較大,說明緩存的文件較多,如果此時I/O中bi比較小,說明文件系統效率比較好。


swap

     si列表示由磁盤調入內存,也就是內存進入內存交換區的數量。

     so列表示由內存調入磁盤,也就是內存交換區進入內存的數量。

     一般情況下,si、so的值都爲0。如果si、so的值長期不爲0,則表示系統內存不足,需要增加系統內存。


io項顯示磁盤讀寫狀況

     bi列表示從塊設備讀入數據的總量(即讀磁盤)(每秒KB)。

     bo列表示寫入到塊設備的數據總量(即寫磁盤)(每秒KB)。

     這裏設置bi+bo參考值爲1000,如果超過1000,而且wa值較大,則表示系統磁盤I/O有問題,應該考慮提高磁盤的讀寫性能。


system顯示採集間隔內發生的中斷次數。

    in列表示在某一時間間隔中觀測到的每秒設備中斷次數。

    cs列表示每秒產生的上下文切換次數。

    這兩項越大,會看到由內核佔用CPU的時間會越多。


cpu項顯示了CPU的使用狀態

   us列顯示了用戶進程佔用CPU的時間百分比。us的值比較高時,說明用戶進程站用CPU的時間多,但是如果長期大於50%,就要考慮優化程序或算法

   sy列表示了內核進程佔用CPU的時間百分比。

   根據經驗,us+sy的參考值爲80%,如果us+sy大於80%說明可能存在CPU資源不足。


   id列顯示了CPU處在空閒狀態的時間百分比。

   wa列顯示了I/O等待所佔用的CPU時間百分比。wa值越高,說明I/O等待越嚴重。根據經驗,wa的參考值爲20% 。

   st列顯示來自於一個虛擬機偷取的CPU時間的百分比。

   綜上所述,在對CPU的評估中,需要重點注意的是procs項下r列的值和cpu項下us、sy和id列的值。


1.2 sar命令


[root@localhost dev]# sar -u 3 5
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 	2016年04月04日 	_x86_64_	(4 CPU)

23時55分50秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
23時55分53秒     all      0.00      0.00      0.25      0.00      0.00     99.75
23時55分56秒     all      0.08      0.00      0.33      0.00      0.00     99.58
23時55分59秒     all      0.00      0.00      0.25      0.00      0.00     99.75
23時56分02秒     all      0.00      0.00      0.33      0.00      0.00     99.67
23時56分05秒     all      0.00      0.00      0.25      0.00      0.00     99.75
平均時間:     all      0.02      0.00      0.28      0.00      0.00     99.70
%user列顯示了用戶進程佔用CPU的時間百分比。
%nice列顯示了運行正常進程佔用CPU的時間百分比。

%system列顯示了系統進程佔用CPU的時間百分比。

%iowait列顯示了I/O等待所佔用CPU的時間百分比。

%steal列顯示了在內存相對緊張的環境下pagein強制對不同的頁面進行的steal操作。

%idle列顯示了CPU處於空閒狀態的時間百分比。

[root@localhost dev]# sar -P 0 3 5
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 	2016年04月05日 	_x86_64_	(4 CPU)

00時02分33秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時02分36秒       0      0.00      0.00      0.34      0.00      0.00     99.66
00時02分39秒       0      0.00      0.00      0.34      0.00      0.00     99.66
00時02分42秒       0      0.34      0.00      0.34      0.00      0.00     99.33
00時02分45秒       0      0.00      0.00      0.00      0.00      0.00    100.00
00時02分48秒       0      0.00      0.00      0.67      0.00      0.00     99.33
平均時間:       0      0.07      0.00      0.33      0.00      0.00     99.60
針對特定CPU進行統計


1.3 iostat命令

只能顯示系統所有CPU的平均信息。


[root@localhost dev]# iostat -c
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 	2016年04月05日 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.22    0.06    0.00   99.69


1.4 uptime命令

主要用來統計系統當前的運行狀況。

[root@localhost dev]# uptime
 00:06:18 up  7:49,  1 user,  load average: 0.00, 0.01, 0.05
輸出信息分別爲:系統現在的時間,系統從上次開機到現在運行了多長時間,系統目前有多少登錄用戶,系統在1分鐘內、5分鐘內15分鐘內的平均負載。本輸出中系統有4個CPU,如果loadaverage的三個值長期大於4,就說明CPU很繁忙,負載很高,可能會會影響系統性能。

總結:如果判斷系統CPU出現問題後,要結合top、ps等命令進一步檢查是由哪些進程導致CPU負載過大的。引起CPU資源緊缺的原因可能是應用程序不合理造成的,也可能是硬件資源匱乏引起的。


2.內存性能評估

2.1 free命令

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           980        791        188          0        131        426
-/+ buffers/cache:        234        746
Swap:         1983          1       1982
        此係統共1GB內存,系統空閒內存還有188MB,緩衝區緩存站用了131MB,頁面緩存佔用了426MB,可以使用內存還有746MB,當然,這個746MB包含了緩衝區緩存和頁面緩存的值。

        這裏有一個經驗公式:當應用程序可用內存/系統物理內存>70%時,表示系統內存資源非常充足,不影響系統性能;當應用程序可用內存/系統物理內存<20%時,表示系統內存資源緊缺,需要增加系統內存;當20%<當應用程序可用內存/系統物理內存<70%時,表示系統內存資源基本能滿足應用需求,暫時不影響系統性能。

結合watch與free實現動態監控內存狀況

watch -n 3 -d free

-n:每個3秒刷新一次

-d:高亮顯示變動


2.2 vmstat命令

在vmstat中重點關注的是swpd、si和so行


2.3 sar -r命令

[root@localhost ~]# sar -r 2 3
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	03/09/2016 	_x86_64_	(4 CPU)

03:41:22 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
03:41:24 AM    193304    811044     80.75    134716    436428    307216     10.12
03:41:26 AM    193304    811044     80.75    134716    436428    307216     10.12
03:41:28 AM    193304    811044     80.75    134716    436428    307216     10.12
Average:       193304    811044     80.75    134716    436428    307216     10.12
其中,kbmemfree表示空閒物理內存大小;kbmemused表示已使用的物理內存空間大小;%memused表示已使用內存佔總內存大小的百分比;kbbuffers和kbcached分別表示緩衝區緩存和頁面緩存的大小;kbcommit和%commit分別表示應用程序當前使用的內存大小和使用百分比。

總結:如果系統在內存方面出現瓶頸,很大的可能是應用程序本身的問題造成的。


3.磁盤I/O性能評估

3.1vmstat -d命令

[root@localhost ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
sda    47434   7062 1662980  793513  79361 318548 3184260 5057612      0   1672
sr0        0      0       0       0      0      0       0       0      0      0
dm-0   52869      0 1650970 1031651 397746      0 3181968 74441845      0   1664
dm-1     401      0    3208    7184    271      0    2168   24520      0      5
dm-2     233      0    1858    6006      7      0      56      21      0      2

3.2 sar -d命令

[root@localhost ~]# sar -d 2 3
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	03/09/2016 	_x86_64_	(4 CPU)

03:51:59 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:52:01 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:01 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:01 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:01 AM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:52:01 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:52:03 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:03 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:03 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:03 AM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:52:03 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:52:05 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:05 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:05 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:52:05 AM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
DEV表示磁盤設備名稱。

tps表示每秒到物理磁盤的傳送術,也就是每秒的I/O流量。一個傳送就是一個I/O請求,多個邏輯請求可以合併爲一個物理I/O請求。

rd_sec/s表示每秒從設備讀取的扇區數(1扇區=512字節)。

wr_sec/s表示每秒寫入設備的扇區數目。

avgrq-sz表示平均每次設備I/O操作的數據大小(以扇區爲單位)。類似超市排隊中每人所買東西的多少。

avgqu-sz表示平均I/O隊列長度。類似超市排隊中單位時間內平均排隊的人數。

await表示平均每次設備I/O操作的等待時間(ms)。類似排隊中沒人的等待時間。

svctm表示平均每次設備I/O操作的服務時間(ms)。類似超市排隊中 收銀員的收款速度。

%util表示一秒鐘有百分之幾的時間用於I/O操作。類似超市收銀臺前有人排隊的時間比例。

經驗:正常情況下,svctm應該是小於await值的,

   svctm的大小和磁盤性能有關,CPU、內存的符合也會對svctm值造成影響,過多的請求也會間接導致svctm值得增加。

   await值得大小一般取決於svctm的值和I/O隊列長度以及I/O請求模式。如果svctm的值與awail很接近,表示幾乎沒有I/O等待,磁盤性能很好。如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢,此時可以通過更換更快的硬盤來解決問題。

   %util項的值也是衡量磁盤I/O的一個重要指標。如果%util接近100%,表示磁盤產生的I/O請求太多,I/O系統已經滿負荷地在工作,該磁盤可能存在瓶頸。


3.3 iostat -d命令

[root@localhost ~]# iostat -d 2 3
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	03/09/2016 	_x86_64_	(4 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.77        10.05        19.25    1663116    3185924
dm-0              2.72         9.97        19.23    1651122    3183632
dm-1              0.00         0.02         0.01       3208       2168
dm-2              0.00         0.01         0.00       1858         56

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.50         8.00         0.00         16          0
dm-0              0.00         0.00         0.00          0          0
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0
dm-0              0.00         0.00         0.00          0          0
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

其中,

Blk_read/s表示每秒讀取的數據塊數。

Blk_wrtn/s表示每秒寫入的數據塊數

Blk_read表示讀取的所有塊數

Blk_wrtn表示寫入的所有塊數

第一項是系統從啓動以來統計時的所有傳輸信息,第二次輸出的數據才代表在檢測的時間段內系統的傳輸值。

如果Blk_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優化磁盤或者優化程序。

如果Blk_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的數據放入內存中進行操作。


對每個磁盤的單獨統計

[root@localhost ~]# iostat -x /dev/sda 2 3
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	03/09/2016 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.44    0.01    0.46    0.18    0.00   98.92

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.04     1.92    0.29    0.48    10.02    19.19    38.18     0.04   46.14  13.21   1.01

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.12    0.00    0.00   99.88

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/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

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/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表示每秒進行合併的讀操作數目;

   wrqm/s表示每秒進行合併的寫操作數目;

   r/s表示每秒完成讀I/O設備的次數;

   w/s表示每秒完成寫I/O設備的次數;

   rsec/s表示每秒讀取的扇區數;

   wsec/s表示每秒寫入的扇區數;


總結:要解決I/O的瓶頸,關鍵是要提高I/O子系統的執行效率。首先,要從應用程序上對磁盤讀寫進行優化,能夠放在內存中執行的操作,儘量不要放在磁盤中。其次,對磁盤存儲方式進行合理規劃,選擇合適自己的RAID存取方式。最後,在系統級別上,可以現在合適自身應用的文件系統,必要時使用裸設備提高讀寫性能。


4.網絡性能評估

4.1通過ping命令檢測網絡的連通性

如果發現網絡反應緩慢,或者連接中斷,可以通過ping來測試網絡的連通情況。

[root@localhost ~]# ping 192.168.1.135 -c 4
PING 192.168.1.135 (192.168.1.135) 56(84) bytes of data.
64 bytes from 192.168.1.135: icmp_seq=1 ttl=64 time=0.714 ms
64 bytes from 192.168.1.135: icmp_seq=2 ttl=64 time=0.719 ms
64 bytes from 192.168.1.135: icmp_seq=3 ttl=64 time=0.934 ms
64 bytes from 192.168.1.135: icmp_seq=4 ttl=64 time=0.879 ms

--- 192.168.1.135 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3046ms
rtt min/avg/max/mdev = 0.714/0.811/0.934/0.101 ms
其中,time值顯示了兩臺主機之間的網絡延時情況。如果此值很大,則表示網絡的延時很大,單位爲毫秒;

packet loss表示網絡的丟包率,此值越小,表示網絡的質量越高。


4.2通過netstat -i命令檢測網絡接口狀況

[root@localhost ~]# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0  1016140      0      0      0   808198      0      0      0 BMRU
lo        65536   0   282687      0      0      0   282687      0      0      0 LRU
其中,

   Iface表示網絡設備的接口名稱

   MTU表示對打傳輸單元,單位爲字節。

   RX-OK/TX-OK表示已經準確無誤地接收/發送了多少數據包。

   RX-ERR/TX-ERR表示接收/發送數據包時產生了多少錯誤。

   RX-DRP/TX-DRP表示接收/發送數據包時丟棄了多少數據包。

   RX-OVR/TX-OVR表示由於誤差而遺失了多少數據包。

   Flg表示接口標記。

        L表示該接口是個迴環設備。

        B表示設置了廣播地址。

        M表示接收所有數據包。

        R表示接口正在運行。

        U表示接口處於活動狀態。

        O表示在該接口上禁用arp。

        P表示一個點到點的連接


4.3 通過netstat -r命令檢測系統的路由表信息

[root@localhost ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
default         192.168.1.2     0.0.0.0         UG        0 0          0 eth0


4.4通過sar -n命令顯示系統的網絡運行狀態

DEV顯示網絡接口信息,EDEV顯示關於網絡錯誤的統計信息,SOCK顯示套接字信息,FULL顯示所有

[root@localhost ~]# sar -n DEV 2 3
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	03/09/2016 	_x86_64_	(4 CPU)

04:50:04 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:50:06 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:50:06 AM      eth0      0.50      1.01      0.03      0.04      0.00      0.00      0.00

04:50:06 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:50:08 AM        lo      1.02      1.02      0.09      0.09      0.00      0.00      0.00
04:50:08 AM      eth0      0.51      1.53      0.03      0.23      0.00      0.00      0.00

04:50:08 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:50:10 AM        lo      0.51      0.51      0.04      0.04      0.00      0.00      0.00
04:50:10 AM      eth0      0.51      1.02      0.03      0.21      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.51      0.51      0.04      0.04      0.00      0.00      0.00
Average:         eth0      0.51      1.18      0.03      0.16      0.00      0.00      0.00
其中,

      IFACE表示網絡接口設備。

      rxpck/s表示每秒鐘接收的數據包大小。

      txpck/s表示每秒鐘發送的數據包大小。

      rxkB/s表示每秒鐘接收的字節數。

      txkB/s表示每秒鐘發送的字節數。

      rxcmp/s表示每秒鐘接收的壓縮數據包。

      txcmp/s表示每秒鐘發送的壓縮數據包。

      rxmcst/s表示每秒鐘接收的多播數據包。


總結:解決問題的方法一般是增加網絡帶寬,或者優化網絡部署環境。traceroute(用於跟蹤數據包的傳輸路徑)以及nslookup命令(用於判斷DNS解析信息)。

       例如,Linux系統下的一個網站系統,用戶反映,網站訪問速度很慢,有時無法訪問。

       針對這個問題,第一步做的是檢測網絡,可以通過ping命令檢查網站的域名解析是否正常。同時,ping服務器地址的時延是否過大。通過這種方式,首先排除網絡可能出現的問題。如果網絡沒有問題。

       第二步對Linux系統的內存使用狀況進行檢查。因爲網站響應速度慢,一般跟內存關聯比較大,通過free -m、vmstat和sar -r等命令判斷內存資源是否緊缺。如果內存資源不存在問題。

       第三步檢查系統CPU的負載狀況,可以通過sar -u、vmstat、iostat -c、uptime及top等命令的輸出綜合判斷CPU是否過載問題。如果CPU沒問題。

        第四步檢查系統的磁盤I/O是否存在瓶頸,可以通過iostat -d、vmstat -d、sad -d等命令檢查磁盤的讀寫性能。如果沒有問題。

        第五步檢查程序本身是否存在問題。通過這樣的思路。層層檢測,步步排查,性能問題就“無處藏身”,查找出現性能問題的環節也就變得非常簡單。


發佈了53 篇原創文章 · 獲贊 19 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章