Ubuntu

調整 pm.start_servers 或 pm.min/max_spare_servers

  • February 10, 2022

由於即將舉行的活動,我們預計在 Ubuntu、NGINX 和 PHP7.1-fpm 上執行的基於 Magento2 的電子商務網站將持續數週的高流量(大約 2000 名同時使用者)。由於我們的目錄非常大,我們已將 Digitalocean 液滴升級到最高規格,即 192 GB 記憶體和 32 個 vCPU。

該站點執行速度非常快,但是,一旦我們達到 800 多個使用者,它就會開始變得很慢,一段時間後,它最終會顯示 502 Bad Gateway 錯誤,這是我們在這個臨時事件期間無法承受的。

我們最近的錯誤現在與 pm.start_servers 或 pm.min/max_spare_servers 相關,它們是:

   [16-Mar-2020 21:50:35] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle$
   [16-Mar-2020 21:50:36] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idl$

我們已經嘗試了幾種設置,但似乎沒有任何設置能夠可靠地工作。以下是一些設置:

/etc/php/7.1/fpm/pool.d/www.conf:

   pm = dynamic
   pm.start_servers = 20
   pm.min_spare_servers = 20
   pm.max_spare_servers = 50
   ;pm.process_idle_timeout = 10s;
   pm.max_requests = 0

所以現在我們正在尋找一種解決方案或方法來精確計算這些?我們是否應該更改任何其他注意事項或設置?

這裡是我們的 Magento nginx.conf:

   root $MAGE_ROOT/pub;
   index index.php;
   autoindex off;
   charset UTF-8;
   error_page 404 403 = /errors/404.php;
   #add_header "X-UA-Compatible" "IE=Edge";

   # PHP entry point for setup application
   location ~* ^/setup($|/) {
       root $MAGE_ROOT;
       location ~ ^/setup/index.php {
           fastcgi_pass   fastcgi_backend;

           fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
           fastcgi_param  PHP_VALUE "memory_limit=2048M \n max_execution_time=18000";
           fastcgi_read_timeout 600s;
           fastcgi_connect_timeout 600s;
       fastcgi_buffers 256 16k;
       fastcgi_max_temp_file_size 0;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
       }

       location ~ ^/setup/(?!pub/). {
           deny all;
       }

       location ~ ^/setup/pub/ {
           add_header X-Frame-Options "SAMEORIGIN";
       }
   }

   # PHP entry point for update application
   location ~* ^/update($|/) {
       root $MAGE_ROOT;

       location ~ ^/update/index.php {
           fastcgi_split_path_info ^(/update/index.php)(/.+)$;
           fastcgi_pass   fastcgi_backend;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           fastcgi_param  PATH_INFO        $fastcgi_path_info;
           include        fastcgi_params;
       }

       # Deny everything but index.php
       location ~ ^/update/(?!pub/). {
           deny all;
       }

       location ~ ^/update/pub/ {
           add_header X-Frame-Options "SAMEORIGIN";
       }
   }

   location / {
       try_files $uri $uri/ /index.php$is_args$args;
   }

   location /pub/ {
       location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) {
           deny all;
       }
       alias $MAGE_ROOT/pub/;
       add_header X-Frame-Options "SAMEORIGIN";
   }

   location /static/ {
       # Uncomment the following line in production mode
       # expires max;

       # Remove signature of the static files that is used to overcome the browser cache
       location ~ ^/static/version {
           rewrite ^/static/(version[^/]+/)?(.*)$ /static/$2 last;
       }

       location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
          # add_header Cache-Control "public";
           add_header X-Frame-Options "SAMEORIGIN";
           expires +1y;

           if (!-f $request_filename) {
               rewrite ^/static/?(.*)$ /static.php?resource=$1 last;
           }
       }
       location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
          # add_header Cache-Control "no-store";
           add_header X-Frame-Options "SAMEORIGIN";
           expires    off;

           if (!-f $request_filename) {
              rewrite ^/static/?(.*)$ /static.php?resource=$1 last;
           }
       }
       if (!-f $request_filename) {
           rewrite ^/static/?(.*)$ /static.php?resource=$1 last;
       }
       add_header X-Frame-Options "SAMEORIGIN";
   }

   location /media/ {
       try_files $uri $uri/ /get.php$is_args$args;

       location ~ ^/media/theme_customization/.*\.xml {
           deny all;
       }

       location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
          # add_header Cache-Control "public";
           add_header X-Frame-Options "SAMEORIGIN";
           expires +1y;
           try_files $uri $uri/ /get.php$is_args$args;
       }
       location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
          # add_header Cache-Control "no-store";
           add_header X-Frame-Options "SAMEORIGIN";
           expires    off;
           try_files $uri $uri/ /get.php$is_args$args;
       }
       add_header X-Frame-Options "SAMEORIGIN";
   }

   location /media/customer/ {
       deny all;
   }

   location /media/downloadable/ {
       deny all;
   }

   location /media/import/ {
       deny all;
   }


   location /Preread/ {

           #add_header Cache-Control "no-store";
           #add_header X-Frame-Options "SAMEORIGIN";

           root /var/www/html/;
       #try_files $uri $uri/ /Preread/index.php?$args;
       #try_files $uri $uri/ /Preread/index.php?q=$uri&$args;
           #index index.php index.html index.htm;
       #try_files $uri $uri/ /index.php?q=$uri&$args;
           try_files $uri $uri/ /index.php?q=$uri&$args;
       #try_files $uri $uri/ /get.php$is_args$args;
       #allow all;
   #   try_files $uri $uri/ /get.php$is_args$args;
   }


   # PHP entry point for main application
   location ~ (index|get|static|report|404|503|cs|davidfile|health_check)\.php$ {
       try_files $uri =404;
       fastcgi_pass   fastcgi_backend;
       fastcgi_buffers 1024 4k;

       fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
       fastcgi_param  PHP_VALUE "memory_limit=1048M \n max_execution_time=18000";
       fastcgi_read_timeout 600s;
       fastcgi_connect_timeout 600s;

       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       include        fastcgi_params;
   }

   gzip on;
   gzip_disable "msie6";

   gzip_comp_level 6;
   gzip_min_length 1100;
   gzip_buffers 16 8k;
   gzip_proxied any;
   gzip_types
       text/plain
       text/css
       text/js
       text/xml
       text/javascript
       application/javascript
       application/x-javascript
       application/json
       application/xml
       application/xml+rss
       image/svg+xml;
   gzip_vary on;

   # Banned locations (only reached if the earlier PHP entry point regexes don't match)
   location ~* (\.php$|\.htaccess$|\.git) {
       deny all;
   }

一些專家的幫助將不勝感激,謝謝

執行以下命令並嘗試根據 www.conf 中的結果設置值

ps --no-headers -o "rss,cmd" -C php-fpm7.3 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'

計算值

min_spare_servers + (max_spare_servers - min_spare_servers) / 2

例子

pm.max_children = 120
pm.start_servers = 45
pm.min_spare_servers = 10
pm.max_spare_servers = 80
pm.max_requests = 500

與您的問題無關,但請記住,在 2020 年 3 月,PHP 7.1 根本沒有維護,並且包含永遠不會修補的漏洞。其中一些允許黑客控制您的網路伺服器……

引用自:https://serverfault.com/questions/1007180