Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx+;AWS EC2实例上的Php Fpm缩放问题_Php_Amazon Web Services_Nginx_Amazon Ec2 - Fatal编程技术网

Nginx+;AWS EC2实例上的Php Fpm缩放问题

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

我们正在应用程序的网页上使用蝗虫(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/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
没有访问系统资源的权限。您可能需要根据硬件规格更改值。 因此,我们的最终配置如下所示:

  • 在/etc/security/limits.conf中,添加以下行:

    nginx软文件10000

    nginx硬文件30000

    根软文件10000

    根硬文件30000

    www数据软文件10000

    www数据硬文件30000

  • 在/etc/sysctl.conf中,添加以下值

    net.nf\u conntrack\u max=231072

    net.core.somaxconn=231072

    net.core.netdev_max_backlog=65535

    kernel.msgmnb=231072

    kernel.msgmax=231072

    fs.file-max=70000

  • 在/etc/nginx/nginx.conf中,进行更改或添加,使其最终具有这些值(请根据您的用例和服务器容量进行更改):

    工人自动处理

    工人档案30000份

    事件{ 工人(8096),; 多重接受; 使用epoll; epoll_事件512; }

    发送文件到

    tcp_nopush on

    tcp_节点延迟开启

    保持生命超时65

    gzip on

    gzip_comp_二级

    gzip_最小长度1000

    gzip_类型text/xml text/css

    gzip_http_版本1.1

    gzip_随时间而变化

    gzip_禁用“MSIE[4-6]”

  • 在/etc/php/7.2/fpm/php-fpm.conf中,将值更改为如下所示:

    紧急重启阈值=10

    紧急重启间隔=1m

    过程控制超时=10s

    rlimit_文件=10000

  • 在/etc/php/7.2/fpm/pool.d/www.conf中,将值更改为如下所示:

    用户=www数据

    组=www数据

    listen.backlog=4096

    listen.owner=www-data

    listen.group=www数据

    );listen.mode=0660

    pm=静态

    pm.max_children=1000


  • 这看起来像是您的服务器在生成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