HestiaCP PHP-FPM भारी लोड के अंतर्गत है? गतिशील वेब पेज 500 त्रुटि? यह अनुकूलन तुरंत प्रभावी होगा!

लेख निर्देशिका

क्या आपने कभी ऐसी स्थिति का सामना किया है? आपकी वेबसाइट अचानक धीमी हो जाती है, या 500 एरर दिखाती है। PHP-FPM को रीस्टार्ट करने से सब ठीक हो जाता है , लेकिन कुछ समय बाद समस्या फिर से आ जाती है? यह बेहद निराशाजनक है!

ऐसा क्यों होता है? दरअसल, यह आमतौर पर PHP-FPM प्रोसेस पूल के गलत कॉन्फ़िगरेशन या सर्वर संसाधनों की कमी के कारण होता है । आज हम HestiaCP के तहत PHP-FPM को पूरी तरह से ऑप्टिमाइज़ करेंगे ताकि आपकी वेबसाइट की स्थिरता सुनिश्चित हो सके!

PHP-FPM के ओवरलोड होने का मुख्य कारण

PHP-FPM, PHP के लिए प्रोसेस मैनेजर है , जो गतिशील अनुरोधों को संभालने के लिए जिम्मेदार है। अनुचित कॉन्फ़िगरेशन से निम्न समस्याएं हो सकती हैं:

  • सर्वर संसाधन समाप्त हो गए हैं, जिसके कारण PHP-FPM समय पर नए अनुरोधों का जवाब देने में असमर्थ हो जाता है;
  • बहुत कम प्रक्रियाएँ, जब ट्रैफ़िक अचानक बढ़ जाता है, तो इसे समय पर संसाधित नहीं किया जा सकता है;
  • प्रक्रिया उपयोग बहुत अधिक है, जिससे सीपीयू लोड बढ़ जाता है।

HestiaCP PHP-FPM भारी लोड के अंतर्गत है? गतिशील वेब पेज 500 त्रुटि? यह अनुकूलन तुरंत प्रभावी होगा!

कैसे पता करें कि PHP-FPM ओवरलोड है?

उपयोग कर सकते हैं tophtop सीपीयू और मेमोरी उपयोग देखने के लिए कमांड:

top -c

यदि आपको निम्नलिखित के समान प्रक्रिया जानकारी दिखाई देती है, तो इसका अर्थ है कि PHP-FPM उच्च लोड के तहत चल रहा है:

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

क्या आप देखते हैं कि ये प्रक्रियाएं CPU का 70% से अधिक उपयोग कर रही हैं? यदि ऐसा अक्सर होता है, तो निश्चित रूप से आपके PHP-FPM में कुछ गड़बड़ है!

तो, हम PHP-FPM कॉन्फ़िगरेशन को कैसे अनुकूलित कर सकते हैं ताकि सर्वर पर अधिक भार न पड़े?

PHP-FPM प्रक्रिया पूल अनुकूलन (कोर पैरामीटर समायोजन)

सबसे पहले, खोलें php-fpm कॉन्फ़िगरेशन फ़ाइलें:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *अपने PHP संस्करण में परिवर्तन करें, जैसे कि PHP8.5, और इसे इस प्रकार बदलें:/etc/php/8.3/fpm/pool.d/www.conf

HestiaCP द्वारा निर्धारित PHP संस्करण की क्वेरी करें

v-list-web-domain user domain.com

उदाहरण के लिए:

v-list-web-domain abc chenweiliang.com

आउटपुट में आपको कुछ इस तरह दिखेगा:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.5 

इससे पता चलता है कि वेबसाइट PHP 8.5 का उपयोग करती है ।

आइए आपके 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

आप देख सकते हैं कि आपका pm प्रयोग किया गया है ondemand,यद्यपि यह निष्क्रिय समय के दौरान संसाधन उपयोग को कम कर सकता है, लेकिन जब ट्रैफ़िक अचानक बढ़ जाता है, तो प्रक्रिया समय पर प्रतिक्रिया देने में सक्षम नहीं हो सकती है।जिसके परिणामस्वरूप 500 त्रुटि हुई।

www.conf: सिस्टम का अंतर्निर्मित "सार्वभौमिक संसाधन पूल"

