สิ่งที่ทุกคนมีส่วนร่วมในเวลาดำเนินการหน้า drupal?


17

ฉันมีเว็บไซต์ที่ฉันกำลังตรวจสอบว่ามีปัญหาด้านประสิทธิภาพการทำงานที่สำคัญโดยใช้ memcache ฉันสามารถนำจำนวนการสืบค้นลงทั้งในจำนวนและเวลาการยกเว้นทั้งหมด (จาก 3 วินาทีถึง 230 มิลลิวินาที) แต่เวลาในการดำเนินการหน้าจะทำให้ฉันหมดไป ดูค่าที่ outputted โดย devel) ความเข้าใจของฉันคือเวลาในการประมวลผลหน้า = เวลาที่ใช้ในการรัน php ดังนั้นฉันจึงติดตั้ง APC และฉันสามารถเห็น php opcode แคชและสถิติแสดงการเข้าชมในแผงควบคุม APC (apc.php จัดส่งด้วย APC) เวลาในการเรียกใช้หน้าเว็บของฉันไม่ลดลง ดังนั้นฉันคิดว่าคำถามของฉันเป็นสองเท่า:

  • สิ่งที่ทุกคนมีส่วนร่วมในเวลาดำเนินการหน้า มันใช้เวลาในการรัน php หรือยัง?
  • ฉันควรใช้วิธีการใดเพื่อลดเวลาในการเรียกใช้เพจ ฉันลองใช้ APC แต่ไม่ได้ช่วยอะไรมาก

จำนวน PS ของโมดูลที่ใช้ในไซต์นี้มีขนาดใหญ่มาก (168) แต่ตอนนี้ฉันไม่ได้อยู่ในตำแหน่งที่จะให้คำแนะนำได้มันเหมือนไฟในสถานการณ์หลุม

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

เอาต์พุตของการรัน xhprof บนอินสแตนซ์โลคัล

คำตอบ:


4

รับ cachegrind จากเว็บไซต์ของคุณ xdebugหรือxhprofสามารถสร้างได้ นี่จะบอกคุณว่าฟังก์ชั่นใดใช้เวลานานที่สุดในการรัน จนกว่าคุณจะทำเช่นนี้มันเป็นเกมที่เดาไม่ดี


สวัสดีขอบคุณสำหรับคำแนะนำที่ฉันเพิ่งเรียกใช้ xhprof กับรุ่นพัฒนาท้องถิ่น (แล็ปท็อปไม่ได้อยู่บนเซิร์ฟเวอร์) และฉันเห็นสิ่งนี้ - picasaweb.google.com/lh/photo/… นี่เป็นของจริงหรือเปล่า ฉันหมายถึงเป็นไปได้ไหมที่หน้าเว็บจะใช้หน่วยความจำ 750MB หรือไม่
Dipen

มันอาจจะเป็นเพราะการเฆี่ยนตี? ข้อมูลที่ถูกทำโปรไฟล์ในภายหลังสำหรับ url เดียวกันหากคุณดูที่ url เดียวกันด้านล่างจะใช้ทรัพยากรน้อยกว่ามาก แต่การรัน diff แสดงให้เห็นความแตกต่างและการใช้ทรัพยากรมาก
Dipen

1
มันขึ้นอยู่กับว่า แต่สำหรับ 99.9% ของการตั้งค่าถ้าคุณใช้ RAM มากกว่า 100MB มีบางอย่างผิดปกติ
mikeytown2

นอกจากจำนวนโมดูลแล้วยังมีอะไรผิดปกติอีกไหม? ฉันไม่แน่ใจว่าสามารถลบโมดูลออกจากการผลิตได้ทันทีหรือไม่ Btw บนท้องที่ฉันใช้ nginx + php-fpm และในการผลิตไซต์ใช้ lighspeed กับ cgi ที่รวดเร็ว
Dipen

1
คุณต้องเจาะลึกลงไปใน cachegrind และทำรายการฟังก์ชั่นที่กินอยู่ตลอดเวลา img715.imageshack.us/i/cgrindout.png
mikeytown2

1

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

ใช้การแคชที่ก้าวร้าวในขณะที่คุณสามารถแคชทุกอย่างหากยังไม่พอให้ลองใช้ reverse proxy cache การใช้ CDN สำหรับไฟล์สามารถปรับปรุงสิ่งทั้งหมดได้อย่างมาก แคชพร็อกซีย้อนกลับยังสามารถช่วยคุณได้ด้วยการลบคุกกี้การรับรองความถูกต้องบางอย่างเมื่อกดปุ่มเพจที่ไม่ต้องการ (จากนั้นแกนจะคิดว่าผู้ใช้ไม่ระบุชื่อสำหรับผู้ใช้และเพิ่มการแคชสูงสุด)


ความเคลื่อนไหวหลักของ Drupal ทำให้รุ่งอรุณทั้งหมดช้าลงทันทีที่คุณมีโมดูลมากเกินไปในเวลาเดียวกัน

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

การแสดงผลอาจใช้เวลานานเช่นกัน drupal_render () (การแสดงผล API ที่บางครั้งเรียกว่า) เป็นส่วนที่ดีของ API (มีประโยชน์จริงๆ) แต่ก็ช้าไปหน่อย การสลับไปใช้ PDO (D7) และ DBTNG เต็มรูปแบบ (ซึ่งยอดเยี่ยมมาก) ยังช่วยเพิ่มความหน่วงแฝง

ที่กล่าวว่าคอร์โดยตัวมันเองนั้นค่อนข้างเร็ว (แต่มันจะทำการสืบค้น SQL มากเกินไปแม้จะแทบจะไม่ได้ติดตั้งก็ตาม) โมดูลที่มีรหัสไม่ดีมักจะเป็นคอขวด

APC สามารถแบ่งเวลาดำเนินการต่อ 2 หรือ 3 ขึ้นอยู่กับรหัสที่ทำงาน หากคุณกำหนดค่าไว้อย่างดี (เปิดใช้งานการเพิ่มประสิทธิภาพ APC ทั้งหมดคู่มือ APC อย่างเป็นทางการนั้นเขียนได้ดีและจะแนะนำคุณ)

หากคุณอยู่ในกล่องที่มีระบบไฟล์ช้า (ระบบไฟล์เครือข่ายหรือฮาร์ดไดรฟ์ช้า) มันสามารถบ่งบอกถึงผลกระทบที่มองเห็นได้ในเวลาดำเนินการ Drupal ทำมาจากไฟล์ขนาดเล็กจำนวนมากซึ่งบังคับให้ PHP ทำ I / O บน FS ในแต่ละครั้งที่โหลดหนึ่งไฟล์ (APC ก็ช่วยได้มากเช่นกัน)

DBMS ที่กำหนดค่าผิดอาจเป็นคอขวดที่น่าเกลียดถ้าคุณใช้ MySQL คิดว่าจะทำการจูนแบบละเอียด หากคุณอยู่บนโฮสติ้งที่ใช้ร่วมกันหากไม่ใช่ DBMS และสแต็กของ DBUP และ PHP ที่เฉพาะเจาะจงของ Drupal อาจมีการกำหนดค่าผิดพลาดหรือไม่ได้รับการปรับจูนซึ่งอาจนำไปสู่เว็บไซต์ที่ช้ามาก ๆ

อย่าลืมเปิดใช้งานแคชทั้งหมด หากไซต์ของคุณไม่ได้รับการรับรองความถูกต้องของผู้ใช้ให้เปิดใช้งานการแคชหน้าเว็บที่ไม่พอใจ (มันยอดเยี่ยมมาก)

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

หลีกเลี่ยงโมดูลที่ใช้ hook_init (), hook_init () กำลังทำงานในทุก ๆ หน้าแม้ว่าคุณจะได้รับ 403 หรือ 404 ซึ่งจะทำให้ทุกอย่างช้าลง (มันช้าลงแม้เวลา imagecache | สไตล์การสร้างและข้อผิดพลาด 404 ในไฟล์จะเป็น อรุณช้าเพียงเพื่อบอกคุณไม่มีไฟล์)


สวัสดีที่นี่เมื่อฉันพูดเวลาดำเนินการหน้าฉันหมายถึงค่าที่แสดงโดยโมดูล devel ที่ด้านล่างของหน้าและไม่ได้ใช้มันในความรู้สึกทั่วไปของวงจรร้องขอ / ตอบสนอง drupal ซึ่งรวมถึงแบบสอบถาม SQL ฯลฯ คำถามของฉันคือ ในบริบทของผู้ใช้รับรองความถูกต้อง ดังนั้นเมื่อ devel รายงานเวลาที่ใช้ในการประมวลผลหน้าเว็บมันจะรวมคิวรี่ sql ด้วยหรือไม่
Dipen

ฉันไม่แน่ใจว่าระบบไฟล์จะเป็นคอขวดหรือไม่เพราะฉันใช้ระบบไฟล์ linux 15k RPM คำสั่ง SQL นั้นใช้เวลาประมาณ 300-700ms ขึ้นอยู่กับหน้า แต่เวลาในการประมวลผลหน้า ~ = 3 วินาที (รายงานโดย devel) ไม่แน่ใจว่าจะมีปัญหาอะไรอีก
Dipen

ขอโทษที่ฉันอ่านโพสต์ต้นฉบับของคุณผิด ค่า Devel คำนวณจากการบูตไปยังการปิดระบบ (โมดูล devel มีตัวจัดการการปิดระบบ PHP สำหรับการทำสิ่งต่าง ๆ มากมายรวมถึงสิ่งนี้) ฉันไม่แน่ใจว่าเมื่อใดที่เริ่มต้นและหยุดทำงาน แต่เวลาในการสร้างหน้า Drupal และข้อมูลเฉพาะทางธุรกิจนั้นรวมอยู่ในเวลาดำเนินการของหน้าเว็บ ใช่มันรวมทุกอย่าง (รวมถึงเวลาแบบสอบถาม SQL และเวลาแฝง) และเวลาแฝงของตัวเอง (การบันทึกแบบสอบถาม devel มีผลต่อประสิทธิภาพด้วย)
Pierre
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.