Saraka ya Nakala
Je, umewahi kukumbana na hali hii? Tovuti yako hupungua kasi ghafla, au hata kusababisha hitilafu ya 500. Kuanzisha upya PHP-FPM huirejesha katika hali ya kawaida , lakini tatizo hujitokeza tena baada ya muda? Inakatisha tamaa sana!
Kwa nini hii hutokea? Kwa kweli, hii kwa kawaida husababishwa na usanidi usiofaa wa mkusanyiko wa michakato ya PHP-FPM au rasilimali zisizotosha za seva . Leo, tutaboresha kikamilifu PHP-FPM chini ya HestiaCP ili kuhakikisha uthabiti thabiti wa tovuti yako!
Sababu kuu kwa nini PHP-FPM imejaa kupita kiasi
PHP-FPM ni meneja wa michakato wa PHP , anayehusika na kushughulikia maombi yanayobadilika. Usanidi usiofaa unaweza kusababisha:
- Rasilimali za seva zimeisha, na kusababisha PHP-FPM kushindwa kujibu maombi mapya kwa wakati;
- Michakato michache mno, wakati trafiki inaongezeka kwa ghafla, haiwezi kusindika kwa wakati;
- Matumizi ya mchakato ni ya juu sana, na kusababisha mzigo wa CPU kulipuka.

