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.5 และเปลี่ยนเป็นแบบนี้:/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.5 

ซึ่งหมายความว่าเว็บไซต์นี้ใช้ 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

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: กลุ่มพูลแบบกำหนดเอง

เมื่อคุณบริหารจัดการหลายเว็บไซต์ คุณไม่สามารถรวมทุกคนไว้ในกลุ่มผู้ใช้งานเดียวกันได้
ในขั้นตอนนี้ HestiaCP จะสร้างพูลแยกต่างหากสำหรับแต่ละไซต์โดยอัตโนมัติ ตัวอย่างเช่น... etยูเอฟโอ.org.confเชี่ยวชาญด้านชื่อโดเมน etufo.org 服务

วิธีการเล่นทั่วไปคือ:

  • เปลี่ยนผู้ใช้และกลุ่ม:user = etufo,group = etufo
  • การตรวจสอบโดยอิสระ:listen = /run/php/etufo.sock
  • การปรับจำนวนกระบวนการช่วยให้ระบบมีเสถียรภาพอย่างมั่นคงแม้ในสภาวะที่มีการทำงานพร้อมกันจำนวนมาก
  • การแยกไฟล์บันทึกข้อมูลจะช่วยให้การแก้ไขปัญหาชัดเจนยิ่งขึ้น

ประโยชน์ที่ได้รับนั้นชัดเจน:การแยกตัวอย่างปลอดภัยแม้ว่าเว็บไซต์หนึ่งจะถูกโจมตี เว็บไซต์อื่นๆ ก็จะยังคงไม่ได้รับผลกระทบ

dummy.conf: ไฟล์จำลอง

ดัมมี่.คอนฟ์ สิ่งเหล่านี้มักจะเป็นตัวอย่างหรือแม่แบบที่ระบบจัดเตรียมไว้ให้
โปรแกรมจะไม่ทำงานจริง ๆ เว้นแต่คุณจะแก้ไขและเปิดใช้งานด้วยตนเอง
ความสำคัญของมันนั้นคล้ายกับ "คู่มือการใช้งาน" ที่บอกวิธีเขียนการตั้งค่าพูลใหม่

ทำไมต้องแบ่งสระว่ายน้ำ?

  • 安全性ควรใช้บัญชีผู้ใช้ที่แตกต่างกันสำหรับเว็บไซต์ต่างๆ เพื่อหลีกเลี่ยงปัญหาการขัดแย้งเรื่องสิทธิ์การเข้าถึง
  • 性能优化สามารถปรับจำนวนกระบวนการได้ทีละส่วนสำหรับแต่ละพูล ทำให้สามารถปรับเปลี่ยนได้อย่างยืดหยุ่นตามความต้องการด้านปริมาณการใช้งาน
  • การแยกตัวบันทึกข้อผิดพลาดและที่อยู่การรับฟังถูกแยกออกจากกัน ทำให้การแก้ไขปัญหาทำได้ง่ายขึ้น

ตัวอย่างเช่น แม้ว่า www.conf มันพังทลายลงetufo.org.conf ระบบจะยังคงทำงานได้ตามปกติและจะไม่ทำให้เซิร์ฟเวอร์ล่มทั้งหมด

实际场景

  • เซิร์ฟเวอร์ไซต์เดียวแค่ www.conf ก็เพียงพอแล้ว
  • เซิร์ฟเวอร์มัลติไซต์แต่ละเว็บไซต์จะมีไฟล์ .conf แยกต่างหากเป็นของตนเอง เช่น etufo.org.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

ปรับแต่ง PHP-FPM ตามการกำหนดค่า VPS

ตัวอย่างการตั้งค่า VPS:

  • รายละเอียด: VPS 3 NVMe
  • เนื้อที่ดิสก์: 300 GB
  • จำนวนคอร์ CPU: 8
  • RAM: 24 GB

