A HestiaCP PHP-FPM nagy terhelés alatt áll? Dinamikus weboldal 500 hiba? Ez az optimalizálás azonnal életbe lép!

Találkoztál már ezzel a helyzettel?A webhely elérése hirtelen lelassult, vagy akár 500-as hibát is eredményezett A PHP-FPM újraindítása után visszatért a normál értékre., de a probléma egy idő után újra előjön? Ez nagyon elkeserítő!

Miért történik ez?Valójában ez általában így vanA PHP-FPM folyamatkészlet nincs megfelelően konfigurálva, vagy a kiszolgáló erőforrásai nem elegendőek.által okozott. Ma alaposan optimalizálni fogunk HestiaCP A burkolat alatt található PHP-FPM olyan stabillá teszi a webhelyet, mint egy szikla!

A PHP-FPM túlterheltségének fő oka

A PHP-FPM egyFolyamatkezelő, amely a dinamikus kérések kezeléséért felelős. Ha a konfiguráció nem ésszerű, az a következőkhöz vezethet:

  • A szerver erőforrásai kimerültek, ami miatt a PHP-FPM nem tud időben válaszolni az új kérésekre;
  • Túl kevés folyamat, amikor a forgalom hirtelen megnövekszik, azt nem lehet időben feldolgozni;
  • A folyamathasználat túl magas, ami a CPU terhelés felrobbanását okozza.

A HestiaCP PHP-FPM nagy terhelés alatt áll? Dinamikus weboldal 500 hiba? Ez az optimalizálás azonnal életbe lép!

Hogyan állapítható meg, hogy a PHP-FPM túlterhelt?

lehet használni tophtop Parancs a CPU- és memóriahasználat megtekintéséhez:

top -c

Ha az alábbiakhoz hasonló folyamatinformációkat lát, az azt jelenti, hogy a PHP-FPM nagy terhelés alatt fut:

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

Látja, hogyan foglalják el ezek a folyamatok a CPU több mint 70%-át? Ha ez gyakran előfordul, a PHP-FPM Biztos van valami probléma!

Tehát hogyan optimalizálhatjuk a PHP-FPM konfigurációt, hogy a szerver ne legyen túlterhelve?

PHP-FPM folyamatkészlet optimalizálása (alapparaméterek beállítása)

Először is, nyisd ki php-fpm Konfigurációs fájlok:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Válts a PHP verziódra, például a PHP8.3-ra, és írd be erre:/etc/php/8.3/fpm/pool.d/www.conf

A HestiaCP által beállított PHP verzió lekérdezése

v-list-web-domain user domain.com

Például:

v-list-web-domain abc chenweiliang.com

A kimenetben valami ilyesmit fog látni:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Ez azt jelenti, hogy a weboldal használ PHP 8.3.

Vessünk egy pillantást a PHP-FPM konfigurációdra:

