ฉันได้รับการตีหัวของฉันกับกำแพงในขณะที่มีปัญหาหน่วยความจำ Drupal นี่คือความรู้ที่รวบรวมไว้ของฉันในหัวข้อ:
1. มุมมอง (สามารถ) ใช้หน่วยความจำจำนวนมาก
ฉันรักฉันบาง Views (และ Panels และ CTools และทุกอย่างที่ merlinofchaos สัมผัสกับนิ้วอันยิ่งใหญ่ของเขา) แต่มันเป็นไปได้ที่จะสร้างการกำหนดค่าที่มีความสัมพันธ์หลายอย่างที่ใช้หน่วยความจำจำนวนมาก หากคุณปิดใช้งาน Views และปัญหาหน่วยความจำหายไปน่าจะเป็นมุมมองที่สร้างขึ้นมาไม่ดีทำให้เกิดปัญหา
จะทำอย่างไรถ้าเป็นมุมมองและคุณจำเป็นต้องใช้มุมมองนั้นจริงๆ ลองวางลงในรหัส (ผ่านผู้ส่งออกหรือคุณลักษณะจำนวนมากดูด้านล่างฉันได้ใช้ฟังก์ชันการทำงานคล้ายกับการอ่านโค้ดเพื่อปรับปรุงประสิทธิภาพด้วยความสำเร็จเพียงเล็กน้อย) สำหรับการเริ่มต้น อีกความคิดหนึ่งคือการทำซ้ำมุมมองในลักษณะที่ต่างออกไป - ในที่สุดสิ่งที่คุณจะได้รับคือคำศัพท์อนุกรมวิธานตรวจสอบให้แน่ใจว่ามุมมองประเภทนั้นเป็นมุมมองอนุกรมวิธานเมื่อสร้างมันขึ้นมา อย่าสร้างมุมมองเนื้อหาที่ใช้ความสัมพันธ์เพื่อรับตามเงื่อนไขอนุกรมวิธาน
อาจเป็นมูลค่าการกล่าวขวัญที่นี่ที่แผงควรใช้หน่วยความจำมากมาย - ฉันไม่ได้ benchmarked จริง ๆ ดังนั้นจึงไม่สามารถยืนยันได้
2. การย้ายเนื้อหาจากฐานข้อมูลไปยังโค้ดเป็นการปฏิบัติที่ดีมาก
ฉันใช้เว็บไซต์ Drupal หลายแห่งเพื่อตระหนักถึงสิ่งนี้ แต่การรักษาทุกสิ่งที่สร้างขึ้นผ่าน UI ในฐานข้อมูล (การกำหนดค่ามุมมองและการติดตั้งโดยเฉพาะ) เป็นวิธีปฏิบัติที่เลวร้ายที่สุดของ Drupal ทำไม? เพิ่มภาระให้กับฐานข้อมูลและไม่สามารถควบคุมเวอร์ชันได้ จุดแรกมีปัญหาโดยเฉพาะอย่างยิ่งในแง่ของการใช้หน่วยความจำ - แทนที่จะโหลดเนื้อหาจากมุมมองจากฐานข้อมูลไซต์จะต้องโหลดองค์ประกอบมุมมองเอง สิ่งนี้ทวีความรุนแรงมากขึ้นโดยวิธีที่ Drupal ใช้ตาราง: โดยการสรุปทุกอย่างให้เป็นระดับที่ n ฟังก์ชั่นของ Drupal แต่ละบิตจะใช้ตารางใหม่ สิ่งนี้ทำให้hernias คนวิทยาศาสตร์คอมพิวเตอร์ (ข้อแม้: ลิงค์โง่) แต่ไม่สามารถหลีกเลี่ยงได้จริง ๆ ด้วยชิ้นส่วนของซอฟต์แวร์ที่เป็นแบบแยกส่วนและใช้งานง่ายเหมือน Drupal
การแก้ไขปัญหา? ใช้ Bulk Exporter (รวมอยู่ใน CTools) หรือฟีเจอร์เพื่อแพ็คเกจบิตโค้ดที่อยู่ในฐานข้อมูลเป็นโค้ดโมดูล
3. ธีมสามารถกินความทรงจำได้
ธีมของคุณมีไฟล์เทมเพลตจำนวนมาก (เช่นไฟล์ในชื่อไฟล์ / เทมเพลต /) หรือไม่ หากเป็นเช่นนั้นหน่วยความจำจะถูกใช้ในแต่ละครั้งที่โหลดไฟล์ใดไฟล์หนึ่ง หากคุณกำลังสร้างเทมเพลตโดยเฉพาะเพื่อระงับบิตของ Drupal ไม่ให้แสดงให้ลองทำดังนี้:
- การเปลี่ยนการอนุญาตเพื่อไม่ให้บิตปรากฏขึ้นสำหรับบทบาทผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ
- การใช้ CSS เพื่อซ่อนองค์ประกอบ
ตัวเลือกแรกคือสิ่งที่คุณต้องการทำกับสิ่งที่ส่งผลต่อความปลอดภัย - คุณไม่ต้องการใช้ CSS เพื่อซ่อนปุ่ม "แก้ไข" สำหรับผู้ใช้บางรายเพียงเพื่อให้พวกเขายกเลิกการซ่อนไว้ผ่าน Firebug หรืออะไรก็ตาม
4. อย่าไปลงน้ำในโมดูล contrib
ในขณะที่บางครั้งไซต์ต้องการโมดูล contrib จำนวนมากอย่าไปลงน้ำมากเกินไป แต่ละที่เปิดใช้งาน (หมายเหตุ: เปิดใช้งานโมดูลที่ปิดใช้งานไม่ได้ใช้หน่วยความจำใด ๆ ) ใช้หน่วยความจำ มันค่อนข้างชัดเจน แต่ก็น่าสังเกตไม่ว่า
5. VPS เป็นบางครั้งการโกหก
จากประสบการณ์ของผมบริษัท โฮสติ้งไร้ยางอายบางคนชอบที่จะผลักดันไซต์ Drupal ไปยังเซิร์ฟเวอร์ VPS - พวกเขามีราคาแพงกว่า สถานการณ์แย่ลงจากความจริงที่ว่าเว็บโฮสต์มักจะไม่โฆษณา (หรือบอกด้วยความเต็มใจถ้าถาม) สิ่งที่ จำกัด หน่วยความจำบนสำหรับโฮสติ้งที่ใช้ร่วมกัน
อนิจจาบ่อยครั้งหากเว็บไซต์ไม่ได้รับการรับส่งข้อมูลอย่างหนักและยังขัดข้องอาจมีปัญหาเกี่ยวกับการกำหนดค่าของ Drupal มากกว่าสิ่งอื่นใด การผลักผู้ใช้ไปยัง VPS เพียงแค่ทำให้น้ำขุ่นมัวและเพิ่มตัวแปรเพิ่มเติมเพื่อจัดการกับ (มันคือการกำหนดค่าเว็บเซิร์ฟเวอร์หรือไม่การกำหนดค่า PHP หรือไม่การกำหนดค่าแขก VPS?
6. เมื่อทุกอย่างล้มเหลวให้ลอกแบบไปยังโลคอลโฮสต์และเอาชนะด้วยไม้
นี่คือเหตุผลใหญ่ที่ว่าทำไมผู้คนถึงใช้วิธีการ dev-staging-production พร้อมการควบคุมเวอร์ชัน - เมื่อทุกอย่างล้มเหลวคุณสามารถทำดัมพ์ DB คอมไพล์ไซต์ไปยังเซิร์ฟเวอร์ทดสอบในพื้นที่แล้วทำให้เว็บไซต์ยุ่งเหยิง เซิร์ฟเวอร์ทดสอบโดยไม่ต้องกังวลกับการทำลายสิ่งใด ๆ บนเซิร์ฟเวอร์ที่ใช้งานจริง
สำหรับปัญหาเกี่ยวกับหน่วยความจำโดยทั่วไปหมายถึงการปิดใช้งานโมดูลทีละรายการจนกว่าจะมีการเปิดเผยปัญหา นอกจากนี้ยังสามารถชี้ไปที่ปัญหาที่เกี่ยวข้องกับเว็บโฮสต์ - หากเว็บไซต์ทำงานได้อย่างสมบูรณ์แบบในการติดตั้งในท้องถิ่นพร้อมหน่วยความจำที่ตั้งค่าเป็นสิ่งที่เหมาะสมเช่น 128MB แล้วคุณรู้ว่าเว็บโฮสต์ของคุณกำลังแตก
TL; DR
ความกล้าของฉันคือมันเป็น chain_menu_access ที่ทำให้เกิดปัญหา ลองปิดใช้งานและล้างแคชดูว่าทำงานได้หรือไม่
ฉันจะเพิ่มคำตอบนี้เมื่อฉันคิดถึงสิ่งอื่น ๆ ที่จะลอง ...