Ubuntu
調整 pm.start_servers 或 pm.min/max_spare_servers
由於即將舉行的活動,我們預計在 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 根本沒有維護,並且包含永遠不會修補的漏洞。其中一些允許黑客控制您的網路伺服器……