Linux AJAX 网页消耗量大 CPU 的 Web 服务器配置

Linux web server configuration for AJAX web page highly consumed CPU

我有基于 AJAX 的聊天 www 服务同时供许多用户使用,这会消耗大量 CPU 资源并需要许多数据库连接。我问的是 Debian 9 与 MariaDB 和 Apache 以及 PHP 5.6(7.x 不适用于我的服务)的此类场景的服务器配置。我将参数 Maximum No. of Connections (max_used_connections in my.cnf) 增加到 2000: max_connections = 2000 以避免数据库错误。 我还应该更改哪个参数以提高服务器的工作效率并减少聊天延迟?

我进行了测试:同时我在一个浏览器 (Chrome 76.0.3809.100) 上打开了 200 个聊天 window,我看到了大约 60 秒的延迟(应该是 1 秒,因为 php 代码),我观察到我的服务器只有 21 个 Web 进程。如何改进服务器配置?

下面是来自服务器控制台的命令 "ps aux" 的输出,我用它来查看 CPU 进程的使用情况

USER    PID %CPU    %MEM    VSZ RSS TTY STAT    START   TIME    COMMAND    
postfix 21107   0   0   83704   6816    ?   S   22:12   00:00   pickup    
root    25493   0   0   0   0   ?   I   22:58   00:00   [kworker/u16:1-e]    
root    26082   0   0   0   0   ?   I   21:46   00:00   [kworker/6:0-eve]    
root    26094   0   0   0   0   ?   I   21:46   00:00   [kworker/7:2-cgr]    
root    26253   0   0   0   0   ?   I   21:47   00:00   [kworker/4:1-eve]    
root    26417   0   0   0   0   ?   I   21:47   00:00   [kworker/2:0-eve]    
www-data    26580   0   0   519484  10732   ?   S   21:48   00:00   php-fpm:    
www-data    26581   0   0   519484  10732   ?   S   21:48   00:00   php-fpm:    
root    26585   0   0   0   0   ?   I   21:48   00:00   [kworker/1:0-eve]    
root    27185   0   0   0   0   ?   I   21:51   00:00   [kworker/0:1-eve]
root    28031   0   0   0   0   ?   I   23:00   00:00   [kworker/2:2-eve]    
postfix 30240   0   0   83704   6800    ?   S   23:00   00:00   anvil    
root    1029    0,1 0   658632  18944   ?   Sl  20:32   00:09   /usr/bin/python3    
clamav  734 0,2 2,4 1008592 787196  ?   Ssl 20:32   00:25   /usr/sbin/clamd    
www-data    9793    3,8 0,3 605264  114312  ?   S   22:05   02:22   /usr/sbin/apache2    
www-data    10709   3,9 0,3 853140  120500  ?   S   22:06   02:25   /usr/sbin/apache2    
www-data    10668   4,3 0,3 597996  104668  ?   S   22:06   02:40   /usr/sbin/apache2    
www-data    9883    4,5 0,3 597060  105312  ?   S   22:05   02:47   /usr/sbin/apache2    
www-data    9791    4,6 0,3 604864  115324  ?   R   22:05   02:52   /usr/sbin/apache2    
www-data    9792    5,1 0,3 598828  108416  ?   S   22:05   03:07   /usr/sbin/apache2    
www-data    10073   5,4 0,3 599192  105860  ?   S   22:05   03:18   /usr/sbin/apache2    
www-data    10363   5,6 0,3 844492  113288  ?   S   22:06   03:25   /usr/sbin/apache    
www-data    9794    5,8 0,3 851780  120412  ?   S   22:05   03:34   /usr/sbin/apache2    
www-data    9795    6   0,3 599708  108424  ?   S   22:05   03:42   /usr/sbin/apache2    
www-data    9822    6,1 0,3 602568  109008  ?   S   22:05   03:45   /usr/sbin/apache2    
www-data    10710   6,3 0,3 598836  105540  ?   S   22:06   03:52   /usr/sbin/apache2    
www-data    27116   7,2 0,3 608036  114096  ?   S   22:44   01:37   /usr/sbin/apache2    
mysql   946 9   0,6 958820  221472  ?   Ssl 20:32   14:01   /usr/sbin/mysqld    
www-data    27013   9,5 0,3 598352  104688  ?   S   22:44   02:08   /usr/sbin/apache2    
www-data    27119   10,5    0,3 602800  110460  ?   S   22:44   02:21   /usr/sbin/apache2    
www-data    27054   10,6    0,3 596540  104216  ?   S   22:44   02:23   /usr/sbin/apache2    
www-data    27117   10,8    0,3 596612  103268  ?   S   22:44   02:25   /usr/sbin/apache2

您的环境可以通过以下方式得到改善:

  • 检查服务器的硬件并确定 RAM 和 CPU 的要求。
  • 使用 Mysqltuner 脚本调整数据库引擎性能。
  • 检查您的查询并尝试改进它们。
  • 在 Apache 上安装缓存模块,例如:memcached 和 apcu。
  • 建议使用 PHP-FPM 以获得更好的性能。

然后您需要进行基准测试以检查硬件规格和配置是否适合您的环境。

有许多基准测试工具,例如:ab - Apache HTTP 基准测试工具,或任何其他在线工具。