PHP-FPM इंस्टॉल करने के बाद, सिस्टम आपको स्वचालित रूप से एक विकल्प प्रदान करेगा... www.conf फ़ाइल।
इसकापोजिशनिंगयह बहुत सरल है—यह एक डिफ़ॉल्ट प्रोसेस पूल है जो बिना किसी अतिरिक्त सेटअप के काम करता है, आमतौर पर इससे जुड़ा होता है... www-डेटा उपयोगकर्ता डाउनलोड।

इस प्रकार का पूल विशेष रूप से एकल-साइट वातावरण के लिए उपयुक्त है: इसका विन्यास हल्का है, और सभी पैरामीटर सामान्य टेम्पलेट हैं, जैसे कि:

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

यदि आप केवल एक ही साइट होस्ट करते हैं, तो आप बिना किसी अतिरिक्त परेशानी के इसे सीधे और विश्वसनीय रूप से उपयोग कर सकते हैं।

etउफौ.org.conf: कस्टम पूल

जब आप एक से अधिक साइटें चला रहे होते हैं, तो आप उन सभी को एक ही पूल में नहीं रख सकते।
इस बिंदु पर, हेस्टियासीपी स्वचालित रूप से प्रत्येक साइट के लिए एक अलग पूल बनाएगा, उदाहरण के लिए... etउफौ.org.confडोमेन नामों के लिए विशेषज्ञता etufo.org 服务।

खेलने का सामान्य तरीका यह है:

  • उपयोगकर्ताओं और समूहों को बदलें:user = etufo,group = etufo
  • स्वतंत्र निगरानी:listen = /run/php/etufo.sock
  • प्रक्रियाओं की संख्या को समायोजित करने से उच्च समवर्तीता की स्थिति में भी बेजोड़ स्थिरता सुनिश्चित होती है।
  • अलग-अलग लॉग फ़ाइलें समस्या निवारण को और अधिक स्पष्ट बनाती हैं।

इसके फायदे स्पष्ट हैं: सुरक्षित अलगाव । यदि एक साइट में सेंध लग भी जाती है, तो अन्य साइटें अप्रभावित रहती हैं।

dummy.conf: डमी फ़ाइल

dummy.conf ये आमतौर पर सिस्टम द्वारा प्रदान किए गए उदाहरण या टेम्पलेट होते हैं।
जब तक आप इसे मैन्युअल रूप से संशोधित और सक्षम नहीं करते, तब तक यह वास्तव में नहीं चलेगा।
इसका महत्व एक "ऑपरेशन मैनुअल" की तरह है, जो आपको बताता है कि एक नया पूल कॉन्फ़िगरेशन कैसे लिखना है।

पूल को विभाजित क्यों करें?

  • 安全 性अनुमतियों के टकराव से बचने के लिए अलग-अलग साइटों के लिए अलग-अलग उपयोगकर्ताओं का उपयोग करें।
  • 性能优化प्रत्येक पूल के लिए प्रक्रियाओं की संख्या को व्यक्तिगत रूप से समायोजित किया जा सकता है, जिससे ट्रैफ़िक की मांग के आधार पर लचीले समायोजन की अनुमति मिलती है।
  • एकांतलॉग, त्रुटियां और सुनने के पते सभी अलग-अलग रखे गए हैं, जिससे समस्या निवारण आसान हो जाता है।

उदाहरण के लिए, यदि www.conf क्रैश भी हो जाता है, तो भी etufo.org.conf सामान्य रूप से चलता रहेगा और पूरे सर्वर को बंद नहीं करेगा।

实际场景

  • एकल-साइट सर्वरwww.conf ही काफी है।
  • मल्टीसाइट सर्वरप्रत्येक साइट की अपनी स्वतंत्र .conf फ़ाइल होती है, जैसे कि etufo.org.conf।
  • dummy.confकेवल संदर्भ के लिए, इसका उपयोग करने की सलाह नहीं दी जाती है।

कॉन्फ़िगरेशन तुलना

www.conf (डिफ़ॉल्ट पूल)

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

etufo.org.conf (कस्टम पूल)

