Katalog artykułów
- 1 Główny powód, dla którego PHP-FPM jest przeciążony
- 2 Optymalizacja puli procesów PHP-FPM (dopasowanie podstawowych parametrów)
- 3 Włącz monitorowanie stanu PHP-FPM, aby śledzić postęp w dowolnym momencie
- 4 Zoptymalizuj dzienniki PHP-FPM, aby szybko rozwiązywać problemy
- 5 Regularnie restartuj PHP-FPM, aby zapobiec wyciekom pamięci
- 6 A co jeśli problem będzie się powtarzał? Dalsza optymalizacja!
- 7 Podsumowanie: Zoptymalizuj PHP-FPM, a strona internetowa nie będzie się już zawieszać!
Czy kiedykolwiek spotkałeś się z podobną sytuacją?Dostęp do witryny nagle zwolnił, a nawet spowodował błąd 500. Po ponownym uruchomieniu PHP-FPM wszystko wróciło do normy., ale problem pojawia się ponownie po pewnym czasie? To jest takie frustrujące!
Dlaczego to się dzieje?W rzeczywistości tak jest zazwyczajPula procesów PHP-FPM nie jest poprawnie skonfigurowana lub zasoby serwera są niewystarczające.spowodowane przez. Dzisiaj dokładnie zoptymalizujemy HestiaCP Dzięki PHP-FPM strona jest stabilna jak skała!
Główny powód, dla którego PHP-FPM jest przeciążony
PHP-FPM toMenedżer Procesów, który odpowiada za obsługę żądań dynamicznych. Jeżeli konfiguracja nie jest rozsądna, może to doprowadzić do:
- Zasoby serwera są wyczerpanepowodując, że PHP-FPM nie jest w stanie odpowiadać na nowe żądania w odpowiednim czasie;
- Za mało procesów, gdy ruch nagle wzrasta, nie można go obsłużyć na czas;
- Wykorzystanie procesu jest zbyt wysokiepowodując gwałtowny wzrost obciążenia procesora.

