เพิ่มขีด จำกัด หน่วยความจำไม่ได้ช่วยในข้อผิดพลาดร้ายแรง: ขนาดหน่วยความจำที่อนุญาตของ… / modules / views / views.module ที่บรรทัด 416


11

ฉันได้เปลี่ยนจาก Drupal 7.14-7.15 สามสัปดาห์ที่ผ่านมาและดังนั้นฉันเผชิญหน้ากับชุดของความซับซ้อนมาก (สำหรับผม) กข้อผิดพลาด จำกัด หน่วยความจำ ข้อผิดพลาดเหล่านั้นเกิดขึ้นทุกครั้งที่ฉันพยายามล้างแคชในประสิทธิภาพหรือเรียกใช้สคริปต์การปรับปรุง

บริษัท โฮสติ้งของฉันได้เพิ่มขีด จำกัด หน่วยความจำใน php.ini เป็น 126 M, 256 M, 512 M และแม้แต่ 1024 M แต่ข้อผิดพลาดยังคงเกิดขึ้น ฉันย้ายไซต์ของฉันจากการแชร์ไปยัง VPS แล้ว แต่ข้อผิดพลาดยังคงเกิดขึ้นอย่างไม่น่าเชื่อ ฉันไม่มีทางและไม่รู้จะก้าวไปข้างหน้าอย่างไร

นี่คือข้อผิดพลาด:

  • ข้อผิดพลาดร้ายแรง: ขนาดหน่วยความจำที่อนุญาต 536870912 ไบต์หมดลง (พยายามจัดสรร 30 ไบต์) ใน /home/example/public_html/sites/all/modules/views/views.module ที่บรรทัด 416
  • ข้อผิดพลาดร้ายแรง: ขนาดหน่วยความจำที่อนุญาต 536870912 ไบต์หมดลง (พยายามจัดสรร 108 ไบต์) ใน /home/example/public_html/includes/menu.inc ที่บรรทัด 2736

  • ข้อผิดพลาดร้ายแรง: ขนาดหน่วยความจำที่อนุญาต 536870912 ไบต์หมดลง (พยายามจัดสรร 71 ไบต์) ใน /home/example/public_html/sites/all/modules/chain_menu_access/chain_menu_access.module ที่บรรทัด 59

  • จัดสรร 64 ไบต์) ใน /home/example/public_html/sites/all/modules/views/includes/base.inc ที่ 93


อัตราการเข้าชมสูงสุดของคุณคืออะไร (หน้า / วินาที) ด้วยจำนวนข้อมูล (โหนด?) มุมมองพยายามดึงข้อมูลกลับมา?
cherouvim

การอภิปรายที่คล้ายคลึงกันใน drupal.org drupal.org/node/76156
Anoop Joseph

2
คุณมีมุมมองที่ส่งคืนผลลัพธ์จำนวนมากและจัดรูปแบบเพื่อโหลดเนื้อหาแทนที่จะเป็นฟิลด์หรือไม่? ฉันเคยเห็นการขัดขวางการทำงานนี้หลายครั้งมาก่อน
Jepedo

หวัดดี! ขอบคุณมากสำหรับคำตอบของคุณ ฉันต้องการจะบอกว่าเว็บไซต์ที่อยู่ภายใต้โหมดการบำรุงรักษาและมีเนื้อหา (โหนด) เพียงไม่กี่เพื่อการทดสอบ ซอฟต์แวร์รวบรวมข้อมูลจะเยี่ยมชมเว็บไซต์เท่านั้นตามที่ฉันกล่าวถึงในโพสต์ของฉันเพิ่มขีด จำกัด หน่วยความจำในโซลูชัน php.ini แนะนำในโหนด drupal.org/node/76156 ไม่ได้ช่วยในกรณีของฉัน สำหรับการดูเนื้อหาที่โหลดแทนที่จะเป็นฟิลด์ ฉันต้องการทราบวิธี
salift

1
คุณได้ลองเปลี่ยนกลับเป็น Drupal 7.14 หรือไม่? หากอัปเกรดเป็น Drupal 7.15 ทำให้เกิดปัญหานั้นทำไมไม่ลองเปลี่ยนกลับ ลางสังหรณ์ของฉันคือมีการเรียกซ้ำไม่สิ้นสุดในหนึ่งในโมดูลของคุณ โมดูลที่เกี่ยวข้องกับ Views ของคุณคืออะไร?
Johnathan Elmore

คำตอบ:


13

ฉันได้รับการตีหัวของฉันกับกำแพงในขณะที่มีปัญหาหน่วยความจำ Drupal นี่คือความรู้ที่รวบรวมไว้ของฉันในหัวข้อ:

1. มุมมอง (สามารถ) ใช้หน่วยความจำจำนวนมาก

