我们正在开发一个在(NginX+PHP-FPM)上使用Drupal 7的应用程序。但在性能测试过程中,我们观察到ApplicationsServer消耗了非常高的CPU。平均CPU消耗在90%的范围内(PHP-FPM消耗的最大处理器)。内存消耗非常低。
我们已经尝试过各种并发用户负载,如25-50-100。但即使有这种用户负载,我们也观察到CPU消耗约为90%,因此响应时间非常高。
我们使用的是带有RHEL(AWS EC2)操作系统的4核CPU。应用程序流是反向代理(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 5.5或更新版本。(如果您的应用程序支持,则7更好)5.3不再受支持
- 启用PHP优化器(包含在5.5中,可能是一个单独的包),或者在旧版本中使用类似APC的东西。这可以显著提高性能,允许缓存和重用已编译的代码
- 使用缓存。根据您的应用程序,此选项会有所不同。如果memcached不经常更改,那么能够存储数据并从中读取数据可以提高性能。APCu(apc的用户缓存)可以用作内存中的缓存。某些应用程序检测并使用此功能(如果可用)
- 添加分析。看看这里像新遗迹一样的东西。它将显示您的应用程序在哪里花费了大部分时间
- 如果您的应用程序执行任何代码生成(如条令),请确保将其配置为在部署时手动运行,而不是在每次请求时运行
如果你已经在drupal上进行了任何自定义开发,你可能需要检查你的代码,以确保它不会花太多时间做数据库查询之类的事情。分析可以帮助识别这些问题。
根据您可以利用缓存的程度,您应该能够在实例上获得更多的用户。