อินเทอร์เฟซแบบกราฟิกสำหรับข้อมูลโปรไฟล์ XHProf ที่สามารถจัดเก็บผลลัพธ์ในฐานข้อมูล MongoDB หรือ PDO
แอปพลิเคชันได้รับการทำโปรไฟล์และข้อมูลโปรไฟล์จะถูกถ่ายโอนไปยัง XHGui ซึ่งรับข้อมูลนั้น บันทึกลงใน MongoDB (หรือฐานข้อมูล PDO) และจัดเตรียม GUI ที่สะดวกสำหรับการทำงานกับแอปพลิเคชัน
โปรเจ็กต์นี้เป็น GUI สำหรับแสดงผลการทำโปรไฟล์ เพื่อสร้างโปรไฟล์แอปพลิเคชันของคุณ ใช้ไลบรารีขั้นต่ำเฉพาะ:
XHGui มีข้อกำหนดดังต่อไปนี้:
หากคุณต้องการตัดสินใจว่าจะใช้แบ็กเอนด์ใด คุณสามารถตรวจสอบเมทริกซ์ความเข้ากันได้ว่ามีการใช้งานฟีเจอร์ใดบ้างหรือขาดหายไปในแต่ละแบ็กเอนด์
การติดตั้งเริ่มต้นใช้ฐานข้อมูล MongoDB เอกสารส่วนใหญ่พูดถึง MongoDB
pecl install mongodb
XHGui ต้องใช้เวอร์ชัน 1.3.0 หรือใหม่กว่าไดรเวอร์ใด ๆ และฐานข้อมูลประกอบ:
หมายเหตุ: PDO อาจไม่รองรับคุณสมบัติทั้งหมดของ XHGui ดูที่ #320
โคลนหรือดาวน์โหลด xhgui
จาก GitHub
ชี้เว็บเซิร์ฟเวอร์ของคุณไปที่ไดเร็กทอรี webroot
ตั้งค่าการอนุญาตบนไดเร็กทอรี cache
เพื่อให้เว็บเซิร์ฟเวอร์สามารถสร้างไฟล์ได้ ถ้าคุณขี้เกียจ 0777
ก็ได้ผล
คำสั่งต่อไปนี้จะเปลี่ยนสิทธิ์สำหรับไดเร็กทอรี cache
:
chmod -R 0777 cache
เริ่มต้นอินสแตนซ์ MongoDB XHGui ใช้อินสแตนซ์ MongoDB เพื่อจัดเก็บข้อมูลโปรไฟล์
หากการตั้งค่า MongoDB ของคุณใช้การตรวจสอบสิทธิ์ หรือไม่ได้ทำงานบนพอร์ตเริ่มต้นและโลคัลโฮสต์ ให้อัปเดต config/config.php
ของ XHGui เพื่อให้ XHGui สามารถเชื่อมต่อกับอินสแตนซ์ mongod
ของคุณได้
( ไม่บังคับ แต่แนะนำ) เพิ่มดัชนีใน MongoDB เพื่อปรับปรุงประสิทธิภาพ
XHGui เก็บข้อมูลโปรไฟล์ในการเก็บรวบรวม results
ในฐานข้อมูล xhprof
ใน MongoDB การเพิ่มดัชนีช่วยปรับปรุงประสิทธิภาพ ทำให้คุณสามารถนำทางเพจต่างๆ ได้รวดเร็วยิ่งขึ้น
หากต้องการเพิ่มดัชนี ให้เปิด mongo
shell จากพร้อมท์คำสั่งของคุณ จากนั้น ใช้เมธอด db.collection.ensureIndex()
ของ MongoDB เพื่อเพิ่มดัชนี ดังต่อไปนี้:
$ mongo
> use xhprof
> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
> db.results.ensureIndex( { 'profile.main().wt' : -1 } )
> db.results.ensureIndex( { 'profile.main().mu' : -1 } )
> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
> db.results.ensureIndex( { 'meta.url' : 1 } )
> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
> db.results.ensureIndex( { 'meta.SERVER.SERVER_NAME' : 1 } )
ติดตั้งการพึ่งพากับผู้แต่ง
composer install --no-dev
ตั้งค่าเว็บเซิร์ฟเวอร์ของคุณ ส่วนการกำหนดค่าด้านล่างอธิบายวิธีการตั้งค่ากฎการเขียนซ้ำสำหรับทั้ง nginx และ apache
การตั้งค่านี้ใช้นักเทียบท่าเขียนเพื่อประสานคอนเทนเนอร์นักเทียบท่า
โคลนหรือดาวน์โหลด xhgui
จาก GitHub
เริ่มต้นคอนเทนเนอร์: docker-compose up -d
เปิดเบราว์เซอร์ของคุณที่ http://xhgui.127.0.0.1.xip.io:8142 หรือเพียงแค่ http://localhost:8142 หรือพิมพ์ที่ terminal composer open
หากต้องการปรับแต่ง xhgui ให้คัดลอก config/config.default.php
ไปยัง config/config.php
และแก้ไขไฟล์นั้น
หากต้องการปรับแต่ง docker-compose ให้คัดลอก docker-compose.yml
ไปยัง docker-compose.override.yml
แล้วแก้ไขไฟล์นั้น
XHGui ต้องการเปิดใช้งานการเขียน URL ใหม่ แต่จะทำงานได้หากไม่มี สำหรับ Apache คุณสามารถทำสิ่งต่อไปนี้เพื่อเปิดใช้งานการเขียน URL ใหม่:
ตรวจสอบให้แน่ใจว่าอนุญาตให้แทนที่ .htaccess และ AllowOverride ได้ตั้งค่าคำสั่ง FileInfo สำหรับ DocumentRoot ที่ถูกต้อง
ตัวอย่างการกำหนดค่าสำหรับ Apache 2.4:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
ตรวจสอบให้แน่ใจว่าคุณกำลังโหลด mod_rewrite อย่างถูกต้อง คุณควรเห็นสิ่งที่ชอบ:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui มาพร้อมกับไฟล์ .htaccess
เพื่อเปิดใช้งานกฎการเขียนซ้ำที่เหลือ
สำหรับ nginx และ fast-cgi คุณสามารถใช้ตัวอย่างต่อไปนี้เป็นจุดเริ่มต้น:
server {
listen 80 ;
server_name example.com;
# root directive should be global
root /var/www/example.com/public/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri / /index.php? $args ;
}
location ~ .php$ {
try_files $uri =404 ;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
}
}
วิธีที่รองรับในการสร้างโปรไฟล์แอปพลิเคชันคือการใช้แพ็คเกจ perftools/php-profiler
คุณสามารถใช้แพ็คเกจนั้นเพื่อรวบรวมข้อมูลจากเว็บแอปพลิเคชันของคุณหรือสคริปต์ CLI
จากนั้นข้อมูลนี้จะถูกส่งไปยังฐานข้อมูล XHGui ซึ่งสามารถดูได้ด้วยแอปพลิเคชัน XHGui
แพ็คเกจ php-profiler
เสนอการส่งข้อมูลโดยตรงไปยังอินสแตนซ์ XHGui เมื่อการสร้างโปรไฟล์เสร็จสมบูรณ์เมื่อสิ้นสุดคำขอ
หากแอปพลิเคชันไม่สามารถเชื่อมต่อกับอินสแตนซ์ XHGui ได้โดยตรง แพ็คเกจจะนำเสนอโซลูชันในการเก็บข้อมูลโปรไฟล์ไปยังไฟล์ซึ่งคุณสามารถนำเข้าได้ในภายหลังโดยใช้สคริปต์นำเข้า
คำเตือน : การนำเข้าไฟล์เดียวกันสองครั้งจะสร้างโปรไฟล์ที่ซ้ำกัน
การใช้งานดิสก์สามารถเติบโตได้อย่างรวดเร็ว โดยเฉพาะอย่างยิ่งเมื่อสร้างโปรไฟล์แอปพลิเคชันที่มีฐานโค้ดขนาดใหญ่หรือใช้เฟรมเวิร์กที่ใหญ่กว่า
เพื่อรักษาการเติบโตไว้ ให้กำหนดค่า MongoDB ให้ลบเอกสารโปรไฟล์โดยอัตโนมัติเมื่อถึงอายุที่กำหนดโดยการสร้างดัชนี TTL
ตัดสินใจเลือกอายุเอกสารโปรไฟล์สูงสุดในหน่วยวินาที: คุณอาจต้องการเลือกค่าในการพัฒนาที่ต่ำกว่า (โดยที่คุณทำโปรไฟล์ทุกอย่าง) มากกว่าการใช้งานจริง (โดยที่คุณทำโปรไฟล์เฉพาะเอกสารที่เลือก) คำสั่งต่อไปนี้แนะนำให้ Mongo ลบเอกสารที่เก่ากว่า 5 วัน (432000 วินาที)
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
เป้าหมายของการแสดงน้ำตกของ XHGui คือการรับรู้ว่าคำขอที่เกิดขึ้นพร้อมกันสามารถส่งผลกระทบต่อกันและกันได้ คำขอฐานข้อมูลที่เกิดขึ้นพร้อมกัน กิจกรรมที่ใช้ CPU มาก และแม้แต่การล็อกไฟล์เซสชันอาจเกี่ยวข้องกัน ด้วยแอปพลิเคชันที่เน้น Ajax การทำความเข้าใจการสร้างเพจนั้นซับซ้อนกว่าการโหลดครั้งเดียวมาก หวังว่า Waterfall จะช่วยได้ จำไว้ว่า หากคุณเพียงแสดงโปรไฟล์ตัวอย่างคำขอเท่านั้น น้ำตกจะทำให้คุณเต็มไปด้วยคำโกหกที่ไม่สุภาพ
หมายเหตุบางประการ:
request_ts_micro
ใหม่ เนื่องจากรายละเอียดระดับที่สองทำงานได้ไม่ดีกับ Waterfall ตัววัด Prometheus ที่เหมาะสมสำหรับการตรวจสอบความสมบูรณ์ของบริการจะถูกเปิดเผยบน /metrics
(ปัจจุบันใช้งานได้เฉพาะเมื่อใช้ PDO เพื่อจัดเก็บข้อมูล)
คุณสมบัติ | MongoDB | สปส |
---|---|---|
ผู้ส่งออกโพรมีธีอุส | #305 | |
ผู้ค้นหา::ล่าสุด() | ||
ผู้ค้นหา::แบบสอบถาม() | #384 | |
ผู้ค้นหา::get() | ||
ผู้ค้นหา::getForUrl() | #436 | |
ผู้ค้นหา::getPercentileForUrl() | #436 | |
ผู้ค้นหา::getAvgsForUrl() | #384 | |
ผู้ค้นหา::getAll(เรียงลำดับ) | #436 | |
ผู้ค้นหา::getAll(ทิศทาง) | #436 | |
ผู้ค้นหา::ลบ() | ||
ผู้ค้นหา::ตัดทอน() | ||
ผู้ค้นหา::saveWatch() | #435 | |
ผู้ค้นหา::getAllWatches() | #435 | |
ผู้ค้นหา::truncateWatches() | #435 | |
ผู้ค้นหา::สถิติ() | #305 | |
ผู้ค้นหา::getAllServerNames() | #460 |
ดูการเผยแพร่สำหรับบันทึกการเปลี่ยนแปลง และข้อมูลการเผยแพร่
ลิขสิทธิ์ (c) 2013 Mark Story และ Paul Reinheimer
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.