ขึ้นอยู่กับการตั้งค่า VPS ของคุณ (ซีพียู 8 คอร์, แรม 24 GBทรัพยากรเซิร์ฟเวอร์ของคุณมีเหลือเฟือ สำหรับ PHP-FPM หน่วยความจำ 24 GB ช่วยให้คุณสามารถกำหนดค่ากระบวนการทำงานพร้อมกันได้จำนวนมาก

ในสภาพแวดล้อมการใช้งานจริง เรามักจะจัดเตรียมระบบและฐานข้อมูล Apache (เช่น...) ให้เอง MySQL/MariaDB) และแคช (เช่น Redis/memcachedเว้นพื้นที่หน่วยความจำให้เพียงพอ (เช่น 8-12GB) ส่วนที่เหลือ... แรม 12GB-16GBสามารถมอบหมายงานนี้ให้กับ PHP-FPM ได้อย่างสมบูรณ์

อ้างอิงจากการใช้งานเฉลี่ยต่อกระบวนการ PHP 40เมกะไบต์ – 60เมกะไบต์ ในแง่ของการใช้งานหน่วยความจำ หน่วยความจำ 1GB สามารถรองรับการทำงานได้ประมาณ 16-25 กระบวนการ

ข้อมูลต่อไปนี้ได้รับการจัดทำขึ้นเป็นพิเศษสำหรับคุณการกำหนดค่า FPM ที่รองรับการทำงานพร้อมกันสูงและประสิทธิภาพสูงมันสามารถปรับปรุงได้อย่างมาก WordPress ระบบนี้มีศักยภาพในการรองรับปริมาณการใช้งานที่หนาแน่น และสามารถป้องกันปริมาณการใช้งานที่เพิ่มขึ้นอย่างฉับพลันซึ่งอาจทำให้ระบบล่มได้

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.4-fpm.log.slow
request_slowlog_timeout = 5s

💡 ทำไมถึงใช้การตั้งค่าแบบนี้?

  1. pm.max_children = 300นี่คือการปรับปรุงประสิทธิภาพหลัก การตั้งค่าเดิมของคุณที่ 50 กระบวนการนั้นน้อยเกินไปสำหรับหน่วยความจำ 24GB เมื่อเจอกับปริมาณการใช้งานที่เพิ่มขึ้นอย่างกะทันหัน (หรือบอทจำนวนมากที่ทำงานอยู่เบื้องหลัง) 50 กระบวนการจะรับมือไม่ไหวทันที ทำให้เกิดการหมดเวลาการเชื่อมต่อ การเพิ่มเป็น 300 จะช่วยเพิ่มความสามารถในการประมวลผลพร้อมกันของเซิร์ฟเวอร์ของคุณได้หลายเท่า
  2. pm.start_servers / `min_spare_serversเนื่องจากคุณมีซีพียู 8 คอร์ คุณจึงสามารถคงกระบวนการที่ไม่ได้ใช้งานไว้ได้มากขึ้นในตอนเริ่มต้นและโดยปกติ โดยใช้ประโยชน์จากข้อดีของมัลติคอร์เพื่อให้สามารถเปิดคำขอใหม่ได้ทันทีโดยไม่ต้องรอการสร้างกระบวนการ
  3. pm.max_requests = 1000เพิ่มจาก 500 เป็น 1000 หน่วยความจำของคุณมีขนาดใหญ่ และไม่จำเป็นต้องรีสตาร์ทกระบวนการบ่อยๆ การเพิ่มเป็น 1000 จะช่วยลดการใช้ CPU ที่เกิดจากการทำลายและสร้างกระบวนการบ่อยครั้งได้

หลังจากทำการเปลี่ยนแปลงแล้ว อย่าลืมรีสตาร์ทบริการ 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

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

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

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

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

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

หากยังไม่ได้เปิดใช้งาน 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 ปรับแต่งให้เหมาะสมเพื่อหลีกเลี่ยงสคริปต์ 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 ของเรา!

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

 

发表评论

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

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

ไดเรกทอรีบทความ
เลื่อนไปที่ด้านบน