ฉันรักฉันบาง Views (และ Panels และ CTools และทุกอย่างที่ merlinofchaos สัมผัสกับนิ้วอันยิ่งใหญ่ของเขา) แต่มันเป็นไปได้ที่จะสร้างการกำหนดค่าที่มีความสัมพันธ์หลายอย่างที่ใช้หน่วยความจำจำนวนมาก หากคุณปิดใช้งาน Views และปัญหาหน่วยความจำหายไปน่าจะเป็นมุมมองที่สร้างขึ้นมาไม่ดีทำให้เกิดปัญหา

จะทำอย่างไรถ้าเป็นมุมมองและคุณจำเป็นต้องใช้มุมมองนั้นจริงๆ ลองวางลงในรหัส (ผ่านผู้ส่งออกหรือคุณลักษณะจำนวนมากดูด้านล่างฉันได้ใช้ฟังก์ชันการทำงานคล้ายกับการอ่านโค้ดเพื่อปรับปรุงประสิทธิภาพด้วยความสำเร็จเพียงเล็กน้อย) สำหรับการเริ่มต้น อีกความคิดหนึ่งคือการทำซ้ำมุมมองในลักษณะที่ต่างออกไป - ในที่สุดสิ่งที่คุณจะได้รับคือคำศัพท์อนุกรมวิธานตรวจสอบให้แน่ใจว่ามุมมองประเภทนั้นเป็นมุมมองอนุกรมวิธานเมื่อสร้างมันขึ้นมา อย่าสร้างมุมมองเนื้อหาที่ใช้ความสัมพันธ์เพื่อรับตามเงื่อนไขอนุกรมวิธาน

อาจเป็นมูลค่าการกล่าวขวัญที่นี่ที่แผงควรใช้หน่วยความจำมากมาย - ฉันไม่ได้ benchmarked จริง ๆ ดังนั้นจึงไม่สามารถยืนยันได้

2. การย้ายเนื้อหาจากฐานข้อมูลไปยังโค้ดเป็นการปฏิบัติที่ดีมาก

ฉันใช้เว็บไซต์ Drupal หลายแห่งเพื่อตระหนักถึงสิ่งนี้ แต่การรักษาทุกสิ่งที่สร้างขึ้นผ่าน UI ในฐานข้อมูล (การกำหนดค่ามุมมองและการติดตั้งโดยเฉพาะ) เป็นวิธีปฏิบัติที่เลวร้ายที่สุดของ Drupal ทำไม? เพิ่มภาระให้กับฐานข้อมูลและไม่สามารถควบคุมเวอร์ชันได้ จุดแรกมีปัญหาโดยเฉพาะอย่างยิ่งในแง่ของการใช้หน่วยความจำ - แทนที่จะโหลดเนื้อหาจากมุมมองจากฐานข้อมูลไซต์จะต้องโหลดองค์ประกอบมุมมองเอง สิ่งนี้ทวีความรุนแรงมากขึ้นโดยวิธีที่ Drupal ใช้ตาราง: โดยการสรุปทุกอย่างให้เป็นระดับที่ n ฟังก์ชั่นของ Drupal แต่ละบิตจะใช้ตารางใหม่ สิ่งนี้ทำให้hernias คนวิทยาศาสตร์คอมพิวเตอร์ (ข้อแม้: ลิงค์โง่) แต่ไม่สามารถหลีกเลี่ยงได้จริง ๆ ด้วยชิ้นส่วนของซอฟต์แวร์ที่เป็นแบบแยกส่วนและใช้งานง่ายเหมือน Drupal

การแก้ไขปัญหา? ใช้ Bulk Exporter (รวมอยู่ใน CTools) หรือฟีเจอร์เพื่อแพ็คเกจบิตโค้ดที่อยู่ในฐานข้อมูลเป็นโค้ดโมดูล

3. ธีมสามารถกินความทรงจำได้

ธีมของคุณมีไฟล์เทมเพลตจำนวนมาก (เช่นไฟล์ในชื่อไฟล์ / เทมเพลต /) หรือไม่ หากเป็นเช่นนั้นหน่วยความจำจะถูกใช้ในแต่ละครั้งที่โหลดไฟล์ใดไฟล์หนึ่ง หากคุณกำลังสร้างเทมเพลตโดยเฉพาะเพื่อระงับบิตของ Drupal ไม่ให้แสดงให้ลองทำดังนี้:

  1. การเปลี่ยนการอนุญาตเพื่อไม่ให้บิตปรากฏขึ้นสำหรับบทบาทผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ
  2. การใช้ 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 ที่ทำให้เกิดปัญหา ลองปิดใช้งานและล้างแคชดูว่าทำงานได้หรือไม่

