HestiaCP PHP-FPM อยู่ภายใต้ภาระหนัก? ข้อผิดพลาดหน้าเว็บไดนามิก 500? การเพิ่มประสิทธิภาพนี้จะมีผลทันที!

ไดเรกทอรีบทความ

คุณเคยประสบกับสถานการณ์แบบนี้บ้างไหม?การเข้าถึงเว็บไซต์ช้าลงอย่างกะทันหัน หรืออาจส่งผลให้เกิดข้อผิดพลาด 500 หลังจากรีสตาร์ท PHP-FPM เว็บไซต์ก็กลับมาเป็นปกติแต่ปัญหาเริ่มเกิดขึ้นอีกหลังจากนั้นสักพัก? มันน่าหงุดหงิดจริงๆ!

เหตุใดจึงเกิดขึ้นในความเป็นจริงแล้วนี่เป็นปกติพูลกระบวนการ PHP-FPM ไม่ได้รับการกำหนดค่าอย่างถูกต้องหรือทรัพยากรเซิร์ฟเวอร์ไม่เพียงพอเกิดจาก. วันนี้เราจะมาปรับให้ละเอียดขึ้น เฮสเทียซีพี PHP-FPM ช่วยให้เว็บไซต์มีเสถียรภาพมั่นคงเหมือนหิน!

เหตุผลหลักที่ทำให้ PHP-FPM มีภาระมากเกินไป

PHP-FPM คือผู้จัดการกระบวนการซึ่งรับผิดชอบการจัดการคำขอแบบไดนามิก หากการกำหนดค่าไม่เหมาะสมอาจทำให้เกิดผลดังต่อไปนี้:

  • ทรัพยากรเซิร์ฟเวอร์หมดลงทำให้ PHP-FPM ไม่สามารถตอบสนองคำขอใหม่ได้ทันเวลา
  • กระบวนการมีน้อยเกินไปเมื่อปริมาณการจราจรเพิ่มขึ้นกระทันหัน ไม่สามารถดำเนินการได้ทันเวลา
  • การใช้กระบวนการสูงเกินไปทำให้โหลด CPU ระเบิด

HestiaCP PHP-FPM อยู่ภายใต้ภาระหนัก? ข้อผิดพลาดหน้าเว็บไดนามิก 500? การเพิ่มประสิทธิภาพนี้จะมีผลทันที!

จะทราบได้อย่างไรว่า PHP-FPM โอเวอร์โหลดหรือไม่

สามารถใช้ tophtop คำสั่งดูการใช้งาน CPU และหน่วยความจำ:

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.3 และเปลี่ยนเป็นแบบนี้:/etc/php/8.3/fpm/pool.d/www.conf

สอบถามเวอร์ชัน PHP ที่ตั้งโดย HestiaCP

v-list-web-domain user domain.com

ตัวอย่างเช่น:

v-list-web-domain abc chenweiliang.com

ในผลลัพธ์ คุณจะเห็นบางอย่างเช่น:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

ซึ่งหมายความว่าเว็บไซต์นี้ใช้ PHP ฮิต.

มาดูการกำหนดค่า 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

คุณจะเห็นว่าคุณ pm อันที่ใช้คือ ondemand,แม้ว่าจะสามารถลดการใช้ทรัพยากรในช่วงเวลาว่างได้ แต่เมื่อปริมาณการรับส่งข้อมูลเพิ่มขึ้นอย่างกะทันหัน กระบวนการอาจไม่สามารถตอบสนองได้ทันเวลาส่งผลให้เกิดข้อผิดพลาด 500

1. ปรับพารามิเตอร์ของกลุ่มกระบวนการ PHP-FPM

หากการกำหนดค่าใช้ dynamicนี่เป็นวิธีการเริ่มกระบวนการทำงานบางอย่างล่วงหน้าและปรับเปลี่ยนแบบไดนามิกตามปริมาณคำขอ ซึ่งจะตอบสนองได้เร็วขึ้นเมื่อปริมาณคำขอเพิ่มขึ้นอย่างกะทันหัน

สำหรับเว็บไซต์ที่มีปริมาณการเข้าชมจำนวนหนึ่ง แนะนำให้ใช้ pm = dynamicเนื่องจากสามารถรักษาปริมาณกระบวนการที่ไม่ได้ใช้งานในระดับหนึ่งและหลีกเลี่ยงข้อผิดพลาด 500 ในระหว่างการทำงานพร้อมกันจำนวนมาก