Jinsi ya kujua ikiwa PHP-FPM imejaa?
inaweza kutumia top Au htop Amri ya kutazama CPU na utumiaji wa kumbukumbu:
top -c
Ukiona maelezo ya mchakato sawa na yafuatayo, inamaanisha PHP-FPM inafanya kazi chini ya mzigo mkubwa:
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
Je, unaona michakato hii ikitumia zaidi ya 70% ya CPU? Ikiwa hii hutokea mara kwa mara, basi hakika kuna kitu kibaya na PHP-FPM yako!
Kwa hivyo, tunawezaje kuboresha usanidi wa PHP-FPM ili seva isijazwe tena?
Uboreshaji wa dimbwi la mchakato wa PHP-FPM (marekebisho ya msingi ya parameta)
Kwanza, fungua php-fpm Faili za Usanidi:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Badilisha kwa toleo lako la PHP, kama vile PHP8.5, na ubadilishe kuwa hii:
/etc/php/8.3/fpm/pool.d/www.conf
Hoji toleo la PHP lililowekwa na HestiaCP
v-list-web-domain user domain.com
Mfano:
v-list-web-domain abc chenweiliang.com
Katika pato, utaona kitu kama:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.5 Hii inaonyesha kwamba tovuti inatumia PHP 8.5.
Wacha tuangalie usanidi wako wa 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
Unaweza kuona kwamba yako pm Inayotumika ni ondemand,Ingawa inaweza kupunguza matumizi ya rasilimali wakati wa kutofanya kitu, trafiki inapoongezeka ghafla, mchakato unaweza usiweze kujibu kwa wakati., na kusababisha hitilafu 500.
www.conf: "Dimbwi la rasilimali za ulimwengu" lililojengewa ndani ya mfumo
Baada ya kusakinisha PHP-FPM, mfumo utakupa kiotomatiki... www.conf faili.
YakeKuweka nafasiNi rahisi sana—ni mkusanyiko wa michakato chaguo-msingi tu unaofanya kazi nje ya boksi, kwa kawaida huunganishwa na... www-data Pakua mtumiaji.
Aina hii ya bwawa inafaa sana kwa mazingira ya eneo moja: usanidi ni mwepesi, na vigezo vyote ni violezo vya jumla, kama vile:
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5
Ukihifadhi tovuti moja tu, unaweza kuitumia moja kwa moja na kwa uhakika bila usumbufu wowote wa ziada.
etufo.org.conf: Bwawa maalum
Ukishaendesha tovuti nyingi, huwezi kuwaweka wote wakiwa wamejazana kwenye bwawa moja.
Katika hatua hii, HestiaCP itaunda kiotomatiki bwawa tofauti kwa kila tovuti, kwa mfano... etufo.org.confImeundwa mahususi kwa majina ya vikoa etufo.org huduma.
Njia ya kawaida ya kucheza ni:
- Badilisha watumiaji na vikundi:
user = etufo,group = etufo - Ufuatiliaji wa kujitegemea:
listen = /run/php/etufo.sock - Kurekebisha idadi ya michakato huhakikisha uthabiti imara hata chini ya kiwango cha juu cha fedha.
- Faili tofauti za kumbukumbu hufanya utatuzi wa matatizo kuwa wazi zaidi.
Faida zake ni dhahiri: kutengwa kwa usalama . Hata kama tovuti moja imeathiriwa, zingine haziathiriwi.
dummy.conf: faili ya dummy
dummy.conf Hizi kwa kawaida ni mifano au violezo vinavyotolewa na mfumo.
Haitafanya kazi isipokuwa uibadilishe na kuiwasha mwenyewe.
Umuhimu wake ni kama "mwongozo wa uendeshaji," unaokuambia jinsi ya kuandika usanidi mpya wa bwawa.
Kwa nini kugawanya bwawa la kuogelea?
- 安全 性Tumia watumiaji tofauti kwa tovuti tofauti ili kuepuka vibali vinavyokinzana.
- 性能优化Idadi ya michakato inaweza kubadilishwa kila mmoja kwa kila bwawa, ikiruhusu marekebisho yanayoweza kubadilika kulingana na mahitaji ya trafiki.
- KujitengaKumbukumbu, makosa, na anwani za kusikiliza zote zimetenganishwa, na kurahisisha utatuzi wa matatizo.
Kwa mfano, hata kama www.conf itaanguka, etufo.org.conf bado itafanya kazi kama kawaida na haitaangusha seva nzima.
实际场景
- Seva ya tovuti moja: www.conf inatosha.
- Seva ya tovuti nyingiKila tovuti ina faili yake huru ya .conf, kama vile etufo.org.conf.
- dummy.confKwa marejeleo pekee, haipendekezwi.
Ulinganisho wa Usanidi
www.conf (dimbwi chaguo-msingi)
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5
etufo.org.conf (Dimbwi Maalum)
[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
Tofauti kuu ni: utambulisho wa mtumiaji, anwani ya kusikiliza, na idadi ya michakato.
1. Rekebisha vigezo vya dimbwi la mchakato wa PHP-FPM
Ikiwa usanidi unatumia dynamicHii ni njia ya kuanza kabla ya baadhi ya michakato ya kazi na kurekebisha kwa nguvu kulingana na kiasi cha ombi, ambacho kinaweza kujibu haraka wakati kiasi cha ombi kinaongezeka ghafla.
Kwa tovuti zilizo na kiasi fulani cha trafiki, inashauriwa kutumia pm = dynamicKwa sababu inaweza kudumisha kiasi fulani cha michakato isiyo na kazi na kuepuka makosa 500 wakati wa concurrency ya juu.
Inashauriwa kuitumia tu wakati kiasi cha ufikiaji ni cha chini sana na rasilimali za kumbukumbu zimefungwa. pm = ondemand Ili kuokoa rasilimali.
Imependekezwa dynamic, na kuboresha pm.max_children Na vigezo vingine:
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 后自动退出
Kwa nini unataka kuibadilisha hivi?
pm = dynamic: Tenga michakato kwa urahisi zaidi ili kuepuka kusubiri ombi ambalo linaweza kusababishwa na mahitaji;pm.max_children = 16: Zuia makosa 500 yanayosababishwa na michakato michache sana;pm.start_servers = 5: Epuka kuanza polepole kwa mchakato;pm.max_requests = 3000:Kuzuia uvujaji wa kumbukumbu, kuchakata mchakato mara kwa mara.
2. Weka kikomo muda wa utekelezaji wa hati za PHP ili kuzuia umiliki wa muda mrefu
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Hii huzuia baadhi ya hati za PHP zinazotumia CPU nyingi sana kuathiri seva.
Baada ya kuhifadhi, anza tena mchakato wa PHP:
sudo systemctl restart php8.3-fpmBoresha PHP-FPM kulingana na usanidi wa VPS
Mfano wa usanidi wa VPS:
- Maelezo: VPS 3 NVMe
- Nafasi ya Diski: 300 GB
- Viini vya CPU: 8
- RAM: 24 GB
Kulingana na usanidi wako wa VPS ( cores 8 za CPU, RAM ya GB 24 ), rasilimali za seva yako zinatosha zaidi. Kwa PHP-FPM, RAM ya GB 24 hukuruhusu kusanidi idadi kubwa sana ya michakato inayofanyika kwa wakati mmoja.
Katika mazingira ya uzalishaji, kwa kawaida tunatenga kumbukumbu ya kutosha (tuseme 8GB-12GB) kwa mfumo wenyewe, hifadhidata za Apache (kama vile MySQL /MariaDB), na kashe (kama vile Redis / Memcached ), na kuacha kumbukumbu iliyobaki ya 12GB-16GB igawanywe kikamilifu kwa PHP-FPM.
Kulingana na matumizi ya wastani ya kumbukumbu ya 40MB-60MB kwa kila mchakato wa PHP , 1GB ya kumbukumbu inaweza kuendesha takriban michakato 16-25.
Ifuatayo ni usanidi wa FPM wa hali ya juu na wenye utendaji wa hali ya juu ulioundwa kwa ajili yako , ambao unaweza kuboresha sana uwezo wa WordPress na kuizuia isianguke kutokana na ongezeko la ghafla la trafiki:
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
💡 Kwa nini mpangilio huu?
pm.max_children = 300Huu ni uboreshaji mkuu. Usanidi wako wa awali wa michakato 50 ulikuwa wa kihafidhina sana kwa kumbukumbu ya GB 24. Unapokutana na ongezeko la ghafla la trafiki (au roboti zinazofurika mandharinyuma), michakato 50 ingeshindwa mara moja, na kusababisha muda wa muunganisho kuisha. Kuiongeza hadi 300 kunaweza kuboresha uwezo wa usindikaji wa sarafu sambamba wa seva yako mara kadhaa.pm.start_servers/ `seva_za_vipuri_vidogoKwa sababu una viini 8 vya CPU, unaweza mwanzoni na kwa kawaida kuhifadhi michakato isiyofanya kazi zaidi, ambayo hukuruhusu kutumia faida ya viini vingi ili maombi mapya yaweze kufunguliwa mara moja bila kusubiri uundaji wa michakato.pm.max_requests = 1000Ongeza kutoka 500 hadi 1000. Kumbukumbu yako ni kubwa, na michakato haihitaji kuanzishwa upya mara kwa mara. Kuongeza hadi 1000 kunaweza kupunguza matumizi ya CPU yanayosababishwa na uharibifu wa michakato na uundaji wake mara kwa mara.
Tazama kumbukumbu ya polepole:
tail -f /var/log/php8.5-fpm.log.slowtail -f /var/log/php8.4-fpm.log.slow
Baada ya kufanya mabadiliko, kumbuka kuanzisha upya huduma ya PHP-FPM ili mabadiliko yaanze kufanya kazi.
systemctl restart php8.5-fpmWasha ufuatiliaji wa hali ya PHP-FPM ili kufuatilia maendeleo wakati wowote
Kuwezesha ufuatiliaji wa mchakato wa PHP-FPM hukuruhusu kuona idadi ya michakato inayotumika na kuomba hali ya kusubiri wakati wowote , kuzuia upakiaji mwingi wa seva.
katika php-fpm.conf Imeongezwa katika:
pm.status_path = /status
Kisha, usanidi wa 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;
}
Kwa njia hii, unaweza http://yourdomain.com/status Angalia PHP-FPM inavyofanya kazi!
Boresha kumbukumbu za PHP-FPM ili kutatua matatizo kwa haraka
katika php-fpm.conf Ongeza kwa:
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 的脚本记录到日志
Kwa njia hii, wakati wowote hitilafu 500 inapotokea, unaweza kutazama logi moja kwa moja:
tail -f /var/log/php-fpm/error.log
Tazama ikiwa PHP inaripoti kosa, kama vile out of memory,script execution timeout Subiri.
Anzisha upya PHP-FPM mara kwa mara ili kuzuia uvujaji wa kumbukumbu
kuweza kupita cron Anzisha upya PHP-FPM mara kwa mara ili kuzuia michakato inayoendelea kwa muda mrefu kusababishaUvujaji wa Kumbukumbu.
crontab -e
Ongeza kazi ifuatayo iliyoratibiwa ili kuanzisha upya PHP-FPM kiotomatiki saa 3 asubuhi kila siku:
0 3 * * * /usr/sbin/service php8.5-fpm restart
Je, ikiwa tatizo litaendelea? Uboreshaji zaidi!
Ikiwa bado unakutana na hitilafu ya 500 mara kwa mara baada ya kufuata uboreshaji ulio hapo juu , unaweza kuendelea na uboreshaji ufuatao:
1. Washa OPcache ili kuboresha ufanisi wa utekelezaji wa PHP
Ikiwa OPcache bado haijawezeshwa, unaweza kuisanikisha kama hii (kwa kutumia Ubuntu kama mfano):
sudo apt install php8.5-opcache -y
Kisha hariri php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
- opcache.validate_timestamps=0
- Zima ugunduzi wa wakati halisiPunguza I/O ya mfumo wa faili na uboreshe utendaji.
Hata hivyo, hii ina maana kwamba lazima ufute kashe mwenyewe (anzisha upya huduma ya PHP) baada ya kurekebisha faili za PHP.
Baada ya kurekebisha usanidi, lazima uanze tena huduma ya PHP ili mabadiliko yaanze kufanya kazi.
sudo systemctl restart php<版本>-fpmAthari? Kasi ya utekelezaji wa ukurasa wa PHP imeboreshwa sana!
2. Uboreshaji wa usanidi wa Nginx
Hakikisha kuwa vigezo vinavyohusiana na Nginx ni sawa, kama vile fastcgi_read_timeout Irekebishe ipasavyo ili kuzuia hati za PHP kukomeshwa na Nginx kwa sababu ya muda mrefu wa utekelezaji:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Muhtasari: Boresha PHP-FPM na tovuti haitaanguka tena!
Je, tumefanya marekebisho gani baada ya uboreshaji huu?
✅ Kuboresha dimbwi la mchakato wa PHP-FPM, tumia ondemandNa uboresha pm.max_children kigezo;
✅ Kupunguza muda wa utekelezaji wa hati za PHP, kuzuia kazi ya muda mrefu ya CPU;
✅ Washa ufuatiliaji wa PHP-FPM, tazama mzigo wa mchakato kwa wakati halisi;
✅ Kuboresha kumbukumbu za PHP-FPM, haraka kutatua makosa 500;
✅ Anzisha upya PHP-FPM mara kwa mara, kuzuia uvujaji wa kumbukumbu;
✅ Washa OPcache, kuboresha ufanisi wa utekelezaji wa PHP;
✅ Kuboresha Usanidi wa Nginx, ili kuepuka masuala ya kuisha.
Baada ya uboreshaji huu, mzigo wa PHP-FPM utapunguzwa sana na uendeshaji wa tovuti utakuwa imara zaidi! 🔥
Nenda ukajaribu sasa! 💪🚀
Ikiwa bado una hamu ya kujifunza zaidi kuhusu kubinafsisha templeti za PHP-FPM kwa kutumia HestiaCP, basi makala haya yatakupa uelewa wa kina zaidi:
👉 Kiolezo Maalum cha HestiaCP PHP-FPM: Siri za Uboreshaji wa Utendaji za PHP 8.5 ▼
Katika maudhui haya, utaona:
- Mbinu za uboreshaji wa sarafu ya hali ya juu: Jinsi ya kuboresha kasi ya majibu kupitia usanidi mzuri wa mchakato.
- Suluhisho la kutenganisha usalama: Epuka hatari za ufikiaji wa tovuti mbalimbali na uhakikishe uthabiti wa akaunti.
- Kumbukumbu na ufuatiliaji: Tumia kumbukumbu za polepole ili kupata vikwazo na kuboresha utendaji wa tovuti kila mara.
Tunatumaini, makala "HestiaCP PHP-FPM Overload? Hitilafu ya Ukurasa wa Wavuti Unaobadilika 500? Mbinu Hii ya Uboreshaji Itaonyesha Matokeo ya Haraka!" iliyoshirikiwa kwenye blogu ya Chen Weiliang ( https://www.chenweiliang.com/ ) itakuwa na manufaa kwako.
Jisikie huru kushiriki kiungo cha makala haya: https://www.chenweiliang.com/cwl-32512.html

