【问题标题】:Very high CPU consumption for Drupal7 + NginX and PHP-FPMDrupal7 + NginX 和 PHP-FPM 的 CPU 消耗非常高
【发布时间】:2015-12-23 15:22:13
【问题描述】:

我们正在开发一个在 (NginX + PHP-FPM) 上使用 Drupal 7 的应用程序。但在性能测试期间,我们观察到 Applications Server 消耗了非常高的 CPU。平均 CPU 消耗在 90% 的范围内(最大处理器被 PHP-FPM 消耗)。内存消耗非常低。

我们已经尝试过各种并发用户负载,例如 25-50-100。但即使有这种用户负载,我们也观察到 CPU 消耗约为 90%,因为响应时间非常长。

我们使用 4 核 CPU 和 RHEL (AWS EC2) 操作系统。 应用流程为反向代理(Nginx)->应用服务器(Drupal 7+NginX+PHP-FPM)

以下是我所做的配置更改-

nginx.conf:-

user              nginx;
worker_processes 4;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
worker_rlimit_nofile    20480;
events {
   use epoll;
   worker_connections  10240;
   multi_accept on;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay     on;
    server_tokens   off;
    keepalive_timeout  65;
    gzip  on;
...
}

virtual.conf:-

location ~ '\.php$|^/update.php' {
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;

    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;

    include fastcgi_params;
}

php-fpm.conf:-

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 15s
daemonize = no

php-fpm/www.conf:-

listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0664
user = nginx
group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

有人可以指导我们如何解决这个问题吗?

【问题讨论】:

  • 可能没有足够的信息来诊断问题,而无法查看您的服务器是如何配置的。您使用的是什么大小的实例?你安装的是什么版本的php?你在使用 php 优化器吗?您是否进行了任何分析以查看 CPU 的使用位置?您是否启用了任何缓存?
  • 您使用的是 c4.xlarge 实例大小吗?无论如何,对于一个平均规模的网站来说,这应该足够了。只要其他一切都正确完成。
  • 以下是所需的系统信息:\n 1. Linux 是 *el6.x86_64(AWS rhel 实例,四核) 2. RAM 是 8 GB 3. PHP 版本 5.3.3 4. 没有 PHP使用了优化器 5. 没有启用缓存 6. 没有内置分析 我们正在使用 JMeter 测试性能
  • 您正在使用配置为“开发”状态的 PHP。我将在下面提供有关您可以采取哪些措施来提高性能的答案。

标签: php nginx drupal amazon-ec2


【解决方案1】:

您可以执行以下操作来提高生产安装中的性能。

  1. 使用 PHP 5.5 或更新版本。 (如果您的应用程序支持,7 更好)5.3 不再受支持。
  2. 启用 PHP 优化器(包含在 5.5 中,可能是一个单独的包)或在旧版本中使用 APC 之类的东西。这可以显着提升性能,允许缓存和重用已编译的代码。
  3. 使用缓存。与此相关的选项将根据您的应用程序而有所不同。如果数据不经常更改,则能够存储数据并从 memcached 读取数据可以提高性能。 APCu(apc 的用户缓存)可以用作内存缓存。如果可用,一些应用程序会检测并使用它。
  4. 添加分析。看看这里的 newrelic 之类的东西。它将向您显示您的应用程序大部分时间都花在了哪里。
  5. 如果您的应用程序执行任何代码生成(如教义),请确保将其配置为在部署时手动运行,而不是在每次请求时运行。

如果您在 drupal 上进行过任何自定义开发,您可能需要检查您的代码以确保它不会花费过多的时间来处理数据库查询等事情。分析有助于识别这些问题。

根据您可以利用缓存的程度,您应该能够在您的实例上获得更多用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多