ขอแนะนำให้ใช้เฉพาะเมื่อปริมาณการเข้าถึงต่ำมากและทรัพยากรหน่วยความจำมีจำกัด pm = ondemand เพื่อประหยัดทรัพยากร

แนะนำให้ ondemandและเพิ่มประสิทธิภาพ 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

เปิดใช้งานการตรวจสอบสถานะ 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

เพิ่มงานตามกำหนดเวลาต่อไปนี้เพื่อรีสตาร์ท PHP-FPM โดยอัตโนมัติในเวลา 3 น. ทุกวัน:

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

จะเกิดอะไรขึ้นถ้าปัญหายังคงมีอยู่? เพิ่มประสิทธิภาพเพิ่มเติม!

หากคุณยังคงปฏิบัติตามการเพิ่มประสิทธิภาพข้างต้นบางครั้งเกิดข้อผิดพลาด 500 ครั้งคุณสามารถดำเนินการต่อด้วยการปรับแต่งต่อไปนี้:

1. เปิดใช้งาน OPcache เพื่อปรับปรุงประสิทธิภาพการทำงานของ PHP

หากยังไม่ได้เปิดใช้งาน OPcache คุณสามารถติดตั้งได้ดังนี้ (โดยใช้ Ubuntu เป็นตัวอย่าง):

sudo apt install php8.3-opcache -y

แล้วแก้ไข php.ini:

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

ผล? ความเร็วในการดำเนินการหน้า PHP ได้รับการปรับปรุงอย่างมาก!

2. การเพิ่มประสิทธิภาพการกำหนดค่า Nginx

ตรวจสอบให้แน่ใจว่าพารามิเตอร์ที่เกี่ยวข้องกับ Nginx มีความเหมาะสม เช่น fastcgi_read_timeout ปรับแต่งให้เหมาะสมเพื่อหลีกเลี่ยงสคริปต์ PHP ที่ถูกยุติโดย Nginx เนื่องจากเวลาในการดำเนินการที่ยาวนาน:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

สรุป: เพิ่มประสิทธิภาพ PHP-FPM และเว็บไซต์จะไม่ล่มอีกต่อไป!

เราได้ทำการปรับปรุงอะไรบ้างหลังจากการเพิ่มประสิทธิภาพครั้งนี้?

✅ การเพิ่มประสิทธิภาพของกลุ่มกระบวนการ PHP-FPM,ใช้ ondemandและเพิ่มประสิทธิภาพ pm.max_children พารามิเตอร์;
การจำกัดเวลาการทำงานของสคริปต์ PHPเพื่อป้องกันการครอบครอง CPU ในระยะยาว
เปิดใช้งานการตรวจสอบ PHP-FPMดูภาระกระบวนการแบบเรียลไทม์;
การเพิ่มประสิทธิภาพบันทึก PHP-FPMแก้ไขข้อผิดพลาด 500 รายการอย่างรวดเร็ว
รีสตาร์ท PHP-FPM เป็นประจำป้องกันการรั่วไหลของหน่วยความจำ
เปิดใช้งาน OPcacheปรับปรุงประสิทธิภาพการดำเนินการ PHP;
การเพิ่มประสิทธิภาพการกำหนดค่า Nginxเพื่อหลีกเลี่ยงปัญหาการหมดเวลา

หลังจากการเพิ่มประสิทธิภาพนี้ โหลด PHP-FPM จะลดลงอย่างมาก และการทำงานของเว็บไซต์จะเสถียรยิ่งขึ้น!

ไปลองเลยตอนนี้!

หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ ) แชร์ "โหลด PHP-FPM ของ HestiaCP สูงเกินไปหรือไม่? ข้อผิดพลาดหน้าเว็บไดนามิก 500? การเพิ่มประสิทธิภาพนี้จะมีผลทันที! ” มันอาจจะเป็นประโยชน์กับคุณ

ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-32512.html

หากต้องการปลดล็อคเคล็ดลับที่ซ่อนอยู่เพิ่มเติม ยินดีต้อนรับเข้าร่วมช่อง Telegram ของเรา!

แชร์และกดไลค์ถ้าคุณชอบ! การแชร์และการถูกใจของคุณคือแรงบันดาลใจอย่างต่อเนื่องของเรา!

 

发表评论

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ 必填项已用 * 标注

เลื่อนไปที่ด้านบน