คอมพิวเตอร์ หน้าต่าง อินเทอร์เน็ต

โปรไฟล์ php ที่ซบเซา การทำโปรไฟล์ PHP ด้วย XHprof การเพิ่มประสิทธิภาพรหัสตามข้อมูลการทำโปรไฟล์

เมื่อเวลาผ่านไป โปรแกรมเมอร์ PHP ทุกคนประสบปัญหาประสิทธิภาพต่ำของแอปพลิเคชันของตน นี่อาจเป็นการโหลดหน้าใดหน้าหนึ่งช้าหรือการตอบสนองของ API ที่ใช้เวลานานเกินไป และบางครั้งก็ค่อนข้างยากที่จะเข้าใจว่าอะไรคือสาเหตุของการเบรก? บางครั้งสถานการณ์ที่ยากขึ้นก็เกิดขึ้น: บนเซิร์ฟเวอร์ที่ใช้งานจริง API นั้นช้ามาก แต่บนจุดยืนที่การพัฒนาเกิดขึ้น ทุกอย่างเรียบร้อยดี และไปหาว่าเกิดอะไรขึ้น การดีบักบนเซิร์ฟเวอร์ที่ใช้งานจริงเป็นความสิ้นหวังในระดับสูงสุด ซึ่งแน่นอนว่าเป็นการดีกว่าที่จะไม่นำมา

สำหรับสถานการณ์ดังกล่าวมีการคิดค้นเครื่องมือพิเศษที่เรียกว่าตัวสร้างโปรไฟล์แอปพลิเคชัน ในโลก PHP บทบาทนี้เล่นโดย xDebug และ xhprof xhprof เป็นเครื่องมือที่เบากว่า เรียบง่ายกว่า และยืดหยุ่นกว่า ดังนั้นจึงควรเลือกใช้ ที่น่าสนใจคือ xhprof ได้รับการพัฒนาโดย facebook ในปี 2009 อย่างไรก็ตาม ยังไม่มีการสนับสนุนอย่างเป็นทางการสำหรับ php7 จากพวกเขา และจะไม่มีอีกต่อไปตั้งแต่ facebook เปลี่ยนไปใช้ HHVM อย่างไรก็ตามด้วยชุมชนนักพัฒนา php ที่กว้างขวางทำให้มีทางแยกที่รองรับ php7 ปรากฏขึ้นซึ่งการติดตั้งไม่ได้ทำให้เกิดปัญหาใด ๆ

การติดตั้ง

ก่อนอื่นคุณต้องติดตั้ง xhprof:

โคลน Git https://github.com/longxinH/xhprof xhprof cd xhprof/extension phpize ./configure --with-php-config=/usr/bin/php-config sudo make && sudo make install mkdir /var/tmp/ xhprof

ส่วนขยาย=xhprof.so xhprof.output_dir="/var/tmp/xhprof"

โฟลเดอร์ /var/tmp/xhprof ต้องมีสิทธิในการเขียน เนื่องจาก ผลลัพธ์การทำโปรไฟล์จะถูกบันทึกไว้ที่นั่น

คุณสามารถโหลด PHP-FPM ใหม่และตรวจสอบว่ามีการติดตั้งส่วนขยายหรือไม่ ซ้ำซาก สามารถทำได้โดยใช้เอาต์พุตของฟังก์ชัน phpinfo ();

ติดตั้ง xhprof แล้วคุณสามารถใช้งานได้ แพ็คเกจ xhprof มีอินเทอร์เฟซที่มีประโยชน์มากสำหรับการแยกวิเคราะห์รายงานการทำโปรไฟล์ xhprof ช่วยให้คุณสร้างรายงานได้ทั้งในรูปแบบข้อความและกราฟิก โฟลเดอร์การติดตั้ง xhprof มี xhprof_html และ xhprof_lib ที่เราต้องการ โฟลเดอร์ xhprof_html - ให้การเข้าถึง GUI xhprof_lib เป็นไลบรารีสำหรับแสดงและวิเคราะห์โค้ด ขอแนะนำให้ถ่ายโอนโฟลเดอร์ xhprof ทั้งหมดไปที่ /var/www/xhprof และตั้งค่าโฮสต์เสมือนสำหรับโฟลเดอร์นั้น เช่น xhprof.loc ตัวอย่างสำหรับ nginx:

เซิร์ฟเวอร์ ( ฟัง 80; server_name xhprof.loc; charset utf-8; root /var/www/xhprof/xhprof_html; ดัชนี index.php; สถานที่ / ( try_files $uri $uri/ /index.php?q=$uri&$args ; ) ตำแหน่ง ~ \.php ( fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; ) )

คุณต้องอย่าลืมอัปเดตไฟล์โฮสต์ด้วย ตอนนี้เมื่อเราป้อน URL xhprof.loc ในเบราว์เซอร์เราจะไปที่เว็บอินเตอร์เฟสของผู้สร้างโปรไฟล์ซึ่งจะมีไฟล์ที่สร้างโดยมัน