ฉันจะเพิ่มคำตอบนี้เมื่อฉันคิดถึงสิ่งอื่น ๆ ที่จะลอง ...


... และนั่นคือสิ่งที่ฉันหวังไว้เมื่อฉันตั้งคำถามนี้! โดยเฉพาะอย่างยิ่ง 2. ตัวแทน 110 ท่านที่ดี :) หวังว่านี่จะดึงดูดความคิดเห็นที่เป็นประโยชน์จากคนอื่น ๆ ด้วยประสบการณ์ที่แตกต่างออกไปเล็กน้อย
user56reinstatemonica8

ป.ล. ฉันเคยได้ยินในสถานที่ต่าง ๆ ที่แม้โมดูลที่ปิดการใช้งานใช้หน่วยความจำจำนวนหนึ่งในการแยกวิเคราะห์ไฟล์ ฉันเคยเห็นคนพูดว่าไฟล์ php / inc ทั้งหมดถูกแยกวิเคราะห์ในบางวิธีแม้ว่าจะดูไม่ถูกต้อง (น่าจะเป็นแค่ไฟล์ข้อมูล) ความคิดใด ๆ ถ้ามีความจริงในเรื่องนี้?
user56reinstatemonica8

เจ๋งขอบคุณ! ฉันค่อนข้างมั่นใจว่าหน่วยความจำค่อนข้างเป็นธรรมของ Drupal เมื่อทำการโหลดไฟล์ - ถ้าคุณใช้ XHProf จำนวนการโทรเพื่อfile_scan_directoryใช้หน่วยความจำที่มากพอ ฉันจะทดสอบบางสิ่งกับ devel หลังจากนี้เพื่อยืนยันว่า
aendrew

หากโมดูลที่ถูกปิดใช้งานใช้หน่วยความจำใด ๆ มันก็ค่อนข้างไร้สาระ ฉันดูจำนวนหน่วยความจำที่ Devel รายงานก่อนและหลังการลบโมดูล - ในขณะที่การรีเฟรชหน้าหลังจากลบไฟล์ที่มีขนาดเล็ก (<1MB) มันจะกลับไปที่ค่าการลบก่อนหน้าในการรีเฟรชครั้งถัดไป สิ่งนี้ทำให้ฉันเชื่อว่า Drupal สแกนไดเรกทอรีโมดูลเมื่อบูตเพื่อดูว่ามีไฟล์. info ใหม่หรือไม่ เพิ่มรายละเอียดของโมดูลลงในsystemตาราง c โหลดโมดูลใด ๆ กับรายการฟิลด์ system.status 1ตั้งค่าให้ หากใครสามารถยืนยันหรือพิสูจน์ได้ฉันก็ยินดี
aendrew

2

คุณสามารถลองใส่ PHP profiler เช่น XHProf หรือ Xdebug ที่สร้างขึ้นใน profiler เพื่อตรวจสอบสิ่งที่เกิดขึ้นในคำขอ


เมื่อคุณทราบว่าส่วนใดต้องการปริมาณหน่วยความจำเท่าใดคุณทำขั้นตอนที่ 1 ขั้นที่ 2 เกี่ยวกับการพยายามทำความเข้าใจว่าทำไมมันถึงใช้หน่วยความจำมากขนาดนั้นและวิธีการลดหน่วยความจำ เหนือคนอื่นพูดคุยเกี่ยวกับสิ่งของในผลลัพธ์ ฯลฯ โดยทั่วไปนั่นเป็นกระบวนการที่ไม่สามารถอธิบายได้ง่าย
Daniel Wehner

1

Views เป็นหมูหน่วยความจำ การแคชของ Drupal สามารถช่วยได้ Drupal จะโหลดโมดูลที่แอ็คทีฟเท่านั้นหากพวกมันสร้างตารางหรือมีวัตถุอื่น ๆ ที่สามารถวางได้ การถอนการติดตั้งเท่านั้นที่จะลบสิ่งประดิษฐ์ส่วนใหญ่ เราใช้การอนุญาต / การอนุญาตของ drupal และเขียนโมดูลของเราเองภายใน ไม่ใช่สิ่งที่ดีที่สุด แต่ประสิทธิภาพนั้นดีกว่าและง่ายกว่าในการปรับแต่ง เราทำเช่นเดียวกันสำหรับ WP ด้วย


0

ในกรณีของฉันปัญหาขีด จำกัด หน่วยความจำถูกสร้างโดยระบบแคช (โมดูล Boost และ Boost Expire) นี่ทำให้ฉันมีปัญหาในการอัพเดทโมดูลหรือมุมมอง เมื่อปิดใช้งานโมดูล Boost ทั้งหมดจะทำงานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.