Recentemente ho scoperto che la memoria del mio blog veniva sempre "mangiata" di tanto in tanto Dopo aver effettuato l'accesso al backend, occasionalmente si verificavano dei ritardi. All'inizio sospettavo che fosse causato da uno Swap insufficiente, quindi ho aggiunto alcuni gigabyte di Swap all'host VPS e ho osservato Dopo un po', ho scoperto che non importa quanto fosse grande lo Swap, veniva lentamente "mangiato"!
È ovvio che alcuni servizi PHP hanno occupato la memoria del VPS e non l'hanno rilasciata, causando la chiamata di Swap dopo che la memoria fisica è esaurita. Ovviamente, Swap non funziona in modo efficiente come la memoria fisica, quindi il processo diventa incollato. Considerando che il sito WordPress attualmente utilizza troppi temi e plug-in, è normale che si verifichi questa situazione.
Nell'architettura LNMP, PHP funziona in modalità FastCGI. Secondo la dichiarazione ufficiale, php-cgi riciclerà tutta la memoria utilizzata dallo script alla fine di ogni richiesta, ma non la rilascerà al sistema operativo, ma continuerà. per trattenerlo. Rispondere alla successiva richiesta PHP. E php-fpm è il gestore dei processi FastCGI, utilizzato per controllare la memoria e i processi di php.
Pertanto, la soluzione è ottimizzare il numero totale di processi e la memoria occupata da un singolo processo tramite php-fpm, risolvendo così il problema del processo php-fpm che occupa molta memoria e non rilascia memoria. Ulteriori metodi di ottimizzazione del server Linux ed esperienza nella creazione di siti Web, nonché:
- Tutorial sul funzionamento e sulla sintassi di base del comando Linux Crontab per attività pianificate - Automazione VPS/Server
- Valutazione delle prestazioni della velocità dell'host VPS Alibaba Cloud Japan-Japan SoftBank Hong Kong NTT Line
- La risoluzione dei nomi di dominio DNS consente a DNSSEC di impedire il dirottamento DNS: impostazioni DNS di Google Cloud DNSSEC
PS: aggiornato il 14 dicembre 2018, Se la memoria e le prestazioni del tuo host VPS non sono molto buone, è meglio abilitare la memorizzazione nella cache in questo momento per risparmiare notevolmente il consumo di risorse: WordPress abilita l'accelerazione della cache Nginx fastcgi_cache metodo -Esempio di configurazione Nginx.
PS: aggiornato il 29 settembre 2019, Grazie all'artefatto di ottimizzazione del server ngx_pagespeed sviluppato da Google, integra un set completo di strumenti di ottimizzazione come caricamento ritardato delle immagini, webp adattivo, ottimizzazione JS e CSS e ottimizzazione delle immagini ottimizzazione: artefatto di ottimizzazione di PageSpeed Server-Nginx distribuisce il modulo ngx_pagespeed e sperimenta effetti accelerati.
1. Analizza e determina l'utilizzo della memoria di php-fpm
Se scopri che l'host VPS è bloccato, controlla prima l'utilizzo della memoria. I comandi comunemente utilizzati sono Top, Glances, Free, ecc. Gli amici che non conoscono questi comandi possono prima verificare se la stazione mineraria lo fa: Sistema Linux Riepilogo dei comandi di monitoraggio: CPU master, memoria, I/O del disco, ecc. per individuare i colli di bottiglia delle prestazioni.
Utilizza il comando Sguardi e premi m per visualizzare l'utilizzo della memoria del processo host VPS corrente Ordinali dalla memoria più occupata a quella meno occupata (oppure usa il comando Top e premi M, l'effetto è lo stesso). Come mostrato di seguito (clicca per ingrandire):
3.2 Ridurre il numero di processi php-fpm
Se la memoria del tuo host VPS è occupata ed esaurita, puoi controllare il numero dei tuoi processi php-fpm Calcola in base al numero di processi php-fpm = memoria/2/30 Il numero di processi php-fpm adatti 1 GB di memoria è 10- Tra 20 e 20, dipende dai componenti aggiuntivi caricati dal tuo PHP.
3.3 Esempio di configurazione php-fpm
Qui viene utilizzata come dimostrazione una configurazione VPS di php-fpm con 1 GB di memoria. Nel funzionamento reale, il valore dell'impostazione deve essere considerato in base alle prestazioni del server stesso, di PHP, ecc.
pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。
4. Risolvi il problema che il processo php-fpm non rilascia memoria
Il problema di cui sopra di ridurre l'utilizzo della memoria di php-fpm si ottiene riducendo il numero totale di processi php-fpm. Durante l'uso effettivo, si è riscontrato che il processo php-fpm presenta ancora il problema di occupare memoria per molto tempo rilasciandolo. La soluzione è ridurre il numero di pm.max_requests.
Il numero massimo di richieste, max_requests, significa che quando il numero di richieste elaborate da un processo PHP-CGI raggiunge max_requests, il processo verrà riavviato automaticamente, raggiungendo così lo scopo di liberare memoria. Prendi come esempio le impostazioni dell'host VPS con 1 GB di memoria (se il valore impostato non raggiunge il livello di liberazione della memoria, puoi continuare ad abbassarlo):
pm.max_requests = 500
Quando il processo php-fpm raggiunge il valore impostato da pm.max_requests, il processo verrà riavviato per liberare memoria. L'immagine sotto è il risultato dopo il mio test. Si può vedere che il processo php-fpm è stato interrotto forzatamente e la memoria è stata rilasciata.
5. Riepilogo
Per requisiti di memoria di grandi dimensioni e di concorrenza e disponibilità, si consiglia di utilizzare la modalità di gestione statica + il più grande pm.max_children. Se si tratta di un server con memoria ridotta, si consiglia di utilizzare la modalità dinamica o ondemand e ridurre il numero di processi pm.start_servers e pm.max_spare_servers.
Perché non ho regolato i parametri per ottenere l'effetto desiderato? Secondo l'esperienza di wzfou.com, i parametri del file di configurazione php-fpm non possono essere generalizzati. Devono essere adattati in base alle prestazioni del server, al contenuto dinamico del WEB e ai requisiti di disponibilità. Se la memoria è occupata per molto tempo, lo è meglio controllare se c'è una perdita di memoria.
Aggiornato il 9 ottobre 2019, Se i parametri php-fpm sono regolati troppo piccoli, potrebbe verificarsi un errore 502 Soluzione: risolvere l'errore 502 nel menu di salvataggio modifica in background di WordPress.