Katalog artykułów
Czy spotkałeś się kiedyś z taką sytuacją? Twoja strona nagle zwalnia, a nawet wyświetla błąd 500. Ponowne uruchomienie PHP-FPM przywraca ją do normy , ale problem pojawia się ponownie po pewnym czasie? To niesamowicie frustrujące!
Dlaczego tak się dzieje? W rzeczywistości zazwyczaj jest to spowodowane nieprawidłową konfiguracją puli procesów PHP-FPM lub niewystarczającymi zasobami serwera . Dzisiaj dokładnie zoptymalizujemy PHP-FPM w HestiaCP , aby zapewnić Twojej stronie internetowej pełną stabilność!
Główny powód, dla którego PHP-FPM jest przeciążony
PHP-FPM to menedżer procesów PHP , odpowiedzialny za obsługę żądań dynamicznych. Nieprawidłowa konfiguracja może prowadzić 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
Czy widzisz, że te procesy wykorzystują ponad 70% mocy obliczeniowej procesora? Jeśli zdarza się to często, to zdecydowanie coś jest nie tak z Twoim PHP-FPM!
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.5, 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.5 Oznacza to, że witryna używa PHP 8.5.
Przyjrzyjmy się konfiguracji PHP-FPM:
[chenweiliang.com]
listen = /run/php/php8.5-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.
www.conf: Wbudowana w system „uniwersalna pula zasobów”
Po zainstalowaniu PHP-FPM system automatycznie zapewni Ci... www.conf plik.
jegoPozycjonowanieTo bardzo proste — to po prostu domyślna pula procesów, która działa od razu po instalacji, zwykle połączona z... www-data Pobieranie przez użytkownika.
Ten typ puli jest szczególnie przydatny w środowiskach jednostanowiskowych: konfiguracja jest lekka, a wszystkie parametry są ogólnymi szablonami, takimi jak:
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5
Jeśli hostujesz tylko jedną witrynę, możesz z niej korzystać bezpośrednio i niezawodnie, bez żadnych dodatkowych utrudnień.
etufo.org.conf: Pula niestandardowa
Gdy prowadzisz wiele witryn, nie możesz upchnąć wszystkich w tej samej puli.
W tym momencie HestiaCP automatycznie utworzy osobną pulę dla każdej witryny, na przykład... etufo.org.confSpecjalizuje się w nazwach domen etufo.org usługa.
Typowy sposób gry jest następujący:
- Zmień użytkowników i grupy:
user = etufo,group = etufo - Niezależny monitoring:
listen = /run/php/etufo.sock - Dopasowanie liczby procesów gwarantuje niezrównaną stabilność nawet przy dużej współbieżności.
- Oddzielne pliki dziennika sprawiają, że rozwiązywanie problemów jest bardziej przejrzyste.
Korzyści są oczywiste: bezpieczna izolacja . Nawet jeśli jedna strona zostanie naruszona, pozostałe pozostaną nienaruszone.
dummy.conf: plik fikcyjny
dummy.conf Zazwyczaj są to przykłady lub szablony dostarczone przez system.
W rzeczywistości nie będzie działać, dopóki nie zmodyfikujesz go ręcznie i nie włączysz.
Jego znaczenie jest raczej podobne do „podręcznika obsługi”, który wyjaśnia, jak zapisać nową konfigurację puli.
Po co dzielić basen?
- 安全 性Aby uniknąć konfliktów uprawnień, używaj różnych użytkowników dla różnych witryn.
- 性能优化Liczbę procesów można dostosować indywidualnie dla każdej puli, co pozwala na elastyczne dostosowywanie ich do zapotrzebowania na ruch.
- IzolacjaDzienniki, błędy i adresy nasłuchiwania są oddzielone, co ułatwia rozwiązywanie problemów.
Przykładowo, nawet jeśli www.conf ulegnie awarii, etufo.org.conf będzie nadal działać normalnie i nie spowoduje awarii całego serwera.
实际场景
- Serwer jednostanowiskowy:Wystarczy www.conf.
- Serwer wielostanowiskowyKażda witryna ma swój własny niezależny plik .conf, np. etufo.org.conf.
- dummy.confTylko w celach informacyjnych, niezalecane.
Porównanie konfiguracji
www.conf (pula domyślna)
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5
etufo.org.conf (Pula niestandardowa)
[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log
Główne różnice to: tożsamość użytkownika, adres nasłuchujący i liczba procesów.
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 dynamici 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 进程最大内存占用
Zapobiega to zawieszaniu się serwera przez pewne skrypty PHP, które zużywają zbyt dużo zasobów procesora.
Po zapisaniu uruchom ponownie proces PHP:
sudo systemctl restart php8.3-fpmOptymalizacja PHP-FPM na podstawie konfiguracji VPS
Przykład konfiguracji VPS:
- Opis: VPS 3 NVMe
- Miejsce na dysku: 300 GB
- Rdzenie procesora: 8
- RAM: 24 GB
W oparciu o konfigurację Twojego VPS ( 8 rdzeni CPU, 24 GB RAM ), zasoby serwera są więcej niż wystarczające. W przypadku PHP-FPM, 24 GB RAM pozwala na skonfigurowanie bardzo dużej liczby procesów współbieżnych.
W środowisku produkcyjnym zwykle przydzielamy wystarczającą ilość pamięci (powiedzmy 8–12 GB) dla samego systemu, baz danych Apache (takich jak MySQL /MariaDB) i pamięci podręcznych (takich jak Redis / Memcached ), pozostawiając pozostałe 12–16 GB pamięci do całkowitego wykorzystania przez PHP-FPM.
Przyjmując średnie wykorzystanie pamięci na poziomie 40 MB–60 MB na proces PHP , 1 GB pamięci może wystarczyć na uruchomienie około 16–25 procesów.
Poniżej przedstawiono konfigurację FPM o wysokiej współbieżności i wydajności dostosowaną specjalnie do Twoich potrzeb , która może znacznie poprawić wydajność WordPressa i zapobiec jego awariom spowodowanym nagłymi wzrostami ruchu:
pm = dynamic
; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300
; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32
; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16
; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64
; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000
; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s
; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s
💡 Dlaczego taka konfiguracja?
pm.max_children = 300To podstawowa optymalizacja. Twoja poprzednia konfiguracja 50 procesów była zbyt konserwatywna dla 24 GB pamięci. W przypadku nagłych wzrostów ruchu (lub zalewania tła przez boty), 50 procesów było natychmiast przeciążanych, co powodowało przekroczenie limitu czasu połączenia. Zwiększenie tej liczby do 300 może kilkukrotnie zwiększyć wydajność przetwarzania współbieżnego serwera.pm.start_servers/ `min_zapasowe_serweryPonieważ procesor ma 8 rdzeni, początkowo można zazwyczaj zachować więcej bezczynnych procesów, co pozwala na wykorzystanie zalet wielordzeniowości i natychmiastowe otwieranie nowych żądań bez konieczności oczekiwania na utworzenie procesu.pm.max_requests = 1000Zwiększ z 500 do 1000. Twoja pamięć jest duża i procesy nie wymagają częstego restartowania. Zwiększenie do 1000 może zmniejszyć obciążenie procesora spowodowane częstym usuwaniem i tworzeniem procesów.
Zobacz dziennik spowolnień:
tail -f /var/log/php8.5-fpm.log.slowtail -f /var/log/php8.4-fpm.log.slow
Po wprowadzeniu zmian pamiętaj o ponownym uruchomieniu usługi PHP-FPM, aby zmiany zostały uwzględnione.
systemctl restart php8.5-fpmWłącz monitorowanie stanu PHP-FPM, aby śledzić postęp w dowolnym momencie
Włączenie monitorowania procesów PHP-FPM umożliwia przeglądanie liczby aktywnych procesów i statusu oczekujących żądań w dowolnym momencie , zapobiegając przeciążeniu 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.5-fpm restart
A co jeśli problem będzie się powtarzał? Dalsza optymalizacja!
Jeśli po zastosowaniu powyższych optymalizacji nadal okazjonalnie pojawia się błąd 500 , możesz kontynuować, stosując 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.5-opcache -y
Następnie edytuj php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
- opcache.validate_timestamps=0
- Wyłącz wykrywanie w czasie rzeczywistymZmniejszenie operacji wejścia/wyjścia w systemie plików i poprawa wydajności.
Oznacza to jednak, że po modyfikacji plików PHP należy ręcznie wyczyścić pamięć podręczną (ponownie uruchomić usługę PHP).
Po zmodyfikowaniu konfiguracji należy ponownie uruchomić usługę PHP, aby zmiany zostały uwzględnione.
sudo systemctl restart php<版本>-fpmEfekt? 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! 💪🚀
Jeśli nadal chcesz dowiedzieć się więcej o dostosowywaniu szablonów PHP-FPM za pomocą HestiaCP, ten artykuł pozwoli Ci to lepiej zrozumieć:
👉 Niestandardowy szablon HestiaCP PHP-FPM: sekrety optymalizacji wydajności PHP 8.5 ▼
W tej treści zobaczysz:
- Techniki optymalizacji o wysokiej współbieżności: Jak poprawić szybkość reakcji dzięki rozsądnej konfiguracji procesu.
- Rozwiązanie izolacji bezpieczeństwa: unikaj ryzyka dostępu między witrynami i zapewnij stabilność konta.
- Rejestry i monitorowanie: Użyj wolnych rejestrów, aby zlokalizować wąskie gardła i stale optymalizować wydajność witryny.
Mamy nadzieję, że artykuł „HestiaCP PHP-FPM Overload? Dynamic Webpage 500 Error? This Optimization Method Will Show Immediate Results!” udostępniony na blogu Chen Weiliang ( https://www.chenweiliang.com/ ) okaże się dla Ciebie pomocny.
Możesz udostępnić link do tego artykułu: https://www.chenweiliang.com/cwl-32512.html