ตอนนี้คุณสามารถไปที่การทำโปรไฟล์โค้ดได้โดยตรง

ในการเปิดใช้งานตัวสร้างโปรไฟล์ จะใช้ฟังก์ชัน xhprof_enable() ซึ่งยอมรับแฟล็กต่อไปนี้เป็นอินพุต:

  • XHPROF_FLAGS_CPU - สำหรับแก้ไขสถิติ CPU
  • XHPROF_FLAGS_MEMORY - สำหรับหน่วยความจำ
  • XHPROF_FLAGS_NO_BUILTINS - เพื่อละเว้นฟังก์ชั่นในตัว

หากต้องการปิดใช้งานตัวสร้างโปรไฟล์ จะใช้ฟังก์ชัน xhprof_disable() เพื่อความสะดวก เราจะเขียนสองสคริปต์ header.php และ footer.php ที่ทำหน้าที่เหล่านี้ รวม header.php ไว้ที่จุดเริ่มต้นของสคริปต์โปรไฟล์ และ footer.php รวมอยู่ที่ส่วนท้าย footer.php ยังรับผิดชอบในการจัดเก็บข้อมูลการทำโปรไฟล์

header.php: ถ้า (extension_loaded("xhprof")) ( include_once "/var/www/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/xhprof/xhprof_lib/utils/xhprof_runs.php"; xhprof_enable(XHPROF_FLAGS_CPU); ) footer.php: if (extension_loaded("xhprof")) ( $profilerNamespace = "HERE_PROFILING_SCRIPT_NAME"; $xhprofData = xhprof_disable(); $xhprofRuns = new XHProfRuns_Default(); $runId = $xhprofRuns->s ave_run ($xhprofData, $profilerNamespace); )
การใช้งาน

เมื่อเชื่อมต่อ header.php และ footer.php กับสคริปต์โปรไฟล์แล้ว คุณสามารถเริ่มต้น: เมื่อเรียกใช้สคริปต์โปรไฟล์ ไฟล์จะถูกสร้างขึ้นซึ่งจะบันทึกไว้ในไดเร็กทอรี /var/tmp/xhprof ซึ่งมีข้อมูลเกี่ยวกับการทำงานของสคริปต์ . เมื่อเปิดเว็บอินเตอร์เฟส xhprof.loc ไฟล์ที่สร้างขึ้นนี้จะพร้อมใช้งาน:


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


คอลัมน์หมายถึงอะไร:

  • โทร- จำนวนและเปอร์เซ็นต์ของการเรียกใช้ฟังก์ชัน
  • รวม เวลาผนัง- เวลาดำเนินการของฟังก์ชันที่มีฟังก์ชันซ้อนกัน
  • ไม่รวม เวลาผนัง- เวลาดำเนินการของฟังก์ชันโดยไม่มีฟังก์ชันที่ซ้อนกัน
  • รวม ซีพียู- เวลา CPU พร้อมฟังก์ชั่นที่ซ้อนกัน
  • ไม่รวม ซีพียู- เวลา CPU โดยไม่มีฟังก์ชันซ้อนกัน
  • รวม ความทรงจำ- การใช้หน่วยความจำด้วยฟังก์ชั่นที่ซ้อนกัน
  • ไม่รวม ความทรงจำ- การใช้หน่วยความจำโดยไม่มีฟังก์ชั่นซ้อนกัน
  • รวม PeakMemUse- การใช้หน่วยความจำสูงสุดด้วยฟังก์ชั่นที่ซ้อนกัน
  • ไม่รวม PeakMemUse- การใช้หน่วยความจำสูงสุดโดยไม่มีฟังก์ชั่นซ้อนกัน

หากคุณไปตามลิงก์ ต้นไม้การโทรที่สวยงามจะปรากฏขึ้นพร้อมกับการแสดงรหัสที่ช้าที่สุด หากสิ่งนี้ไม่เกิดขึ้น เป็นไปได้มากว่าคุณจะต้องติดตั้งไลบรารี่ของ Graphviz:

apt-get ติดตั้ง Graphviz

ตัวอย่างของแผนภูมิที่ลงจุด:

ในกรณีของฉัน คอขวดคือการโต้ตอบกับฐานข้อมูล


การใช้ xhprof บนเซิร์ฟเวอร์ที่ใช้งานจริง

