
Tengo problemas para encontrar un cuello de botella en el lento rendimiento de mi servidor. Sitio único de WordPress (de 10 a 40 usuarios en línea) con almacenamiento en caché Fastcgi y almacenamiento en caché HTML completo en Cloudflare. El rendimiento del sitio es bueno para los visitantes debido al almacenamiento en caché, los usuarios que han iniciado sesión enfrentan tiempos de carga de páginas de 1 a 10 segundos. El monitor de consultas se utiliza para la depuración. El sitio funcionaba mucho mejor en una máquina de 1 núcleo y 2 GB de RAM. No tengo idea de qué está causando esto. Cualquier ayuda es muy apreciada. Gracias.
Ejemplo de carga lenta de una sola publicación:Monitor de consultas carga lenta
Ejemplo de buena carga de una sola publicación:Monitor de consultas carga rápida
I'm running KVM 2 Cores @ 3.50+ GHz 8 GB Memory 160 GB SSD.
nginx version: nginx/1.14.1
PHP 7.4.22 (cli) + memcached
10.6.3-MariaDB
root@localhost:~# free -m
total used free shared buff/cache available
Mem: 7987 1546 195 121 6245 6020
Swap: 8191 268 7923
Configuración de PHP-FPM: (Intenté aumentarlas, sin cambios)
pm = dynamic
pm.max_children = 100
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 200
Base de datos
Server Version 5.5.5
Extension mysqli
Client Version 70422 (7.4.22)
innodb_buffer_pool_size 2147483648 (~2 GB)
key_buffer_size 134217728 (~128 MB)
max_allowed_packet 16777216 (~16 MB)
max_connections 151
query_cache_limit 1048576 (~1 MB)
query_cache_size 67108864 (~64 MB)
query_cache_type ON
nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 2048;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
# server_tokens off;
proxy_buffering on;
access_log off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
# access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
################## caches ###############
proxy_cache_path /etc/nginx/static-cache levels=1:2 keys_zone=s3_cache:200m max_size=1800G inactive=10y use_temp_path=off;
fastcgi_cache_path /etc/nginx/fastcgi-cache levels=1:2 keys_zone=phpcache:50m max_size=1g inactive=7d use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
#############################
client_max_body_size 2000M;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
configuración del servidor nginx
# pass the PHP scripts to FastCGI server
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 150;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache phpcache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
add_header X-FastCGI-Cache $upstream_cache_status;
}
EDITAR: Hice algunas pruebas fuera de Wordpress. Generando 100000 cadenas aleatorias en un ciclo.
<?php $start_time = microtime(true); ?>
<?php ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
# define("WP_USE_THEMES", false);
#require_once("/var/www/server/wp-blog-header.php");
for($i = 0; $i < 100000; $i++){
generateRandomString(2);
}
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
?>
This page was generated in <?php echo(number_format(microtime(true) - $start_time, 2)); ?>
Y los resultados son muy similares. Algunas solicitudes finalizan en 0,1 segundos y otras tardan hasta 5 segundos. Parece que PHP está funcionando bien. ¿Tal vez es php-fpm lo que ralentiza las cosas y luego se conecta con nginx?
Respuesta1
Parece que el problema está solucionado. Me comuniqué con mi proveedor de VPS, confirmaron que mi servidor tiene estrangulamiento térmico y resolverán este problema. Esto responde a por qué algunas solicitudes son lentas.