ODOO12服务器性能评估与监控

  • A+

主要配置信息

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.   
  6. Handle 0x1000, DMI type 16, 15 bytes  
  7. Physical Memory Array  
  8.     Location: Other  
  9.     Use: System Memory  
  10.     Error Correction Type: Multi-bit ECC  
  11.     Maximum Capacity: 32 GB  
  12.     Error Information Handle: Not Provided  
  13.     Number Of Devices: 2  
  14.   
  15. Handle 0x1100, DMI type 17, 21 bytes  
  16. Memory Device  
  17.     Array Handle: 0x1000  
  18.     Error Information Handle: 0x0000  
  19.     Total Width: 64 bits  
  20.     Data Width: 64 bits  
  21.     Size: 16384 MB  
  22.     Form Factor: DIMM  
  23.     Set: None  
  24.     Locator: DIMM 0  
  25.     Bank Locator: Not Specified  
  26.     Type: RAM  
  27.     Type Detail: None  
  28.   
  29. Handle 0x1101, DMI type 17, 21 bytes  
  30. Memory Device  
  31.     Array Handle: 0x1000  
  32.     Error Information Handle: 0x0000  
  33.     Total Width: 64 bits  
  34.     Data Width: 64 bits  
  35.     Size: 16384 MB  
  36.     Form Factor: DIMM  
  37.     Set: None  
  38.     Locator: DIMM 1  
  39.     Bank Locator: Not Specified  
  40.     Type: RAM  
  41.     Type Detail: None  
  42.   
  43. [root@odoodev ~]  