ในขั้นต้น xhprof ได้รับการพัฒนาโดยเฉพาะสำหรับจุดประสงค์ของรหัสโปรไฟล์ในการต่อสู้บนเซิร์ฟเวอร์ที่ใช้งานจริง ไม่มีเครื่องมือฟรีและมีประสิทธิภาพอื่นใดสำหรับการสร้างโปรไฟล์โค้ด php7 ในการต่อสู้ ดังนั้น xhprof จึงไม่มีคู่แข่ง โดยเฉพาะอย่างยิ่ง ฉันมีประสบการณ์การใช้ xhprof บนเซิร์ฟเวอร์ที่ใช้งานจริงซึ่งประมวลผลคำขอนับล้านรายการต่อวัน มันใช้ php7 และไม่พบปัญหาใด ๆ เลย อย่างไรก็ตาม xhprof ไม่ได้รันสำหรับทุกคำขอ - จะมีการสร้างไฟล์โปรไฟล์มากเกินไป ตัวสร้างโปรไฟล์ของฉันจะเริ่มก็ต่อเมื่อคำขอมีส่วนหัว "XHPROF_ENABLE" และตั้งค่าเป็นจริง คุณยังสามารถใช้กลยุทธ์อื่น เช่น เรียกใช้ตัวสร้างโปรไฟล์แบบสุ่มด้วยความน่าจะเป็น 1/1000 จากนั้นภาพก็จะค่อนข้างชัดเจน


บทสรุป

แม้ว่า xhprof จะไม่ได้รับการสนับสนุนอย่างเป็นทางการสำหรับ php7 แต่ก็ยังเป็นเครื่องมือที่จำเป็นสำหรับนักพัฒนา php

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

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

ทำไมต้องรหัสโปรไฟล์?

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

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

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

นี่คือสิ่งที่โซลูชัน XHProf ได้รับการออกแบบมาสำหรับ มันถูกออกแบบมาเพื่อทำงานบนเว็บไซต์จริง แนวคิดหลักของผู้สร้างโปรไฟล์นี้คือการสร้างการโหลดขั้นต่ำในแอปพลิเคชันในขณะที่รวบรวมข้อมูลที่จำเป็นทั้งหมดเกี่ยวกับความเร็วของงาน โซลูชันนี้ได้รับการพัฒนาโดยผู้เชี่ยวชาญจาก Facebook

จะเชื่อมต่อ php-profiler ในโหมดอัตโนมัติได้อย่างไร?

ผู้เชี่ยวชาญของเราทำงานอย่างหนักและทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติอย่างสมบูรณ์
คุณเพียงแค่ต้องเข้าสู่ระบบ เลือกโดเมนที่ต้องการในแท็บ "โดเมน" คลิกที่ไอคอน "PHP.INI + PHP Profiler" และเปิดใช้งานช่องทำเครื่องหมาย "Domain Profiler"

อาจใช้เวลาสักครู่ในการเปิดใช้งานคุณลักษณะนี้ โดยปกติไม่เกิน 10 นาที

สำหรับ php เวอร์ชัน 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 เราใช้ XHProf profiler สำหรับ php เวอร์ชัน 7.1 และสูงกว่า เราใช้ Tideways profiler

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

ชื่อโดเมน.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)

ไฟล์รายงานจะมีลักษณะดังนี้:

ตารางประกอบด้วยรายการของฟังก์ชันที่ดำเนินการภายในหนึ่งหน้าพร้อมข้อมูลเพิ่มเติม:

  • การโทร - จำนวนและเปอร์เซ็นต์ของการเรียกใช้ฟังก์ชัน
  • รวม Wall Time - เวลาดำเนินการของฟังก์ชันพร้อมฟังก์ชันที่ซ้อนกัน
  • ไม่รวม Wall Time - เวลาดำเนินการของฟังก์ชันโดยไม่มีฟังก์ชันที่ซ้อนกัน
  • รวม CPU - เวลา CPU พร้อมฟังก์ชันที่ซ้อนกัน
  • ไม่รวม CPU - เวลา CPU ที่ไม่มีฟังก์ชันซ้อนกัน
  • รวม MemUse - การใช้หน่วยความจำด้วยฟังก์ชันที่ซ้อนกัน
  • ไม่รวม MemUse - การใช้หน่วยความจำโดยไม่มีฟังก์ชันที่ซ้อนกัน
  • รวม PeakMemUse - การใช้หน่วยความจำสูงสุดด้วยฟังก์ชั่นที่ซ้อนกัน
  • ไม่รวม PeakMemUse - การใช้หน่วยความจำสูงสุดโดยไม่มีฟังก์ชั่นที่ซ้อนกัน

ควรสังเกตว่ารายงานที่สร้างขึ้นโดยใช้ tideways อาจแตกต่างจากรายงานนี้เล็กน้อย แต่สาระสำคัญของรายงานนี้จะไม่เปลี่ยนแปลง

รายงานกราฟิก


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

รายงานรวม

อินเทอร์เฟซ XHProf ยังช่วยให้คุณดูข้อมูลรวมจากรายงานหลายฉบับพร้อมกันได้ ในการทำเช่นนี้ run_id จะถูกส่งผ่านเครื่องหมายจุลภาค:

ชื่อโดเมน.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYYY&source=someapp

คุณสมบัติทางเทคนิค

    การรวม Profiler อัตโนมัติถูกนำมาใช้โดยใช้คำสั่ง auto_append_file และ auto_prepend_file ซึ่งรวมถึงไฟล์ php ที่เรียกใช้งานได้สองไฟล์:

    — auto_append_file เริ่มต้นวัตถุการรวบรวมสถิติและเริ่มทำงาน

    — auto_prepend_file เสร็จสิ้นการรวบรวมสถิติและสร้างไฟล์รายงานพร้อมสถิติ (ในรูปแบบ JSON)

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

  1. ดังนั้น การเข้าถึงเพจใดๆ ที่ประมวลผลโดย php จะเริ่มต้นการสร้างไฟล์รายงานใหม่ ดังนั้นเราขอแนะนำให้ปิดใช้งานตัวสร้างโปรไฟล์หลังจากรวบรวมสถิติ (โดยปกติจะใช้เวลาไม่กี่ชั่วโมงก็เพียงพอแล้ว) เพื่อหลีกเลี่ยงไม่ให้โควต้าดิสก์ล้น ซึ่งสามารถทำได้ เหนื่อยหลังจากสร้างรายงานจำนวนมาก!
  2. ข้อสำคัญ: ตัวสร้างโปรไฟล์จะทำงานได้ก็ต่อเมื่อเว็บไซต์เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้เส้นทางมาตรฐานโดยอัตโนมัติ (นั่นคือ ใช้แผงควบคุมการโฮสต์) มิฉะนั้น คุณต้องติดต่อฝ่ายสนับสนุนด้านเทคนิคของ Hostland เพื่อกำหนดค่าตัวสร้างโปรไฟล์
  3. ในโหมดอัตโนมัติ Profiler จะเชื่อมต่อกับชื่อโดเมนหลักเท่านั้น Profiler จะไม่เชื่อมต่อกับโดเมนย่อยโดยอัตโนมัติ
  4. ในโหมดอัตโนมัติ ตัวสร้างโปรไฟล์จะรวบรวมสถิติสำหรับสคริปต์ที่มีนามสกุล .php และ .php5 เท่านั้น
  5. ไม่สามารถรับประกันการทำงานอย่างต่อเนื่องของไซต์หลังจากเชื่อมต่อ php profiler ดังนั้นในกรณีที่ไซต์ทำงานไม่ถูกต้องในขณะที่เปิดใช้งาน profiler ควรปิดใช้งานและควรทำโปรไฟล์ต่อด้วยวิธีอื่น

สรุป

เราหวังว่าเครื่องมือนี้จะช่วยให้คุณสร้างเว็บไซต์ของคุณได้เร็วยิ่งขึ้นบนโฮสติ้ง Hostland

บทความบางส่วนใช้วัสดุของผู้ใช้ Den Golotyuk ที่โพสต์บนเว็บไซต์

ส่วนขยายของ PHP ที่เรียกว่า Xdebug มีไว้เพื่อช่วยในการทำโปรไฟล์แอปพลิเคชัน PHP เช่นเดียวกับการดีบักรันไทม์ เมื่อเรียกใช้ตัวสร้างโปรไฟล์ เอาต์พุตจะถูกเขียนไปยังไฟล์ในรูปแบบไบนารีที่เรียกว่า "cachegrind" มีแอปพลิเคชันในแต่ละแพลตฟอร์มเพื่อวิเคราะห์ไฟล์เหล่านี้ ไม่จำเป็นต้องเปลี่ยนรหัสแอปพลิเคชันเพื่อทำโปรไฟล์นี้

หากต้องการเปิดใช้งานการทำโปรไฟล์ ให้ติดตั้งส่วนขยายและปรับการตั้งค่า php.ini ลินุกซ์บางรุ่นมาพร้อมกับแพ็คเกจมาตรฐาน (เช่น แพ็คเกจ php-xdebug ของ Ubuntu) ในตัวอย่างของเรา เราจะเรียกใช้โปรไฟล์โดยเลือกตามพารามิเตอร์ร้องขอ ซึ่งช่วยให้เรารักษาการตั้งค่าคงที่และเปิดใช้ตัวสร้างโปรไฟล์ได้ตามต้องการเท่านั้น

# การตั้งค่า php.ini # ตั้งค่าเป็น 1 เพื่อเปิดทุกคำขอ xdebug.profiler_enable = 0 # ลองใช้พารามิเตอร์ GET/POST เพื่อเปิด profiler xdebug.profiler_enable_trigger = 1 # ค่า GET/POST ที่เราจะผ่าน ;empty สำหรับค่าใด ๆ xdebug.profiler_enable_trigger_value = "" # เอาต์พุตไฟล์ cachegrind ไปยัง /tmp เพื่อให้ระบบของเราล้างไฟล์เหล่านี้ในภายหลัง 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 เพื่อโพสต์แบบฟอร์มโดยตรงจึงง่ายกว่า

การวิเคราะห์ผลลัพธ์

เมื่อเขียนแล้ว แคชของโปรไฟล์สามารถอ่านได้โดยแอปพลิเคชัน เช่น หรือ Webgrind PHPStorm ซึ่งเป็น PHP IDE ยอดนิยม สามารถแสดงข้อมูลการทำโปรไฟล์นี้ได้เช่นกัน

ตัวอย่างเช่น KCachegrind จะแสดงข้อมูลรวมถึง:

  • ฟังก์ชั่นที่ดำเนินการ
  • เวลาการโทร ทั้งตัวมันเองและรวมถึงการเรียกใช้ฟังก์ชันที่ตามมา
  • จำนวนครั้งที่เรียกใช้แต่ละฟังก์ชัน
  • กราฟการโทร
  • ลิงค์ไปยังซอร์สโค้ด

สิ่งที่ต้องมองหา

เห็นได้ชัดว่าการปรับแต่งประสิทธิภาพนั้นมีความเฉพาะเจาะจงมากสำหรับแต่ละกรณีการใช้งาน โดยทั่วไป คุณควรมองหา:

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

บันทึก: Xdebug และโดยเฉพาะอย่างยิ่งคุณสมบัติการทำโปรไฟล์นั้นใช้ทรัพยากรมากและทำให้การทำงานของ PHP ช้าลง ขอแนะนำไม่ให้เรียกใช้สิ่งเหล่านี้ในสภาพแวดล้อมเซิร์ฟเวอร์ที่ใช้งานจริง


บางครั้ง ViewProfile.swf และข้อผิดพลาดของระบบ SWF อื่นๆ อาจเกี่ยวข้องกับปัญหาในรีจิสทรีของ Windows หลายโปรแกรมสามารถใช้ไฟล์ ViewProfile.swf ร่วมกันได้ แต่เมื่อโปรแกรมเหล่านั้นถูกลบหรือเปลี่ยนแปลง บางครั้งรายการรีจิสทรี SWF ที่ถูกละเลย (ไม่ถูกต้อง) จะถูกทิ้งไว้เบื้องหลัง

โดยทั่วไป หมายความว่าแม้ว่าเส้นทางจริงไปยังไฟล์อาจมีการเปลี่ยนแปลง แต่ตำแหน่งเดิมที่ไม่ถูกต้องจะยังคงบันทึกไว้ในรีจิสทรีของ Windows เมื่อ Windows พยายามค้นหาการอ้างอิงไฟล์ที่ไม่ถูกต้องเหล่านี้ (ตำแหน่งไฟล์บนพีซีของคุณ) ข้อผิดพลาด ViewProfile.swf อาจเกิดขึ้นได้ นอกจากนี้ การติดมัลแวร์อาจทำให้รายการรีจิสทรีที่เกี่ยวข้องกับ Bioshock 2 เสียหาย ดังนั้น รายการรีจิสทรี SWF ที่ไม่ถูกต้องเหล่านี้จำเป็นต้องได้รับการแก้ไขเพื่อแก้ไขต้นตอของปัญหา

ไม่แนะนำให้แก้ไขรีจิสทรีของ Windows ด้วยตนเองเพื่อลบคีย์ ViewProfile.swf ที่ไม่ถูกต้อง เว้นแต่คุณจะเป็นมืออาชีพด้านบริการพีซี ข้อผิดพลาดที่เกิดขึ้นขณะแก้ไขรีจิสทรีอาจทำให้พีซีของคุณใช้งานไม่ได้และทำให้ระบบปฏิบัติการของคุณเสียหายอย่างไม่สามารถแก้ไขได้ ในความเป็นจริงแม้แต่เครื่องหมายจุลภาคเดียวในตำแหน่งที่ไม่ถูกต้องก็สามารถป้องกันไม่ให้คอมพิวเตอร์ของคุณบูทได้!

เนื่องจากความเสี่ยงนี้ เราขอแนะนำให้ใช้โปรแกรมล้างรีจิสทรีที่เชื่อถือได้ เช่น WinThruster (พัฒนาโดย Microsoft Gold Certified Partner) เพื่อสแกนและซ่อมแซมปัญหาเกี่ยวกับรีจิสทรีที่เกี่ยวข้องกับ ViewProfile.swf การใช้ตัวล้างรีจิสทรีจะทำให้กระบวนการค้นหารายการรีจิสทรีไม่ถูกต้องโดยอัตโนมัติ ไม่มีการอ้างอิงไฟล์ (เช่น ที่ทำให้เกิดข้อผิดพลาด ViewProfile.swf ของคุณ) และลิงก์เสียภายในรีจิสทรี สำเนาสำรองจะถูกสร้างขึ้นโดยอัตโนมัติก่อนการสแกนแต่ละครั้ง ช่วยให้คุณสามารถยกเลิกการเปลี่ยนแปลงใดๆ ได้ด้วยคลิกเดียว และปกป้องคุณจากความเสียหายที่อาจเกิดขึ้นกับคอมพิวเตอร์ของคุณ ส่วนที่ดีที่สุดคือการแก้ไขข้อผิดพลาดของรีจิสทรีสามารถปรับปรุงความเร็วและประสิทธิภาพของระบบได้อย่างมาก


คำเตือน:เราไม่แนะนำให้แก้ไข Windows Registry ด้วยตนเอง ยกเว้นกรณีที่คุณเป็นผู้ใช้พีซีขั้นสูง การใช้ Registry Editor อย่างไม่ถูกต้องอาจทำให้เกิดปัญหาร้ายแรงและทำให้คุณต้องติดตั้ง Windows ใหม่ เราไม่รับประกันว่าปัญหาที่เกิดจากการใช้ Registry Editor ในทางที่ผิดจะสามารถแก้ไขได้ คุณใช้ Registry Editor โดยยอมรับความเสี่ยงเอง

หากต้องการซ่อมแซมรีจิสทรีของ Windows ด้วยตนเอง ก่อนอื่นคุณต้องสร้างข้อมูลสำรองโดยการส่งออกส่วนหนึ่งของรีจิสทรีที่เกี่ยวข้องกับ ViewProfile.swf (เช่น Bioshock 2):

  1. คลิกที่ปุ่ม เริ่ม.
  2. เข้า " สั่งการ"วี แถบค้นหา... อย่าเพิ่งกด เข้า!
  3. ถือกุญแจ CTRL-Shiftบนแป้นพิมพ์ ให้กด เข้า.
  4. กล่องโต้ตอบการเข้าถึงจะปรากฏขึ้น
  5. คลิก ใช่.
  6. กล่องดำจะเปิดขึ้นพร้อมเคอร์เซอร์กะพริบ
  7. เข้า " ลงทะเบียน" และกด เข้า.
  8. ใน Registry Editor ให้เลือกคีย์ที่เกี่ยวข้องกับ ViewProfile.swf (เช่น Bioshock 2) ที่คุณต้องการสำรองข้อมูล
  9. บนเมนู ไฟล์เลือก ส่งออก.
  10. รายการ บันทึกที่เลือกโฟลเดอร์ที่คุณต้องการบันทึกข้อมูลสำรองคีย์ Bioshock 2
  11. ในสนาม ชื่อไฟล์ป้อนชื่อสำหรับไฟล์สำรองข้อมูล เช่น "Bioshock 2 Backup"
  12. ตรวจสอบให้แน่ใจว่าฟิลด์ ช่วงการส่งออกค่าที่เลือก สาขาที่เลือก.
  13. คลิก บันทึก.
  14. ไฟล์จะถูกบันทึก ด้วยนามสกุล .reg.
  15. ขณะนี้คุณมีข้อมูลสำรองของรายการรีจิสตรีที่เกี่ยวข้องกับ ViewProfile.swf

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

อัปเดตล่าสุด: 01/12/2019

เผยแพร่: 01/09/2016


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

ข้อมูลนี้สามารถให้คำแนะนำแก่คุณเกี่ยวกับจุดที่ควรปรับปรุงโค้ดของคุณ

เรามาดูกันว่ามันทำงานอย่างไร

1. เงื่อนไขที่จำเป็น

PhpStorm IDE สามารถใช้ข้อมูลโปรไฟล์ที่รวบรวมด้วยเครื่องมือ Xdebug ต้องติดตั้งและกำหนดค่าส่วนขยายนี้ในระบบของคุณ ดูคู่มือการติดตั้ง Xdebug สำหรับข้อมูลเพิ่มเติม

หากคุณเป็นผู้ใช้แพลตฟอร์มเซิร์ฟเวอร์พกพาที่ยอดเยี่ยมและสภาพแวดล้อมซอฟต์แวร์ Open Server ก็ไม่มีอะไรต้องทำ - ส่วนขยาย Xdebug ได้รับการติดตั้งและเชื่อมต่อแล้ว

ความสนใจ

Xdebug เข้ากันไม่ได้กับ IonCube IonCube เป็นเครื่องมือ (ยูทิลิตี้) สำหรับปกป้องซอฟต์แวร์ที่เขียนด้วยภาษาโปรแกรม PHP ปิดใช้งานส่วนขยาย IonCube โดยสิ้นเชิงหรือในขณะที่ใช้ Xdebug อีกปัญหาหนึ่งที่เป็นไปได้คือ Xdebug ถูกตั้งค่าเป็นพอร์ต 9000 ตามค่าเริ่มต้น ซึ่งเป็นสิ่งที่ Open Server ใช้เช่นกัน ในการแก้ปัญหา ในกรณีใดกรณีหนึ่ง ให้เปลี่ยนหมายเลขพอร์ต

ขั้นตอนทั้งหมดที่อธิบายไว้ที่นี่ได้รับการทำซ้ำโดยมีผลลัพธ์ที่ถูกต้องตามที่คาดไว้ภายใต้สภาพแวดล้อมทางเทคโนโลยีต่อไปนี้:

2. เปิดใช้งานตัวสร้างโปรไฟล์ Xdebug

การทำโปรไฟล์เพิ่มค่าใช้จ่ายบางส่วนในการเรียกใช้แอปพลิเคชัน และสร้างข้อมูลจำนวนมากบนดิสก์ ดังนั้นจึงเป็นการดีที่สุดที่จะเปิดใช้งาน Xdebug profiler เมื่อจำเป็นเท่านั้น และปิดใช้งานตามปกติ

การกำหนดค่า Xdebug ทำผ่านคำสั่งในไฟล์ php.ini ที่ใช้งานอยู่ ไม่ว่าคุณจะเปิดใช้งานตัวสร้างโปรไฟล์ด้วยวิธีใดก็ตาม คุณต้องกำหนดค่าคำสั่งต่อไปนี้:

xdebug.profiler_output_dir = /path/to/store/snapshots

ในค่าของไดเร็กทีฟ คุณต้องระบุพาธที่จะใช้ในการบันทึกไฟล์การทำโปรไฟล์

2.1. ในระดับโลก

หากต้องการเปิดใช้งาน Xdebug profiler ทั่วโลก ให้ใช้คำสั่งต่อไปนี้:

xdebug.profiler_enable = 1

ดังนั้น การทำโปรไฟล์จะดำเนินการทุกครั้งที่มีการเรียกใช้สคริปต์ใดๆ สะดวกที่จะใช้ตัวเลือกนี้เพื่อเปิดใช้งานตัวสร้างโปรไฟล์เฉพาะในกรณีที่หายากเท่านั้น

2.2. การใช้ตัวเลือกล่ามเพิ่มเติม

คุณสามารถเปิดใช้งานตัวสร้างโปรไฟล์โดยใช้ตัวเลือกล่ามเพิ่มเติมในหน้าต่าง Run/Debug Configurations หากต้องการเปิด ให้ใช้รายการต่อไปนี้ในเมนูหลักของ IDE:

ตัวเลือก (ทำเครื่องหมายด้วยโครงร่างสีแดงในภาพหน้าจอด้านบน) ตัวเลือกล่าม (ตัวเลือกล่าม) ส่วน Command Line (บรรทัดคำสั่ง) ควรมีบรรทัดต่อไปนี้:

xdebug.profiler_enable = 1

ตัวเลือกนี้จะอนุญาตให้คุณใช้ตัวสร้างโปรไฟล์สำหรับการกำหนดค่าเฉพาะ ไม่ใช่ในระดับโลก

2.3. การใช้พารามิเตอร์ GET/POST พิเศษหรือคุกกี้

สำหรับการทำโปรไฟล์ที่มีการควบคุมมากขึ้น ควรใช้คำสั่งต่อไปนี้:

xdebug.profiler_enable_trigger = 1

ถ้าคำสั่งนี้ถูกตั้งค่าเป็น 1 ดังนั้นเมื่อเรียกใช้งานสคริปต์ด้วยพารามิเตอร์ GET/POST หรือคุกกี้ชื่อ XDEBUG_PROFILE การทำโปรไฟล์จะดำเนินการโดยไม่คำนึงถึงการตั้งค่า xdebug.profiler_enable

ตัวเลือกสำหรับการเปิดใช้งานตัวสร้างโปรไฟล์นี้เป็นที่นิยมมากที่สุด

3. การรวบรวมบันทึกการทำโปรไฟล์

เพื่อให้สามารถวิเคราะห์บันทึกการทำโปรไฟล์ได้ จะต้องรวบรวมก่อน

3.1. การรวบรวมบันทึกการทำโปรไฟล์สำหรับเว็บแอปพลิเคชัน

หากต้องการโปรไฟล์เว็บแอปพลิเคชัน ให้ใช้ Xdebug profiler ทั่วโลกหรือเริ่มและหยุดได้ตามต้องการ หลังจากเปิดตัวสร้างโปรไฟล์แล้ว ให้เปิดแอปพลิเคชันในเบราว์เซอร์เพื่อเริ่มรวบรวมข้อมูล - บันทึกการทำโปรไฟล์

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

3.2. รวบรวมบันทึกการทำโปรไฟล์สำหรับแอปพลิเคชัน CLI และการทดสอบหน่วย

หากต้องการทำโปรไฟล์แอปพลิเคชัน CLI และการทดสอบหน่วย ให้ใช้ Xdebug profiler ทั่วโลก หรือสร้างการกำหนดค่าการรันแยกต่างหากเพื่อเปิดใช้งาน profiler โดยใช้หน้าต่าง Run/Debug Configurations จากนั้นเรียกใช้แอปพลิเคชัน CLI หรือการทดสอบหน่วยเพื่อรวบรวมข้อมูลการทำโปรไฟล์

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

4. การวิเคราะห์คำอธิบายของบันทึกการทำโปรไฟล์

มาดูบันทึกการทำโปรไฟล์ให้ละเอียดยิ่งขึ้น

4.1. การเปิดบันทึกการทำโปรไฟล์

หากต้องการเปิดบันทึกการทำโปรไฟล์ ให้ใช้รายการต่อไปนี้ในเมนูหลักของ IDE: .

หากคุณเป็นผู้ใช้ Open Server แพลตฟอร์มเซิร์ฟเวอร์แบบพกพาที่ยอดเยี่ยม คุณยังสามารถใช้เครื่องมือข้ามแพลตฟอร์ม Webgrind เพื่อดูบันทึกการทำโปรไฟล์ได้ สามารถดูได้จากรายการต่อไปนี้ในเมนูหลักของ Open Server [ขั้นสูง → ตัวสร้างโปรไฟล์ PHP].

บันทึกการทำโปรไฟล์จะถูกบันทึกลงในโฟลเดอร์ตามคำสั่ง xdebug.profiler_output_dir ที่กำหนดค่าไว้ ชื่อของไฟล์ที่สร้างขึ้นจะขึ้นต้นด้วย cachegrind.out เสมอ และลงท้ายด้วย ID กระบวนการของ PHP หรือ ID กระบวนการของเว็บเซิร์ฟเวอร์ หรือแฮช crc32 ของไดเร็กทอรีซึ่งมีสคริปต์ทำโปรไฟล์อยู่


4.2. แท็บสถิติการดำเนินการ

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

ตารางด้านบนแสดงเมตริกต่างๆ:

  • Own Time - ระยะเวลาที่ฟังก์ชันใช้ในการรันโค้ด (ไม่รวมการเรียกฟังก์ชันอื่นๆ)

ตารางด้านล่างแสดงสองแท็บ: Callees (การโทร) - ฟังก์ชันที่สคริปต์เรียกใช้ที่นี่ และ Callers (ผู้โทร) - จากตำแหน่งที่สคริปต์ถูกเรียกใช้ คุณสามารถดูตัวชี้วัดต่างๆ ได้ที่นี่:

  • เวลา (เวลา) - เวลาดำเนินการทั้งหมด
  • โทร (โทร) - จำนวนการโทร

ฟังก์ชันที่มีเวลาในการดำเนินการเนทีฟนานหรือการโทรจำนวนมากจำเป็นต้องได้รับการทดสอบอย่างแน่นอน

4.3. โทรทรีแท็บ

แท็บ Call Tree แสดงเส้นทางการดำเนินการสำหรับโค้ดของคุณ คุณสามารถดูข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับเวลาดำเนินการของแต่ละฟังก์ชันและอื่นๆ ได้ที่นี่

ตารางด้านบนสุดจะแสดงแผนผังการเรียก (ฟังก์ชันใดถูกเรียกใช้ในฟังก์ชันอื่น) และเมตริกอื่นๆ:

  • Callable - ไฟล์ที่ถูกเรียกใช้
  • เวลา (เวลา) - เวลาดำเนินการทั้งหมด
  • โทร (โทร) - จำนวนการโทร

ตารางด้านล่างแสดงสองแท็บ: Callees (ผู้โทร) - ฟังก์ชันที่ถูกเรียกใช้ที่นี่ และ Callers (ผู้โทร) - ฟังก์ชันที่เรียกใช้จาก คุณสามารถดูตัวชี้วัดต่างๆ ได้ที่นี่:

  • Callable - ฟังก์ชันที่ดำเนินการแล้ว
  • เวลา (เวลา) - เวลาดำเนินการทั้งหมด
  • โทร (โทร) - จำนวนการโทร

ควบคุมคำถาม

  1. แอปพลิเคชัน PHP ทำโปรไฟล์เพื่ออะไร
  2. มีกี่วิธีหลักในการเปิดใช้งาน Xdebug profiler
  3. วิธีที่ดีที่สุดในการดำเนินการเมื่อทำโปรไฟล์แอปพลิเคชัน CLI และการทดสอบหน่วยคืออะไร
  4. เครื่องมือใดที่สามารถใช้ในการวิเคราะห์บันทึกการทำโปรไฟล์
  5. เมื่อวิเคราะห์บันทึกการทำโปรไฟล์ คุณควรคำนึงถึงเมตริกใดเป็นอันดับแรก