Drupal7 + NginX和PHP-FPM的CPU消耗非常高

时间:2015-12-22 16:14:50

标签: php nginx drupal amazon-ec2

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

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

我们正在使用4核心CPU和RHEL(AWS EC2)操作系统。 应用程序流程是反向代理(Nginx) - > Application Server(Drupal 7 + NginX + PHP-FPM)

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

nginx.conf: -

Traceback (most recent call last):
File "C:\Users\Dilshad\Desktop\project_7-8-2015\8_bands\Program_camera - test.py", line 68, in <module>
min_score = min(difference)                                                         # closest reference image
TypeError: unorderable types: list() < int()

virtual.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;
...
}

PHP-fpm.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 / www.conf: -

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 使用PHP 5.5或更高版本。 (如果您的应用程序支持,则7更好)5.3不再受支持。
  2. 启用PHP优化器(包含在5.5中,可能是一个单独的包)或使用类似APC的旧版本。这可以提供显着的性能提升,允许缓存和重用已编译的代码。
  3. 使用缓存。具有此选项将根据您的应用程序而有所不同。如果不经常更改,能够存储数据并从memcached读取数据可以提高性能。 APCu(apc的用户缓存)可以用作内存缓存。如果可用,某些应用程序会检测并使用它。
  4. 添加分析。看看像newrelic这样的东西。它将显示您的应用程序在大部分时间内花费的时间。
  5. 如果您的应用程序生成任何代码(如doctrine),请确保将其配置为在部署时手动运行,而不是在每个请求上运行。
  6. 如果您在drupal上进行了任何自定义开发,您可能需要检查代码以确保其不会花费大量时间来执行数据库查询等操作。分析可以帮助识别这些问题。

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