[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

Láthatod, hogy a tiéd pm A használt az ondemand,Bár csökkentheti az erőforrás-felhasználást a tétlenség alatt, amikor a forgalom hirtelen megnő, előfordulhat, hogy a folyamat nem tud időben reagálni., ami 500-as hibát eredményez.

www.conf: A rendszer beépített „univerzális erőforrás-készlete”

A PHP-FPM telepítése után a rendszer automatikusan felkínálja a... www.conf fájl.
annakHelymeghatározásNagyon egyszerű – ez csak egy alapértelmezett folyamatkészlet, ami azonnal működik, általában ehhez csatolva... www-data Felhasználói letöltés.

Ez a fajta készlet különösen alkalmas egytelepes környezetekhez: a konfiguráció könnyű, és a paraméterek mind általános sablonok, például:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Ha csak egy webhelyet üzemeltetsz, azt közvetlenül és megbízhatóan használhatod, minden további gond nélkül.

etufo.org.conf: Egyéni készlet

Ha már több webhelyet üzemeltetsz, nem zsúfolhatsz mindenkit ugyanabba a csoportba.
Ezen a ponton a HestiaCP automatikusan létrehoz egy külön pool-t minden webhelyhez, például... etufo.org.conf fájltípusDomainnevekre specializálódott etufo.org 服务.

A játék gyakori módja a következő:

  • Felhasználók és csoportok módosítása:user = etufo,group = etufo
  • Független monitorozás:listen = /run/php/etufo.sock
  • A folyamatok számának módosítása sziklaszilárd stabilitást biztosít még nagy párhuzamos futtatás esetén is.
  • A különálló naplófájlok megkönnyítik a hibakeresést.

Az előnyök nyilvánvalóak:Biztonságos elkülönítésMég ha egy webhelyet fel is fertőznek, a többi webhely érintetlen marad.

dummy.conf: próbafájl

próbababa.conf Ezek általában a rendszer által biztosított példák vagy sablonok.
Valójában nem fog működni, hacsak manuálisan nem módosítod és nem engedélyezed.
Jelentősége inkább egy „használati útmutatóhoz” hasonlít, amely megmondja, hogyan kell új medencekonfigurációt írni.

Miért kell kettéosztani a medencét?

  • 安全 性Használjon különböző felhasználókat különböző webhelyekhez az ütköző engedélyek elkerülése érdekében.
  • 性能优化A folyamatok száma minden egyes poolhoz külön-külön állítható, ami rugalmas kiigazításokat tesz lehetővé a forgalmi igény alapján.
  • ElkülönítésA naplók, a hibák és a figyelési címek mind elkülönítve jelennek meg, így a hibaelhárítás könnyebb.

Például: akár www.conf Összeomlott.etufo.org.conf Továbbra is normálisan fog futni, és nem fogja leállítani a teljes szervert.

实际场景

  • Egyetlen telephelyű szerverA www.conf elég.
  • Többhelyes szerverMinden oldalnak saját, független .conf fájlja van, például az etufo.org.conf.
  • próbababa.confCsak tájékoztató jellegű, nem ajánlott.

Konfiguráció összehasonlítása

www.conf (alapértelmezett készlet)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (Egyéni készlet)

[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

A fő különbség a következő:Felhasználói azonosító, figyelő cím, folyamatok száma.

1. Állítsa be a PHP-FPM folyamatkészlet paramétereit

Ha a konfiguráció használja dynamicEz egy módszer bizonyos munkafolyamatok előzetes elindítására és dinamikus beállítására a kérések mennyiségének megfelelően, ami gyorsabban tud reagálni, amikor a kérések mennyisége hirtelen megnő.

Bizonyos forgalmú weboldalak esetén ajánlott a használata pm = dynamicMert képes fenntartani egy bizonyos mennyiségű tétlen folyamatot és elkerülni az 500 hibát nagy párhuzamosság esetén.

Csak akkor ajánlott használni, ha a hozzáférési mennyiség rendkívül alacsony, és a memória-erőforrások szűkösek. pm = ondemand Az erőforrások megtakarítása érdekében.

Javasolt dynamic, és optimalizálja pm.max_children És egyéb paraméterek:

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 后自动退出

Miért akarod így megváltoztatni?

  • pm = dynamic: Rugalmasabb folyamatok kiosztása, hogy elkerülje az igény szerinti kérésvárakozást;
  • pm.max_children = 16: A túl kevés folyamat által okozott 500-as hibák megelőzése;
  • pm.start_servers = 5: Kerülje el a lassú folyamatindítást;
  • pm.max_requests = 3000:Memóriaszivárgások megelőzése, rendszeresen hasznosítsa újra a folyamatot.

2. Korlátozza a PHP szkriptek végrehajtási idejét a hosszú távú kihasználás elkerülése érdekében

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

Ez egyeseket megelőzhetA túl sok CPU-t használó PHP szkriptek lerombolhatják a szervert.

Mentés után indítsa újra a PHP folyamatot:

sudo systemctl restart php8.3-fpm

Engedélyezze a PHP-FPM állapotfigyelést, hogy bármikor nyomon követhesse az előrehaladást

Engedélyezze a PHP-FPM folyamatfigyelést, és bármikor megtekinthetiAz aktív folyamatok jelenlegi száma és a kérelem várakozási állapota, hogy elkerüljük a szerver túlterhelését.

php-fpm.conf Hozzáadva:

pm.status_path = /status

Ezután az Nginx konfigurációja:

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;
}

Ily módon megteheti http://yourdomain.com/status Nézze meg a PHP-FPM-et működés közben!

A PHP-FPM naplók optimalizálása a problémák gyors hibaelhárításához

php-fpm.conf 添加:

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 的脚本记录到日志

Ily módon, amikor 500-as hiba történik, közvetlenül megtekintheti a naplót:

tail -f /var/log/php-fpm/error.log

Nézze meg, hogy a PHP hibát jelez-e, mint pl out of memory,script execution timeout 等.

Rendszeresen indítsa újra a PHP-FPM-et a memóriaszivárgások elkerülése érdekében

képes átadni cron Indítsa újra a PHP-FPM-et rendszeresen, hogy elkerülje a hosszan tartó folyamatok okozásátMemóriaszivárgás.

crontab -e

Adja hozzá a következő ütemezett feladatot a PHP-FPM automatikus újraindításához minden nap hajnali 3-kor:

0 3 * * * /usr/sbin/service php8.3-fpm restart

Mi van, ha a probléma továbbra is fennáll? További optimalizálás!

Ha továbbra is követi a fenti optimalizálástAlkalmanként 500 hiba történik, folytathatja a következő optimalizálásokkal:

1. Engedélyezze az OPcache-t a PHP végrehajtási hatékonyságának javítása érdekében

Ha az OPcache még nincs engedélyezve, a következő módon telepítheti (például az Ubuntu használatával):

sudo apt install php8.3-opcache -y

Ezután szerkessze php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1

Hatás? A PHP oldal végrehajtási sebessége jelentősen javult!

2. Nginx konfiguráció optimalizálás

Győződjön meg arról, hogy az Nginx-hez kapcsolódó paraméterek ésszerűek, mint pl fastcgi_read_timeout Állítsa be megfelelően, hogy elkerülje a PHP szkriptek leállítását az Nginx által a hosszú végrehajtási idő miatt:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Összegzés: Optimalizálja a PHP-FPM-et, és a webhely többé nem fog összeomlani!

Milyen módosításokat végeztünk az optimalizálás után?

✅ A PHP-FPM folyamatkészlet optimalizálása,használat ondemandÉs optimalizálni pm.max_children paraméter;
A PHP szkriptek végrehajtási idejének korlátozása, a CPU hosszú távú elfoglaltságának megelőzése érdekében;
PHP-FPM figyelés engedélyezése, valós időben tekintse meg a folyamatterhelést;
PHP-FPM naplók optimalizálása, gyors hibaelhárítás 500 hiba;
Rendszeresen indítsa újra a PHP-FPM-et, megakadályozza a memóriaszivárgást;
Engedélyezze az OPcache-t, javítja a PHP végrehajtási hatékonyságát;
Az Nginx konfigurációjának optimalizálása, az időtúllépési problémák elkerülése érdekében.

Az optimalizálás után a PHP-FPM terhelés nagymértékben csökken, és a weboldal működése is stabilabb lesz! 🔥

Menj és próbáld ki most! 💪🚀

发表 评论

E-mail címét nem tesszük közzé. A kötelező mezőket használjuk * Címke

Cikkkönyvtár
Lapozzon a lap tetejére