Nginx+;AWS EC2实例上的Php Fpm缩放问题
我们正在应用程序的网页上使用蝗虫(1000个用户)执行负载测试 实例类型:t3a.medium 实例正在负载平衡器后面运行。我们正在使用RDS Aurora数据库,其CPU利用率达到峰值70%左右。EC2实例度量是健康的。编辑:实例内存消耗在可用4 GB内存的800 MB以内 有多个Nginx+;AWS EC2实例上的Php Fpm缩放问题,php,amazon-web-services,nginx,amazon-ec2,Php,Amazon Web Services,Nginx,Amazon Ec2,我们正在应用程序的网页上使用蝗虫(1000个用户)执行负载测试 实例类型:t3a.medium 实例正在负载平衡器后面运行。我们正在使用RDS Aurora数据库,其CPU利用率达到峰值70%左右。EC2实例度量是健康的。编辑:实例内存消耗在可用4 GB内存的800 MB以内 有多个502服务器错误:坏网关,有时还有500和520错误 错误1: 2020/10/08 16:58:21 [error] 4344#4344: *41841 connect() to unix:/var/run/php
502服务器错误:坏网关
,有时还有500
和520
错误
错误1:
2020/10/08 16:58:21 [error] 4344#4344: *41841 connect() to unix:/var/run/php/php7.2-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: <PublicIP>, server: <Domain name>, request: "GET <webpage> HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "<Domain name>"
/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 8096;
multi_accept on;
use epoll;
epoll_events 512;
}
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;
keepalive_timeout 65;
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text/xml text/css;
gzip_http_version 1.1;
gzip_vary on;
gzip_disable "MSIE [4-6] \.";
include /etc/nginx/conf.d/*.conf;
}
/etc/php/7.2/fpm/php-fpm.conf
emergency_restart_threshold 10
emergency_restart_interval 1m
process_control_timeout 10s
Php fpm重要参数:
user = www-data
group = www-data
listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
pm = static
pm.max_children = 300
/etc/security/limits.conf
nginx soft nofile 30000
nginx hard nofile 50000
/etc/sysctl.conf
net.nf_conntrack_max = 131072
net.core.somaxconn = 131072
net.core.netdev_max_backlog = 65535
kernel.msgmnb = 131072
kernel.msgmax = 131072
fs.file-max = 131072
我们错过了什么?有人能指出正确的方向吗?所以我们能够解决这个问题。问题是
php fpm
没有访问系统资源的权限。您可能需要根据硬件规格更改值。
因此,我们的最终配置如下所示:
这看起来像是您的服务器在生成php fpm子级时内存不足。这将导致间歇性502/504,并且不会使实例在AWS仪表板中显示为不健康。假设您在测试环境中,您可以编写一个脚本来检查服务器上的可用内存,并让它在低于某个值时重新启动fpm服务。我不会在prod中这样做,但它至少会缩小问题的范围。另一个潜在的问题是,您可能正在耗尽aurora中可用的连接数。您允许8000名工作人员,但RDS根据实例大小强制执行max_连接-检查并验证您没有违反that@TheGentleman在可用的4GB内存中,它的使用量永远不会超过800MB。我们已经确认,测试正在运行。@mcfinnigan,谢谢您的关注
nginx soft nofile 30000
nginx hard nofile 50000
net.nf_conntrack_max = 131072
net.core.somaxconn = 131072
net.core.netdev_max_backlog = 65535
kernel.msgmnb = 131072
kernel.msgmax = 131072
fs.file-max = 131072