เรามีเซิร์ฟเวอร์ที่โหลดค่อนข้างมากซึ่งใช้งาน nginx และ PHP-FPM เรามี 6 เว็บไซต์บนเซิร์ฟเวอร์นี้ใช้งาน PHP-FPM และ nginx ซอฟต์แวร์เป็น vBulletin 3.8 และ WordPress ทั้งหมด ฐานข้อมูลอยู่บนเซิร์ฟเวอร์ที่แยกต่างหาก
ขณะนี้เนื่องจากเว็บไซต์เหล่านี้เป็นเว็บไซต์ที่ได้รับความนิยมอย่างสูงเราจึงมีผู้เยี่ยมชมเว็บไซต์ครั้งละ 7-8,000 คนโดยแต่ละหน้ามีการเข้าใช้ฐานข้อมูลเป็นส่วนใหญ่ ฉันเชื่อว่านี่เป็นสาเหตุของปัญหาของเรา
เนื่องจากเรามีฐานข้อมูลขนาดใหญ่จำนวนมากบนเซิร์ฟเวอร์ MySQL และเนื่องจากข้อสงสัยสามารถทำได้ดีกว่ามากในซอฟต์แวร์ฉันคิดว่า MySQL อาจล้มเหลวในการส่งคืนผลลัพธ์เป็น PHP ในเวลาที่เหมาะสมสร้างผลกระทบที่ตามมาในที่สุด ทำให้ทุกอย่างหยุดลงจนกว่าเราจะโหลด PHP-FPM ใหม่ หลังจากที่เราทำสิ่งต่าง ๆ เริ่มทำงานได้ดีอีกครั้ง
เหตุผลที่ฉันมีปัญหาในการแก้ไขปัญหานี้เป็นเพราะฉันไม่สามารถแยกแยะอะไรจากบันทึก ในบันทึกการสืบค้น MySQL ที่ช้าฉันไม่เห็นสิ่งใดที่น่าสนใจเมื่อเกิดการหยุดทำงาน ในบันทึก nginx ฉันเห็นรายการนับพันที่บอกว่าคำขอการอ่านหมดเวลาหรือการเชื่อมต่อหมดเวลา (ไปที่ PHP-FPM) และในบันทึกของ PHP-FPM ฉันเห็นหลายบรรทัดที่ระบุว่า "การดำเนินการหมดเวลา (31 วินาที) การยกเลิก
ดังนั้นเมื่อถึงจุดนี้ฉันก็ไม่รู้จะหาปัญหาได้ที่ไหน เห็นได้ชัดว่าสิ่งที่เกิดขึ้นเกิดขึ้นเพราะสคริปต์เหล่านี้ทำงานไม่เร็วพอบางครั้ง (โดยปกติสคริปต์จะโหลดภายในไม่กี่วินาที แต่มีบางอย่างเกิดขึ้นที่ทำให้เวลาโหลดพุ่งสูงขึ้น) สิ่งนี้เกิดขึ้นวันละหลายครั้งและกลายเป็นปัญหาสำหรับเรา
ตอนนี้ฉันมี crontab ให้บริการโหลด php5-fpm ทุก ๆ 10 นาทีซึ่งดูแลปัญหาการล่ม แน่นอนเมื่อโหลด PHP อีกครั้ง nginx ส่งข้อผิดพลาดเกตเวย์ 502 ดังนั้นจึงไม่ใช่วิธีแก้ปัญหามากนัก
PHP กำลังเรียกใช้แคช APC ถ้าเป็นเช่นนั้น ฉันได้อ่านในบางจุดที่ APC สามารถทำให้เกิดการหยุดชะงักในบางสถานการณ์
ตัวชี้ใด ๆ จะเป็นประโยชน์ ฉันไม่ต้องกังวลเกี่ยวกับเครื่องนี้ตลอดเวลา
ข้อมูลเพิ่มเติมสามารถให้แน่นอน เพียงแจ้งให้เราทราบสิ่งที่คุณต้องการ
ปรับปรุง:ฉันเพิ่งคัดลอก apc.php ไปยังเว็บรูทและเข้าถึงเพื่อดูสถิติของเรา สิ่งที่ดูดี จากนั้นฉันคลิกลิงก์เพื่อไปที่สถิติผู้ใช้และ BOOM เซิร์ฟเวอร์หยุดทำงานทันที ฉันโหลด php-fpm อีกครั้งจากนั้นโหลดหน้าเว็บสถิติผู้ใช้อีกครั้ง รอสักครู่โหลดใหม่อีกครั้งเซิร์ฟเวอร์หยุดทำงานอีกครั้ง
ดังนั้นนี่น่าจะเกี่ยวข้องกับ APC อย่างแน่นอน คำถามคือ - เราจะแก้ไขได้อย่างไร
การกำหนดค่า APC:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "10000"
apc.user_entries_hint="10000"
apc.shm_size = "1G"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
อัปเดต 2:เรามีความคืบหน้าเกี่ยวกับเรื่องนี้ที่นี่ ปรากฎว่าปลั๊กอินแคช WordPress (W3 Total Cache) เป็นสิ่งที่ทำให้เกิดปัญหา เรายังไม่รู้ว่าทำไม แต่เมื่อปิดการใช้งานเราได้ใช้งาน PHP มาเกือบ 4 ชั่วโมงแล้วโดยไม่ต้องโหลดซ้ำไม่มีการชะลอตัวไม่มีข้อผิดพลาด เรายังคงใช้ APC ในฟอรัม vBulletin และไม่มีปัญหาเลย มีวิธีใดบ้างที่เราจะตัดสินว่าทำไม APC ถึงพัง ฉันชอบที่จะใช้มันในการติดตั้ง WordPress ของเรา แต่ไม่คุ้มกับระบบที่เปราะบาง