Jak stwierdzić czy PHP-FPM jest przeciążony?
można używać top 或 htop Polecenie umożliwiające wyświetlenie użycia procesora i pamięci:
top -c
Jeżeli widzisz informacje o procesie podobne do poniższych, oznacza to, że PHP-FPM działa przy dużym obciążeniu:
1669293 abc 20 0 790284 227880 185568 R 73.1 0.9 1:30.09 php-fpm: pool chenweiliang.com
1669522 abc 20 0 801924 224224 170236 R 69.9 0.9 0:59.01 php-fpm: pool chenweiliang.com
Widzisz, że te procesy zajmują ponad 70% mocy procesora? Jeżeli zdarza się to często, Twój PHP-FPM Musi być jakiś problem!
W jaki więc sposób możemy zoptymalizować konfigurację PHP-FPM, aby serwer nie był już przeciążony?
Optymalizacja puli procesów PHP-FPM (dopasowanie podstawowych parametrów)
Po pierwsze, otwórz php-fpm Pliki konfiguracyjne:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Zmień wersję PHP, np. PHP8.3, i zmień ją na następującą:
/etc/php/8.3/fpm/pool.d/www.conf
Zapytanie o wersję PHP ustawioną przez HestiaCP
v-list-web-domain user domain.com
Na przykład:
v-list-web-domain abc chenweiliang.com
Na wyjściu zobaczysz coś takiego:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Oznacza to, że witryna korzysta z PHP 8.3.
Przyjrzyjmy się konfiguracji PHP-FPM:
[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660
user = abc
group = abc
pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s
Możesz zobaczyć, że twoje pm Ten używany jest ondemand,Mimo że może to ograniczyć wykorzystanie zasobów w czasie bezczynności, gdy ruch nagle wzrośnie, proces może nie zdążyć zareagować na czas., co powoduje błąd 500.
1. Dostosuj parametry puli procesów PHP-FPM
Jeśli konfiguracja wykorzystuje dynamicJest to metoda wstępnego uruchomienia niektórych procesów roboczych i dynamicznego dostosowywania ich do ilości żądań, co pozwala na szybszą reakcję w przypadku nagłego wzrostu ilości żądań.
W przypadku witryn o pewnym natężeniu ruchu zaleca się korzystanie z pm = dynamicPonieważ może utrzymać pewną liczbę bezczynnych procesów i uniknąć 500 błędów przy dużej współbieżności.
Zaleca się korzystanie z tej opcji wyłącznie w przypadku, gdy rozmiar dostępnej pamięci jest wyjątkowo niski i zasoby pamięci są ograniczone. pm = ondemand Aby oszczędzać zasoby.
Sugerowano zmianę na ondemandi optymalizuj pm.max_children I inne parametry:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
Dlaczego chcesz to tak zmienić?
pm = dynamic: Przydzielaj procesy w sposób bardziej elastyczny, aby uniknąć oczekiwania na żądanie, które może być spowodowane przez żądania;pm.max_children = 16:Zapobiegnij 500 błędom spowodowanym przez zbyt małą liczbę procesów;pm.start_servers = 5: Unikaj powolnego uruchamiania procesów;pm.max_requests = 3000:Zapobieganie wyciekom pamięci, regularnie powtarzaj ten proces.
2. Ogranicz czas wykonywania skryptów PHP, aby zapobiec ich długotrwałemu zajęciu
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
To może zapobiec niektórymSkrypty PHP wykorzystujące zbyt dużo procesora mogą spowodować awarię serwera.
Po zapisaniu uruchom ponownie proces PHP:
sudo systemctl restart php8.3-fpmWłącz monitorowanie stanu PHP-FPM, aby śledzić postęp w dowolnym momencie
Włącz monitorowanie procesów PHP-FPM i przeglądaj je w dowolnym momencieAktualna liczba aktywnych procesów i status oczekiwania na żądanie, aby uniknąć przeciążenia serwera.
在 php-fpm.conf Dodano w:
pm.status_path = /status
Następnie konfiguracja Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
W ten sposób możesz http://yourdomain.com/status Sprawdź PHP-FPM w akcji!
Zoptymalizuj dzienniki PHP-FPM, aby szybko rozwiązywać problemy
在 php-fpm.conf Wysłane:
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s ; 执行超过 5s 的脚本记录到日志
W ten sposób, kiedykolwiek wystąpi błąd 500, możesz bezpośrednio wyświetlić dziennik:
tail -f /var/log/php-fpm/error.log
Sprawdź, czy PHP zgłasza błąd, taki jak out of memory,script execution timeout 等.
Regularnie restartuj PHP-FPM, aby zapobiec wyciekom pamięci
w stanie przejść cron Regularnie restartuj PHP-FPM, aby zapobiec powodowaniu problemów przez długotrwałe procesy.Wycieki pamięci.
crontab -e
Dodaj następujące zadanie zaplanowane, aby automatycznie ponownie uruchamiać PHP-FPM o godzinie 3 w nocy każdego dnia:
0 3 * * * /usr/sbin/service php8.3-fpm restart
A co jeśli problem będzie się powtarzał? Dalsza optymalizacja!
Jeśli nadal będziesz stosować powyższą optymalizacjęCzasami występują błędy 500, możesz kontynuować następujące optymalizacje:
1. Włącz OPcache, aby zwiększyć wydajność wykonywania PHP
Jeśli OPcache nie jest jeszcze włączony, możesz zainstalować go w następujący sposób (na przykładzie Ubuntu):
sudo apt install php8.3-opcache -y
Następnie edytuj php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Efekt? Szybkość wykonywania stron PHP została znacznie zwiększona!
2. Optymalizacja konfiguracji Nginx
Upewnij się, że parametry związane z Nginx są rozsądne, takie jak: fastcgi_read_timeout Dostosuj to odpowiednio, aby uniknąć zakończenia działania skryptów PHP przez Nginx z powodu długiego czasu wykonywania:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Podsumowanie: Zoptymalizuj PHP-FPM, a strona internetowa nie będzie się już zawieszać!
Jakie zmiany wprowadziliśmy po tej optymalizacji?
✅ Optymalizacja puli procesów PHP-FPM,posługiwać się ondemandI optymalizuj pm.max_children parametr;
✅ Ograniczenie czasu wykonywania skryptów PHP, aby zapobiec długotrwałemu zajęciu procesora;
✅ Włącz monitorowanie PHP-FPM, przeglądaj obciążenie procesu w czasie rzeczywistym;
✅ Optymalizacja logów PHP-FPM, szybko rozwiąż 500 błędów;
✅ Regularnie restartuj PHP-FPM, zapobiegaj wyciekom pamięci;
✅ Włącz OPcache, poprawić wydajność wykonywania PHP;
✅ Optymalizacja konfiguracji Nginx, aby uniknąć problemów z przekroczeniem limitu czasu.
Po tej optymalizacji obciążenie PHP-FPM będzie znacznie zmniejszone, a działanie witryny będzie bardziej stabilne! 🔥
Spróbuj teraz! 💪🚀
Nadzieja Chen Weiliang Blog ( https://www.chenweiliang.com/ ) udostępnił(a) informację „Obciążenie HestiaCP PHP-FPM jest zbyt duże? Błąd dynamicznej strony internetowej 500? Ta optymalizacja zacznie obowiązywać natychmiast! ”, może Ci się to przydać.
Zapraszamy do udostępnienia linku do tego artykułu:https://www.chenweiliang.com/cwl-32512.html
Aby odblokować więcej ukrytych sztuczek🔑, zapraszamy do dołączenia do naszego kanału Telegram!
Udostępnij i polub jeśli Ci się podoba! Twoje udostępnienia i polubienia są naszą ciągłą motywacją!