天天看點

ODOO12伺服器性能評估與監控

主要配置資訊

CPU:4核2.2GHz,記憶體:32GB,硬碟:60GB

一、檢視基礎資訊

1.檢視CPU資訊

  1. [root@odoodev ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
  2. 4  
  3. [root@odoodev ~]# 

2.檢視記憶體資訊

  1. [root@odoodev ~]# dmidecode -t memory
  2. # dmidecode 3.1
  3. Getting SMBIOS data from sysfs.  
  4. SMBIOS 2.4 present.  
  5. Handle 0x1000, DMI type 16, 15 bytes  
  6. Physical Memory Array  
  7.     Location: Other  
  8.     Use: System Memory  
  9.     Error Correction Type: Multi-bit ECC  
  10.     Maximum Capacity: 32 GB  
  11.     Error Information Handle: Not Provided  
  12.     Number Of Devices: 2  
  13. Handle 0x1100, DMI type 17, 21 bytes  
  14. Memory Device  
  15.     Array Handle: 0x1000  
  16.     Error Information Handle: 0x0000  
  17.     Total Width: 64 bits  
  18.     Data Width: 64 bits  
  19.     Size: 16384 MB  
  20.     Form Factor: DIMM  
  21.     Set: None  
  22.     Locator: DIMM 0  
  23.     Bank Locator: Not Specified  
  24.     Type: RAM  
  25.     Type Detail: None  
  26. Handle 0x1101, DMI type 17, 21 bytes  
  27. Memory Device  
  28.     Array Handle: 0x1000  
  29.     Error Information Handle: 0x0000  
  30.     Total Width: 64 bits  
  31.     Data Width: 64 bits  
  32.     Size: 16384 MB  
  33.     Form Factor: DIMM  
  34.     Set: None  
  35.     Locator: DIMM 1  
  36.     Bank Locator: Not Specified  
  37.     Type: RAM  
  38.     Type Detail: None  
  39. [root@odoodev ~]# 

3.檢視硬碟資訊

  1. [root@odoodev ~]# fdisk -l
  2. 磁盤 /dev/vda:64.4 GB, 64424509440 位元組,125829120 個扇區  
  3. Units = 扇區 of 1 * 512 = 512 bytes  
  4. 扇區大小(邏輯/實體):512 位元組 / 512 位元組  
  5. I/O 大小(最小/最佳):512 位元組 / 512 位元組  
  6. 磁盤标簽類型:dos  
  7. 磁盤辨別符:0x000ca9d8  
  8.    裝置 Boot      Start         End      Blocks   Id  System
  9. /dev/vda1   *        2048     2099199     1048576   83  Linux  
  10. /dev/vda2         2099200   125829119    61864960   8e  Linux LVM  
  11. 磁盤 /dev/mapper/centos_pgsqlhosta-root:38.2 GB, 38235275264 位元組,74678272 個扇區  
  12. Units = 扇區 of 1 * 512 = 512 bytes  
  13. 扇區大小(邏輯/實體):512 位元組 / 512 位元組  
  14. I/O 大小(最小/最佳):512 位元組 / 512 位元組  
  15. 磁盤 /dev/mapper/centos_pgsqlhosta-swap:6442 MB, 6442450944 位元組,12582912 個扇區  
  16. Units = 扇區 of 1 * 512 = 512 bytes  
  17. 扇區大小(邏輯/實體):512 位元組 / 512 位元組  
  18. I/O 大小(最小/最佳):512 位元組 / 512 位元組  
  19. 磁盤 /dev/mapper/centos_pgsqlhosta-home:18.7 GB, 18668847104 位元組,36462592 個扇區  
  20. Units = 扇區 of 1 * 512 = 512 bytes  
  21. 扇區大小(邏輯/實體):512 位元組 / 512 位元組  
  22. I/O 大小(最小/最佳):512 位元組 / 512 位元組  
  23. [root@odoodev ~]# df -Th
  24. 檔案系統                           類型      容量  已用  可用 已用% 挂載點  
  25. /dev/mapper/centos_pgsqlhosta-root xfs        36G   14G   22G   39% /  
  26. devtmpfs                           devtmpfs   16G     0   16G    0% /dev  
  27. tmpfs                              tmpfs      16G   12K   16G    1% /dev/shm  
  28. tmpfs                              tmpfs      16G  1.6G   15G   11% /run  
  29. tmpfs                              tmpfs      16G     0   16G    0% /sys/fs/cgroup  
  30. /dev/vda1                          xfs      1014M  206M  809M   21% /boot  
  31. /dev/mapper/centos_pgsqlhosta-home xfs        18G   18G   20K  100% /home  
  32. tmpfs                              tmpfs     3.2G     0  3.2G    0% /run/user/26  
  33. tmpfs                              tmpfs     3.2G   12K  3.2G    1% /run/user/42  
  34. tmpfs                              tmpfs     3.2G     0  3.2G    0% /run/user/0  
  35. [root@odoodev ~]# 

二、性能評估

網絡帶寬 Odoo 對帶寬要求較高,一般建議 10使用者 /M 帶寬。

1.系統整體性能評估

  1. [root@odoodev ~]# uptime
  2.  14:08:33 up 34 days, 22:38,  1 user,  load average: 0.01, 0.02, 0.05  

load average這個輸出值,這三個值的大小一般不能大于系統CPU的個數,例如,本輸出中系統有4個CPU,如果load average的三個值長期大于4時,說明CPU很繁忙,負載很高,可能會影響系統性能,但是偶爾大于4時,倒不用擔心,一般不會影響系統性能。相反,如果load average的輸出值小于CPU的個數,則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。

2.cpu性能評估

(1)利用vmstat指令監控系統CPU

該指令可以顯示關于系統各種資源之間相關性能的簡要資訊,這裡我們主要用它來看CPU一個負載情況。

下面是vmstat指令在某個系統的輸出結果:

  1. [root@odoodev ~]# vmstat 2 5   #每2秒更新資訊,統計5次
  2. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----  
  3.  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
  4.  1  0      0 24778076   2120 6110512    0    0     0     6    1    2  1  0 99  0  0  
  5.  0  0      0 24777928   2120 6110524    0    0     0     0  222  244  1  0 99  0  0  
  6.  0  0      0 24777324   2120 6110524    0    0     0    56  296  332  1  0 99  0  0  
  7.  0  0      0 24778944   2120 6110532    0    0     0     0  123  161  0  0 100  0  0  
  8.  0  0      0 24778960   2120 6110532    0    0     0     4  128  151  0  0 100  0  0  
  9. [root@odoodev ~]# 

目前,CPU充足。

Procs

r清單示運作和等待cpu時間片的程序數,這個值如果長期大于系統CPU的個數,說明CPU不足,需要增加CPU。

b清單示在等待資源的程序數,比如正在等待I/O、或者記憶體交換等。

Cpu

us列顯示了使用者程序消耗的CPU 時間百分比。us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期大于50%,就需要考慮優化程式或算法。

sy列顯示了核心程序消耗的CPU時間百分比。Sy的值較高時,說明核心消耗的CPU資源很多。

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

(2) 利用sar指令監控系統CPU

sar功能很強大,可以對系統的每個方面進行單獨的統計,但是使用sar指令會增加系統開銷,不過這些開銷是可以評估的,對系統的統計結果不會有很大影響。

下面是sar指令對某個系統的CPU統計輸出:

  1. [root@odoodev ~]# sar -u 3 5
  2. Linux 3.10.0-957.10.1.el7.x86_64 (odoodev)  2020年07月23日     _x86_64_    (4 CPU)  
  3. 14時37分34秒     CPU     %user %nice %system %iowait %steal %idle
  4. 14時37分37秒     all      0.25      0.00      0.17      0.00      0.00     99.58  
  5. 14時37分40秒     all      0.17      0.00      0.08      0.00      0.00     99.75  
  6. 14時37分43秒     all      0.25      0.00      0.08      0.00      0.00     99.67  
  7. 14時37分46秒     all      0.25      0.00      0.17      0.08      0.00     99.50  
  8. 14時37分49秒     all      0.33      0.08      0.42      0.00      0.00     99.16  
  9. 平均時間:     all      0.25      0.02      0.18      0.02      0.00     99.53  
  10. [root@odoodev ~]# 

對上面每項的輸出解釋如下:

%user列顯示了使用者程序消耗的CPU 時間百分比。

%nice列顯示了運作正常程序所消耗的CPU 時間百分比。

%system列顯示了系統程序消耗的CPU時間百分比。

%iowait列顯示了IO等待所占用的CPU時間百分比

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

%idle列顯示了CPU處在空閑狀态的時間百分比。

3.記憶體性能評估

(1)利用free指令監控記憶體

  1. [root@odoodev ~]# free -m   #檢視以M為機關的記憶體使用情況
  2.               total        used        free      shared  buff/cache   available  
  3. Mem:          32174        2029       24172        1869        5971       27814  
  4. Swap:          6143           0        6143  
  5. [root@odoodev ~]# 

24172/32174=75%,說明記憶體資源很充足。

【經驗公式】:應用程式可用記憶體/系統實體記憶體>70%時,表示系統記憶體資源非常充足,不影響系統性能,應用程式可用記憶體/系統實體記憶體<20%時,表示系統記憶體資源緊缺,需要增加系統記憶體,20%<應用程式可用記憶體/系統實體記憶體<70%時,表示系統記憶體資源基本能滿足應用需求,暫時不影響系統性能。

(2)利用vmstat指令監控記憶體

  1. [root@odoodev ~]# vmstat 2 3
  2. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----  
  3.  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
  4.  1  0      0 24762464   2120 6122280    0    0     0     6    1    3  1  0 99  0  0  
  5.  0  0      0 24762612   2120 6122300    0    0     0   179  349  354  1  0 98  0  0  
  6.  0  0      0 24762612   2120 6122320    0    0     0     0  314  307  1  0 98  0  0  
  7. [root@odoodev ~]# 

memory

swpd清單示切換到記憶體交換區的記憶體數量(以k為機關)。如果swpd的值不為0,或者比較大,隻要si、so的值長期為0,這種情況下一般不用擔心,不會影響系統性能。

free清單示目前空閑的實體記憶體數量(以k為機關)

buff清單示buffers cache的記憶體數量,一般對塊裝置的讀寫才需要緩沖。

cache清單示page cached的記憶體數量,一般作為檔案系統cached,頻繁通路的檔案都會被cached,如果cache值較大,說明cached的檔案數較多,如果此時IO中bi比較小,說明檔案系統效率比較好。

swap

si清單示由磁盤調入記憶體,也就是記憶體進入記憶體交換區的數量。

so清單示由記憶體調入磁盤,也就是記憶體交換區進入記憶體的數量。

【經驗總結】:一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統記憶體不足。需要增加系統記憶體。

4.磁盤I/O性能評估

(1)利用iostat評估磁盤性能

  1. [root@odoodev ~]# iostat -d 2 3  #-d 顯示磁盤的使用情況
  2. Linux 3.10.0-957.10.1.el7.x86_64 (odoodev)  2020年07月23日     _x86_64_    (4 CPU)  
  3. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  4. vda               2.10         0.48        25.19    1451558   76122344  
  5. dm-0              1.79         0.47        25.18    1423879   76107735  
  6. dm-1              0.00         0.00         0.00       2464          0  
  7. dm-2              0.00         0.00         0.00      14500      12490  
  8. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  9. vda              14.00         4.00        25.75          8         51  
  10. dm-0              9.50         4.00        25.75          8         51  
  11. dm-1              0.00         0.00         0.00          0          0  
  12. dm-2              0.00         0.00         0.00          0          0  
  13. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  14. vda               1.50         0.00         3.25          0          6  
  15. dm-0              1.00         0.00         3.25          0          6  
  16. dm-1              0.00         0.00         0.00          0          0  
  17. dm-2              0.00         0.00         0.00          0          0  
  18. [root@odoodev ~]# 

對上面每項的輸出解釋如下:

Device: 以sdX形式顯示的裝置名稱tps: 每秒程序下發的IO讀、寫請求數量KB_read/s: 每秒從驅動器讀入的資料量,機關為K。KB_wrtn/s: 每秒從驅動器寫入的資料量,機關為K。KB_read: 讀入資料總量,機關為K。KB_wrtn: 寫入資料總量,機關為K。

  • 可以通過KB_read/s和KB_wrtn/s的值對磁盤的讀寫性能有一個基本的了解,如果KB_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優化磁盤或者優化程式,如果KB_read/s值很大,表示磁盤直接讀取操作很多,可以将讀取的資料放入記憶體中進行操作。
  • 對于這兩個選項的值沒有一個固定的大小,根據系統應用的不同,會有不同的值,但是有一個規則還是可以遵循的:長期的、超大的資料讀寫,肯定是不正常的,這種情況一定會影響系統性能。

(2)利用sar評估磁盤性能

​ 通過“sar –d”組合,可以對系統的磁盤IO做一個基本的統計。

  1. [root@odoodev ~]# sar -d 2 3
  2. Linux 3.10.0-957.10.1.el7.x86_64 (odoodev)  2020年07月23日     _x86_64_    (4 CPU)  
  3. 15時10分27秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  4. 15時10分29秒  dev252-0     13.50      0.00     50.50      3.74      0.00      5.93      0.11      0.15  
  5. 15時10分29秒  dev253-0      9.00      0.00     50.50      5.61      0.08      8.89      8.89      8.00  
  6. 15時10分29秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  7. 15時10分29秒  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  8. 15時10分29秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  9. 15時10分31秒  dev252-0      6.00      0.00    506.00     84.33      0.00      4.17      0.08      0.05  
  10. 15時10分31秒  dev253-0      6.50      0.00    506.00     77.85      0.03      4.00      3.23      2.10  
  11. 15時10分31秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  12. 15時10分31秒  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  13. 15時10分31秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  14. 15時10分33秒  dev252-0      1.50      0.00     25.50     17.00      0.00      5.00      0.00      0.00  
  15. 15時10分33秒  dev253-0      1.00      0.00     25.50     25.50      0.01      7.50      7.50      0.75  
  16. 15時10分33秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  17. 15時10分33秒  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  18. 平均時間:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  19. 平均時間:  dev252-0      7.00      0.00    194.00     27.71      0.00      5.36      0.10      0.07  
  20. 平均時間:  dev253-0      5.50      0.00    194.00     35.27      0.04      6.88      6.58      3.62  
  21. 平均時間:  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  22. 平均時間:  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  23. [root@odoodev ~]# 

需要關注的幾個參數含義:

await表示平均每次裝置I/O操作的等待時間(以毫秒為機關)。

svctm表示平均每次裝置I/O操作的服務時間(以毫秒為機關)。

%util表示一秒中有百分之幾的時間用于I/O操作。

對以磁盤IO性能,一般有如下評判标準:

正常情況下svctm應該是小于await值的,而svctm的大小和磁盤性能有關,CPU、記憶體的負荷也會對svctm值造成影響,過多的請求也會間接的導緻svctm值的增加。

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

%util項的值也是衡量磁盤I/O的一個重要名額,如果%util接近100%,表示磁盤産生的I/O請求太多,I/O系統已經滿負荷的在工作,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,可以通過優化程式或者通過更換更高、更快的磁盤來解決此問題。

5.網絡性能評估

  1. (1)通過ping指令檢測網絡的連通性  
  2. (2)通過netstat –i組合檢測網絡接口狀況  
  3. (3)通過netstat –r組合檢測系統的路由表資訊  
  4. (4)通過sar –n組合顯示系統的網絡運作狀态  sar -n DEV 5 3  

檢視TCP連接配接數:

  1. [root@odoodev ~]# netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}' 
  2. LISTEN 17  
  3. ESTABLISHED 3  
  4. FIN_WAIT1 1  
  5. TIME_WAIT 10  
  6. SYN_SENT 6  
  7. [root@odoodev ~]# 

檢視連接配接數最多的ip

  1. [root@odoodev ~]# netstat -pant |grep ":80"|awk '{print $5}' | awk -F: '{print $1}'|sort|uniq -c|sort -nr
  2.       8 123.183.158.11  
  3.       2 5.255.86.129  
  4.       2 107.191.99.221  
  5.       2 0.0.0.0  
  6.       1 45.9.148.129  
  7.       1 45.9.148.117  
  8. [root@odoodev ~]# 

三、針對問題的常用改進措施

1.為磁盤I/O調整Linux核心電梯算法

在選擇檔案系統後,有一些核心和挂載選項可能會影響到它的性能表現,其中一個核心設定是電梯算法,通過調整電梯算法,系統可以平衡低延遲需求,收集足夠的資料,以有效地組織對磁盤的讀和寫請求。

2.禁用不必要的守護程序,節省記憶體和CPU資源

每台伺服器上都運作着許多守護程序或服務,而具有諷刺意味的是,有很多通常不是必需的,這些服務沒有發揮作用,但卻消耗了寶貴的記憶體和CPU時間。此外,它們可能将伺服器置于危險境地,多運作一個服務就等于多向黑客打開一扇長驅直入的門,是以,你應該将它們從伺服器移除,禁用它們最大的好處是可以加快啟動時間,釋放記憶體。另外,你可以減少CPU需要處理的程序數,禁用它們的另一個好處是增強伺服器的安全性,因為越少的守護程序意味着可被攻擊和利用的漏洞越少。

下面是一些應該被禁用的Linux守護程序,預設情況下,它們都是自動運作的:

序号 守護程序 描述
1 Apmd 進階電源管理守護程序
2 Nfslock 用于NFS檔案鎖定
3 Isdn ISDN Moderm支援
4 Autofs 在背景自動挂載檔案系統(如自動挂載CD-ROM)
5 Sendmail 郵件傳輸代理
6 Xfs X Window的字型伺服器

3.關掉GUI

​ 一般說來,Linux伺服器是不需要GUI的,所有管理任務都可以在指令行下完成,是以最好關掉GUI,重定向X顯示或通過一個Web浏覽器界面顯示。為了禁用GUI,“init level(啟動級别)”應該被設定為3(指令行登入),而不是5(圖形登入),如果需要GUI,可以随時運作startx進入圖形使用者界面。

4.清理不需要的子產品或功能

在伺服器軟體包中有太多被啟動的功能或子產品實際上是不需要的(如Apache中的許多功能子產品),仔細檢視Apache配置檔案,确定FrontPage支援或其它額外的子產品是否真的要用到,如果不需要,應該毫不猶豫地從伺服器禁用掉,這樣有助于提高系統記憶體可用量,騰出更多資源給那些真正需要的軟體,讓它們運作得更快。

5.修改磁盤緩存

Odoo 有大量的小檔案,修改磁盤預讀緩存可以顯著 提高 odoo 通路速度

blockdev 工具允許從指令行調用區塊裝置控制程式。

–setro 設定裝置為隻讀–getro 讀取裝置是否為隻讀(成功為1,0則為可讀寫)–setrw 設定設别為可讀寫–getss 列印裝置的扇區大小,通常是512–getsize 列印設别的容量,按照一個扇區512個位元組計算–setra N 設定預讀扇區(512位元組)為N個.Set readahead to N 512-byte sectors.–getra 列印readahead(預讀扇區)–flushbufs 重新整理緩沖–rereadpt 重讀分區表。

blockdev --getra /dev/sda

預設值為256,建議的範圍是在4096-16384之間,預讀不足的常見問題是寫磁盤的速度要比讀取的速度要高。

改變參數的指令格式是:blockdev --setra 4096 /dev/xdva1

需要根據每塊磁盤單獨進行設定,通常可以将調整指令寫入rc.local啟動腳本中。

6.禁用檔案寫操作

在linux中,使用者每通路一個檔案,系統都會更新檔案的其中一個屬性(上次通路時間),當使用者在通路資料時,系統會需要不斷的進行寫操作,這個在系統中也是一筆不小的開銷,我們可以在/etc/fstab檔案中,對挂載的卷加上noatime選項來禁用此行為:

  1. /dev/sda1 / ext3 noatime,errors=remount-ro 0 1  

修改完以後,執行sudo mount -a 指令生效即可。

7.讀緩存與交換參數修改

在linux中有關讀緩存與交換的參數如下有兩個,可以在/etc/sysctl.conf中加上兩行:

  1. vm.swappiness=0  
  2. vm.overcommit_memory=2  

這些參數可以在/proc/sys/vm/中檢視。

8.共享記憶體的設定

系統中共享記憶體的預設值都很低,為了更好的利用伺服器資源,我們将對其進行調整,網上有一個調整的腳本。

  1. #!/bin/bash  
  2. page_size=`getconf PAGE_SIZE`    
  3. phys_pages=`getconf _PHYS_PAGES`    
  4. shmall=`expr $phys_pages / 2`    
  5. shmmax=`expr $shmall \* $page_size`    
  6. echo kernel.shmmax = $shmmax
  7. echo kernel.shmall = $shmall

直接以root身份運作 ./shmsetup >> /etc/sysctl.conf

sysctl -p

9.日志檔案轉移到記憶體

當一台機器處于運作中時,最好是将系統日志放在記憶體中,當系統關閉時再将其複制到硬碟,當你運作一台開啟了syslog功能的筆記本電腦或移動裝置時,ramlog可以幫助你提高系統電池或移動裝置閃存驅動器的壽命,使用ramlog的一個好處是,不用再擔心某個守護程序每隔30秒向syslog發送一條消息,放在以前,硬碟必須随時保持運轉,這樣對硬碟和電池都不好。

10.先打包,後寫入

在記憶體中劃分出固定大小的空間儲存日志檔案,這意味着筆記本電腦硬碟不用一直保持運轉,隻有當某個守護程序需要寫入日志時才運轉,注意ramlog使用的記憶體空間大小是固定的,否則系統記憶體會很快被用光,如果筆記本使用固态硬碟,可以配置設定50-80MB記憶體給ramlog使用,ramlog可以減少許多寫入周期,極大地提高固态硬碟的使用壽命。