3.查看硬盘信息

  1. [root@odoodev ~]# fdisk -l  
  2.   
  3. 磁盘 /dev/vda:64.4 GB, 64424509440 字节,125829120 个扇区  
  4. Units = 扇区 of 1 * 512 = 512 bytes  
  5. 扇区大小(逻辑/物理):512 字节 / 512 字节  
  6. I/O 大小(最小/最佳):512 字节 / 512 字节  
  7. 磁盘标签类型:dos  
  8. 磁盘标识符:0x000ca9d8  
  9.   
  10.    设备 Boot      Start         End      Blocks   Id  System  
  11. /dev/vda1   *        2048     2099199     1048576   83  Linux  
  12. /dev/vda2         2099200   125829119    61864960   8e  Linux LVM  
  13.   
  14. 磁盘 /dev/mapper/centos_pgsqlhosta-root:38.2 GB, 38235275264 字节,74678272 个扇区  
  15. Units = 扇区 of 1 * 512 = 512 bytes  
  16. 扇区大小(逻辑/物理):512 字节 / 512 字节  
  17. I/O 大小(最小/最佳):512 字节 / 512 字节  
  18.   
  19.   
  20. 磁盘 /dev/mapper/centos_pgsqlhosta-swap:6442 MB, 6442450944 字节,12582912 个扇区  
  21. Units = 扇区 of 1 * 512 = 512 bytes  
  22. 扇区大小(逻辑/物理):512 字节 / 512 字节  
  23. I/O 大小(最小/最佳):512 字节 / 512 字节  
  24.   
  25.   
  26. 磁盘 /dev/mapper/centos_pgsqlhosta-home:18.7 GB, 18668847104 字节,36462592 个扇区  
  27. Units = 扇区 of 1 * 512 = 512 bytes  
  28. 扇区大小(逻辑/物理):512 字节 / 512 字节  
  29. I/O 大小(最小/最佳):512 字节 / 512 字节  
  1. [root@odoodev ~]# df -Th  
  2. 文件系统                           类型      容量  已用  可用 已用% 挂载点  
  3. /dev/mapper/centos_pgsqlhosta-root xfs        36G   14G   22G   39% /  
  4. devtmpfs                           devtmpfs   16G     0   16G    0% /dev  
  5. tmpfs                              tmpfs      16G   12K   16G    1% /dev/shm  
  6. tmpfs                              tmpfs      16G  1.6G   15G   11% /run  
  7. tmpfs                              tmpfs      16G     0   16G    0% /sys/fs/cgroup  
  8. /dev/vda1                          xfs      1014M  206M  809M   21% /boot  
  9. /dev/mapper/centos_pgsqlhosta-home xfs        18G   18G   20K  100% /home  
  10. tmpfs                              tmpfs     3.2G     0  3.2G    0% /run/user/26  
  11. tmpfs                              tmpfs     3.2G   12K  3.2G    1% /run/user/42  
  12. tmpfs                              tmpfs     3.2G     0  3.2G    0% /run/user/0  
  13. [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.   
  4. 14时37分34秒     CPU     %user     %nice   %system   %iowait    %steal     %idle  
  5. 14时37分37秒     all      0.25      0.00      0.17      0.00      0.00     99.58  
  6. 14时37分40秒     all      0.17      0.00      0.08      0.00      0.00     99.75  
  7. 14时37分43秒     all      0.25      0.00      0.08      0.00      0.00     99.67  
  8. 14时37分46秒     all      0.25      0.00      0.17      0.08      0.00     99.50  
  9. 14时37分49秒     all      0.33      0.08      0.42      0.00      0.00     99.16  
  10. 平均时间:     all      0.25      0.02      0.18      0.02      0.00     99.53  
  11. [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.   
  4. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  5. vda               2.10         0.48        25.19    1451558   76122344  
  6. dm-0              1.79         0.47        25.18    1423879   76107735  
  7. dm-1              0.00         0.00         0.00       2464          0  
  8. dm-2              0.00         0.00         0.00      14500      12490  
  9.   
  10. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  11. vda              14.00         4.00        25.75          8         51  
  12. dm-0              9.50         4.00        25.75          8         51  
  13. dm-1              0.00         0.00         0.00          0          0  
  14. dm-2              0.00         0.00         0.00          0          0  
  15.   
  16. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  17. vda               1.50         0.00         3.25          0          6  
  18. dm-0              1.00         0.00         3.25          0          6  
  19. dm-1              0.00         0.00         0.00          0          0  
  20. dm-2              0.00         0.00         0.00          0          0  
  21.   
  22. [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.   
  4. 15时10分27秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util  
  5. 15时10分29秒  dev252-0     13.50      0.00     50.50      3.74      0.00      5.93      0.11      0.15  
  6. 15时10分29秒  dev253-0      9.00      0.00     50.50      5.61      0.08      8.89      8.89      8.00  
  7. 15时10分29秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  8. 15时10分29秒  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  9.   
  10. 15时10分29秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util  
  11. 15时10分31秒  dev252-0      6.00      0.00    506.00     84.33      0.00      4.17      0.08      0.05  
  12. 15时10分31秒  dev253-0      6.50      0.00    506.00     77.85      0.03      4.00      3.23      2.10  
  13. 15时10分31秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  14. 15时10分31秒  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  15.   
  16. 15时10分31秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util  
  17. 15时10分33秒  dev252-0      1.50      0.00     25.50     17.00      0.00      5.00      0.00      0.00  
  18. 15时10分33秒  dev253-0      1.00      0.00     25.50     25.50      0.01      7.50      7.50      0.75  
  19. 15时10分33秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  20. 15时10分33秒  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  21.   
  22. 平均时间:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util  
  23. 平均时间:  dev252-0      7.00      0.00    194.00     27.71      0.00      5.36      0.10      0.07  
  24. 平均时间:  dev253-0      5.50      0.00    194.00     35.27      0.04      6.88      6.58      3.62  
  25. 平均时间:  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  26. 平均时间:  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00  
  27. [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守护进程,默认情况下,它们都是自动运行的:

序号守护进程描述
1Apmd高级电源管理守护进程
2Nfslock用于NFS文件锁定
3IsdnISDN Moderm支持
4Autofs在后台自动挂载文件系统(如自动挂载CD-ROM)
5Sendmail邮件传输代理
6XfsX 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.     
  3. page_size=`getconf PAGE_SIZE`    
  4. phys_pages=`getconf _PHYS_PAGES`    
  5. shmall=`expr $phys_pages / 2`    
  6. shmmax=`expr $shmall \* $page_size`    
  7. echo kernel.shmmax = $shmmax    
  8. echo kernel.shmall = $shmall    

直接以root身份运行 ./shmsetup >> /etc/sysctl.conf

sysctl -p

9.日志文件转移到内存

当一台机器处于运行中时,最好是将系统日志放在内存中,当系统关闭时再将其复制到硬盘,当你运行一台开启了syslog功能的笔记本电脑或移动设备时,ramlog可以帮助你提高系统电池或移动设备闪存驱动器的寿命,使用ramlog的一个好处是,不用再担心某个守护进程每隔30秒向syslog发送一条消息,放在以前,硬盘必须随时保持运转,这样对硬盘和电池都不好。

10.先打包,后写入

在内存中划分出固定大小的空间保存日志文件,这意味着笔记本电脑硬盘不用一直保持运转,只有当某个守护进程需要写入日志时才运转,注意ramlog使用的内存空间大小是固定的,否则系统内存会很快被用光,如果笔记本使用固态硬盘,可以分配50-80MB内存给ramlog使用,ramlog可以减少许多写入周期,极大地提高固态硬盘的使用寿命。

moonrong
  • 版权声明:本站原创文章,于2020年10月7日11:11:47,由 发表,共 13824 字。
  • 版权声明: 本文由于2020年10月7日11:11:47 发表在 好派笔记,共 13824 字。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: