ข้ามการโพสต์การอ้างอิงของฉันจาก SO Documentation เบต้าซึ่งกำลังออฟไลน์
การทำโปรไฟล์ด้วย XDebug
ส่วนขยายของ PHP ที่ชื่อว่า Xdebug นั้นพร้อมให้ความช่วยเหลือในการทำโปรไฟล์แอปพลิเคชัน PHPรวมถึงการดีบักรันไทม์ เมื่อรัน profiler เอาต์พุตจะถูกเขียนไปยังไฟล์ในรูปแบบไบนารีที่เรียกว่า "cachegrind" แอปพลิเคชั่นพร้อมใช้งานในแต่ละแพลตฟอร์มเพื่อวิเคราะห์ไฟล์เหล่านี้ ไม่มีการเปลี่ยนแปลงรหัสแอปพลิเคชันที่จำเป็นในการทำโปรไฟล์นี้
หากต้องการเปิดใช้งานการทำโปรไฟล์ให้ติดตั้งส่วนขยายและปรับการตั้งค่า php.ini ลีนุกซ์บางรุ่นมาพร้อมกับแพ็คเกจมาตรฐาน (เช่นphp-xdebug
แพ็คเกจของ Ubuntu ) ในตัวอย่างของเราเราจะเรียกใช้โปรไฟล์โดยเลือกตามพารามิเตอร์คำขอ สิ่งนี้ช่วยให้เราสามารถตั้งค่าให้คงที่และเปิดใช้งาน profiler ได้ตามต้องการ
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
ถัดไปใช้เว็บไคลเอ็นต์เพื่อส่งคำขอไปยัง URL แอปพลิเคชันของคุณที่คุณต้องการทำโปรไฟล์เช่น
http://example.com/article/1?XDEBUG_PROFILE=1
เมื่อหน้าประมวลผลมันจะเขียนไปยังไฟล์ที่มีชื่อคล้ายกับ
/tmp/cachegrind.out.12345
โดยค่าเริ่มต้นจำนวนในชื่อไฟล์คือรหัสกระบวนการที่เขียนมัน นี่คือการกำหนดค่าด้วยการxdebug.profiler_output_name
ตั้งค่า
โปรดทราบว่ามันจะเขียนหนึ่งไฟล์สำหรับแต่ละคำขอ / กระบวนการ PHP ที่ดำเนินการ ตัวอย่างเช่นหากคุณต้องการวิเคราะห์การโพสต์ฟอร์มหนึ่งโปรไฟล์จะถูกเขียนเพื่อขอ GET เพื่อแสดงแบบฟอร์ม HTML พารามิเตอร์ XDEBUG_PROFILE จะต้องถูกส่งผ่านไปยังคำขอ POST ที่ตามมาเพื่อวิเคราะห์คำขอที่สองซึ่งประมวลผลแบบฟอร์ม ดังนั้นเมื่อการทำโปรไฟล์บางครั้งการเรียกใช้ curl เพื่อ POST แบบฟอร์มได้ง่ายขึ้น
การวิเคราะห์ผลลัพธ์
เมื่อเขียนแคชรายละเอียดสามารถอ่านได้โดยโปรแกรมดังกล่าวเป็นKCachegrindหรือWebgrind PHPStorm ซึ่งเป็น PHP IDE ยอดนิยมสามารถแสดงข้อมูลการทำโปรไฟล์นี้ได้
ตัวอย่างเช่น KCachegrind จะแสดงข้อมูลรวมถึง:
- ฟังก์ชั่นการดำเนินการ
- เวลาโทรทั้งตัวเองและรวมของฟังก์ชั่นการโทรตามมา
- จำนวนครั้งที่เรียกใช้แต่ละฟังก์ชัน
- กราฟการโทร
- ลิงก์ไปยังซอร์สโค้ด
สิ่งที่ควรมองหา
เห็นได้ชัดว่าการปรับประสิทธิภาพนั้นมีความเฉพาะเจาะจงกับกรณีการใช้งานของแต่ละแอปพลิเคชัน โดยทั่วไปแล้วมันเป็นเรื่องดีที่จะมองหา:
- การเรียกซ้ำไปยังฟังก์ชันเดียวกันที่คุณไม่คาดหวังให้เห็น สำหรับฟังก์ชั่นที่ประมวลผลและค้นหาข้อมูลอาจเป็นโอกาสสำคัญสำหรับแอปพลิเคชันของคุณในการแคช
- ฟังก์ชั่นที่ทำงานช้า แอปพลิเคชันใช้เวลาส่วนใหญ่อยู่ที่ไหน ผลตอบแทนที่ดีที่สุดในการปรับแต่งประสิทธิภาพคือมุ่งเน้นไปที่ส่วนต่างๆของแอปพลิเคชันซึ่งใช้เวลามากที่สุด
หมายเหตุ : Xdebug และโดยเฉพาะอย่างยิ่งคุณลักษณะการทำโปรไฟล์ของมันนั้นใช้ทรัพยากรอย่างมากและทำให้การประมวลผลของ PHP ช้าลง ขอแนะนำให้ไม่เรียกใช้สิ่งเหล่านี้ในสภาพแวดล้อมเซิร์ฟเวอร์ที่ใช้งานจริง