[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

मुख्य अंतर ये हैं: उपयोगकर्ता की पहचान, सुनने का पता और प्रक्रियाओं की संख्या

1. PHP-FPM प्रक्रिया पूल पैरामीटर समायोजित करें

यदि कॉन्फ़िगरेशन उपयोग करता है dynamicयह कुछ कार्य प्रक्रियाओं को पूर्व-प्रारंभ करने और अनुरोध मात्रा के अनुसार उन्हें गतिशील रूप से समायोजित करने की एक विधि है, जो अनुरोध मात्रा अचानक बढ़ने पर तेजी से प्रतिक्रिया दे सकती है।

एक निश्चित मात्रा में ट्रैफ़िक वाली वेबसाइटों के लिए, इसका उपयोग करने की अनुशंसा की जाती है pm = dynamicक्योंकि यह एक निश्चित मात्रा में निष्क्रिय प्रक्रियाओं को बनाए रख सकता है और उच्च समवर्तीता के दौरान 500 त्रुटियों से बच सकता है।

इसका उपयोग केवल तभी करने की अनुशंसा की जाती है जब एक्सेस वॉल्यूम बहुत कम हो और मेमोरी संसाधन सीमित हों। pm = ondemand संसाधनों को बचाने के लिए.

सुझाया गया dynamic, और अनुकूलन pm.max_children और अन्य पैरामीटर:

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

आप इसे इस तरह क्यों बदलना चाहते हैं?

  • pm = dynamic: ऑनडिमांड के कारण होने वाली अनुरोध प्रतीक्षा से बचने के लिए प्रक्रियाओं को अधिक लचीले ढंग से आवंटित करें;
  • pm.max_children = 16: बहुत कम प्रक्रियाओं के कारण होने वाली 500 त्रुटियों को रोकें;
  • pm.start_servers = 5: धीमी प्रक्रिया स्टार्टअप से बचें;
  • pm.max_requests = 3000:मेमोरी लीक को रोकना, प्रक्रिया को नियमित रूप से रीसायकल करें।

2. लंबे समय तक व्यस्त रहने से बचने के लिए PHP स्क्रिप्ट के निष्पादन समय को सीमित करें

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

इससे कुछ ऐसे PHP स्क्रिप्ट्स को सर्वर क्रैश होने से रोका जा सकता है जो अत्यधिक CPU का उपयोग करते हैं

सहेजने के बाद, PHP प्रक्रिया पुनः प्रारंभ करें:

sudo systemctl restart php8.3-fpm

VPS कॉन्फ़िगरेशन के आधार पर PHP-FPM को ऑप्टिमाइज़ करें

VPS कॉन्फ़िगरेशन का उदाहरण:

  • विवरण: वीपीएस 3 एनवीएमई
  • डिस्क स्पेस: 300 जीबी
  • सीपीयू कोर: 8
  • राम: 24 जीबी

आपके VPS कॉन्फ़िगरेशन ( 8 CPU कोर, 24 GB RAM ) के आधार पर , आपके सर्वर संसाधन पर्याप्त से अधिक हैं। PHP-FPM के लिए, 24 GB RAM आपको एक साथ कई प्रक्रियाओं को कॉन्फ़िगर करने की सुविधा देता है।

उत्पादन परिवेश में, हम आमतौर पर सिस्टम, अपाचे डेटाबेस (जैसे MySQL /MariaDB) और कैश (जैसे Redis / Memcached ) के लिए पर्याप्त मेमोरी (जैसे 8GB-12GB) आवंटित करते हैं , जिससे शेष 12GB-16GB मेमोरी पूरी तरह से PHP-FPM को आवंटित हो जाती है।

प्रति PHP प्रक्रिया के लिए औसतन 40MB-60MB मेमोरी उपयोग के आधार पर , 1GB मेमोरी लगभग 16-25 प्रक्रियाओं को चला सकती है।

निम्नलिखित एक उच्च-समवर्ती, उच्च-प्रदर्शन वाला एफपीएम कॉन्फ़िगरेशन है जो आपके लिए अनुकूलित किया गया है , जो वर्डप्रेस की क्षमता में काफी सुधार कर सकता है और अचानक ट्रैफ़िक वृद्धि के कारण इसे क्रैश होने से रोक सकता है:

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

💡 यह कॉन्फ़िगरेशन क्यों?

  1. pm.max_children = 300यह एक महत्वपूर्ण ऑप्टिमाइज़ेशन है। 24GB मेमोरी के लिए आपकी पिछली कॉन्फ़िगरेशन में 50 प्रोसेस की संख्या बहुत कम थी। ट्रैफ़िक में अचानक वृद्धि (या बैकग्राउंड में बॉट्स की बाढ़) होने पर, 50 प्रोसेस तुरंत ओवरलोड हो जाते थे, जिससे कनेक्शन टाइमआउट हो जाता था। इसे बढ़ाकर 300 करने से आपके सर्वर की कॉन्करेंसी प्रोसेसिंग क्षमता में कई गुना सुधार हो सकता है।
  2. pm.start_servers / `min_spare_serversआपके पास 8 सीपीयू कोर होने के कारण, आप शुरुआत में और सामान्य रूप से अधिक निष्क्रिय प्रक्रियाओं को बनाए रख सकते हैं, जिससे आप मल्टी-कोर के लाभ का फायदा उठा सकते हैं ताकि प्रक्रिया निर्माण की प्रतीक्षा किए बिना नए अनुरोध तुरंत खोले जा सकें।
  3. pm.max_requests = 1000500 से बढ़ाकर 1000 करें। आपकी मेमोरी बड़ी है और प्रक्रियाओं को बार-बार रीस्टार्ट करने की आवश्यकता नहीं है। 1000 तक बढ़ाने से बार-बार प्रक्रियाओं को नष्ट करने और बनाने के कारण होने वाली CPU खपत कम हो सकती है।

धीमेपन का लॉग देखें:

tail -f /var/log/php8.5-fpm.log.slow
tail -f /var/log/php8.4-fpm.log.slow

परिवर्तन करने के बाद, परिवर्तनों को प्रभावी होने के लिए PHP-FPM सेवा को पुनरारंभ करना न भूलें।

systemctl restart php8.5-fpm

किसी भी समय प्रगति पर नज़र रखने के लिए PHP-FPM स्थिति निगरानी सक्षम करें

PHP-FPM प्रक्रिया निगरानी को सक्षम करने से आप किसी भी समय सक्रिय प्रक्रियाओं की संख्या और अनुरोधों की प्रतीक्षा स्थिति देख सकते हैं , जिससे सर्वर पर अधिक भार पड़ने से रोका जा सकता है।

php-fpm.conf इसमें जोड़ा गया:

pm.status_path = /status

फिर, 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;
}

इस तरह, आप कर सकते हैं http://yourdomain.com/status PHP-FPM को क्रियान्वित होते हुए देखें!

समस्याओं का त्वरित निवारण करने के लिए PHP-FPM लॉग को अनुकूलित करें

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

इस तरह, जब भी 500 त्रुटि होती है, तो आप सीधे लॉग देख सकते हैं:

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

देखें कि क्या PHP कोई त्रुटि रिपोर्ट करता है, जैसे out of memory,script execution timeout 等।

मेमोरी लीक को रोकने के लिए PHP-FPM को नियमित रूप से पुनः आरंभ करें

पास करने में सक्षम cron लंबे समय से चल रही प्रक्रियाओं को रोकने के लिए नियमित रूप से PHP-FPM को पुनः आरंभ करेंस्म्रति से रिसाव.

crontab -e

प्रतिदिन प्रातः 3 बजे PHP-FPM को स्वचालित रूप से पुनः आरंभ करने के लिए निम्नलिखित निर्धारित कार्य जोड़ें:

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

यदि समस्या बनी रहे तो क्या होगा? आगे भी अनुकूलन!

यदि उपरोक्त ऑप्टिमाइजेशन करने के बाद भी आपको कभी-कभी 500 एरर का सामना करना पड़ता है , तो आप निम्नलिखित ऑप्टिमाइजेशन के साथ आगे बढ़ सकते हैं:

1. PHP निष्पादन दक्षता में सुधार करने के लिए OPcache सक्षम करें

यदि OPcache अभी तक सक्षम नहीं है, तो आप इसे इस प्रकार स्थापित कर सकते हैं (उदाहरण के लिए Ubuntu का उपयोग करें):

sudo apt install php8.5-opcache -y

फिर संपादित करें php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • रीयल-टाइम डिटेक्शन को अक्षम करेंफाइल सिस्टम के इनपुट/आउटपुट को कम करें और प्रदर्शन में सुधार करें।
  • हालांकि, इसका मतलब यह है कि PHP फ़ाइलों में बदलाव करने के बाद आपको मैन्युअल रूप से कैश साफ़ करना होगा (PHP सेवा को रीस्टार्ट करना होगा)।

कॉन्फ़िगरेशन में बदलाव करने के बाद, परिवर्तनों को प्रभावी होने के लिए आपको PHP सेवा को पुनरारंभ करना होगा।

sudo systemctl restart php<版本>-fpm

प्रभाव? PHP पृष्ठ निष्पादन गति में बहुत सुधार हुआ है!

2. Nginx कॉन्फ़िगरेशन अनुकूलन

सुनिश्चित करें कि Nginx से संबंधित पैरामीटर उचित हैं, जैसे fastcgi_read_timeout लंबे निष्पादन समय के कारण Nginx द्वारा PHP स्क्रिप्ट को समाप्त होने से बचाने के लिए इसे उचित रूप से समायोजित करें:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

सारांश: PHP-FPM को अनुकूलित करें और वेबसाइट अब क्रैश नहीं होगी!

इस अनुकूलन के बाद हमने क्या समायोजन किये हैं?

✅ PHP-FPM प्रक्रिया पूल का अनुकूलन,प्रयोग करें ondemandऔर अनुकूलन pm.max_children पैरामीटर;
PHP स्क्रिप्ट के निष्पादन समय को सीमित करना, लंबे समय तक सीपीयू पर कब्जे को रोकने के लिए;
PHP-FPM मॉनिटरिंग सक्षम करें, वास्तविक समय में प्रक्रिया लोड देखें;
PHP-FPM लॉग का अनुकूलन, 500 त्रुटियों का शीघ्र निवारण करें;
PHP-FPM को नियमित रूप से पुनः आरंभ करें, मेमोरी लीक को रोकें;
OPcache सक्षम करें, PHP निष्पादन दक्षता में सुधार;
Nginx कॉन्फ़िगरेशन का अनुकूलन, टाइमआउट समस्याओं से बचने के लिए.

इस अनुकूलन के बाद, PHP-FPM लोड बहुत कम हो जाएगा और वेबसाइट संचालन अधिक स्थिर हो जाएगा! 🔥

अब जाकर प्रयास करें! 💪🚀

यदि आप हेस्टियासीपी के साथ पीएचपी-एफपीएम टेम्प्लेट को अनुकूलित करने के बारे में और अधिक जानने के इच्छुक हैं, तो यह लेख आपको गहरी समझ प्रदान करेगा:

👉 हेस्टियासीपी कस्टम PHP-FPM टेम्पलेट: PHP 8.5 के प्रदर्शन को बेहतर बनाने के रहस्य ▼

इस सामग्री में आपको निम्नलिखित देखने को मिलेगा:

  • उच्च-समवर्ती अनुकूलन तकनीकें: उचित प्रक्रिया विन्यास के माध्यम से प्रतिक्रिया गति को कैसे बेहतर बनाया जाए।
  • सुरक्षा अलगाव समाधान: क्रॉस-साइट एक्सेस के जोखिमों से बचें और खाते की स्थिरता सुनिश्चित करें।
  • लॉग और निगरानी: वेबसाइट के प्रदर्शन में आने वाली बाधाओं का पता लगाने और लगातार उसे बेहतर बनाने के लिए स्लो लॉग का उपयोग करें।

आशा है कि चेन वेइलियांग के ब्लॉग ( https://www.chenweiliang.com/ ) पर साझा किया गया लेख "हेस्टियासीपी पीएचपी-एफपीएम ओवरलोड? डायनामिक वेबपेज 500 त्रुटि? यह अनुकूलन विधि तत्काल परिणाम दिखाएगी!" आपके लिए उपयोगी होगा।

इस लेख का लिंक साझा करने में संकोच न करें: https://www.chenweiliang.com/cwl-32512.html

अधिक छिपी हुई ट्रिक्स को अनलॉक करने के लिए, हमारे टेलीग्राम चैनल से जुड़ने के लिए आपका स्वागत है!

पसंद आये तो शेयर और लाइक करें! आपके शेयर और लाइक हमारी निरंतर प्रेरणा हैं!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

ऊपर स्क्रॉल करें