Thứ sáu, 19/02/2016 | 00:00 GMT+7

Cách thiết lập XHProf và XHGui để lập profile ứng dụng PHP trên Ubuntu 14.04

Trong kỹ thuật phần mềm, lược tả là một kỹ thuật được sử dụng để phân tích các ứng dụng tại thời điểm chạy, nhằm xác định các vấn đề về hiệu suất và tắc nghẽn có thể xảy ra trong một ứng dụng. Nó là một nguồn tài nguyên thiết yếu để tối ưu hóa phần mềm. Lập profile khác với đo điểm chuẩn vì nó phân tích ứng dụng ở cấp mã, trong khi đo điểm chuẩn nhằm phân tích hiệu suất ứng dụng tổng thể như trải nghiệm của user cuối.

Hồ là một phần mềm sẽ thu thập thông tin chi tiết về ứng dụng để tạo ra số liệu thống kê và dữ liệu sâu sắc về việc sử dụng bộ nhớ, tần suất và thời lượng của các lệnh gọi hàm, thời gian phản hồi một yêu cầu, cùng những thứ khác.

XHProf là một trình biên dịch được thiết kế để phân tích các ứng dụng PHP. Được tạo ra và có nguồn mở bởi Facebook, XHProf hoạt động như một trình biên dịch thụ động, nghĩa là nó sẽ hoạt động ở chế độ nền trong khi có tác động tối thiểu đến hiệu suất của ứng dụng, làm cho nó phù hợp để được sử dụng trên các môi trường production .

XHGui cung cấp một giao diện phong phú để trực quan hóa dữ liệu được thu thập qua XHProf.

Hướng dẫn này sẽ chỉ cho bạn cách cài đặt XHProf và XHGui để cấu hình một ứng dụng PHP chạy trên Ubuntu 14.04.

XHProf hiện không hỗ trợ PHP 7. Nếu bạn đang sử dụng PHP 7 trên server của bạn , bạn có thể thử phần mở rộng tideways / php-profiler- thay thế, hoạt động như một phần thay thế cho XHProf.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Server Ubuntu 14.04 với user sudo không phải root mà bạn có thể cài đặt theo hướng dẫn Cài đặt Server Ban đầu của ta
  • Một môi trường web server PHP chức năng chạy ứng dụng PHP sẽ được phân tích

Khi đã sẵn sàng để tiếp tục, hãy đăng nhập vào server bằng account sudo của bạn.

Bước 1 - Cài đặt Phụ thuộc Server

Trong trường hợp bạn chưa cài đặt pecl trên server của bạn , bạn nên cài đặt nó ngay bây giờ. Ta cần nó để cài đặt cả xhprof và phần mở rộng mongo PHP.

Đầu tiên, hãy cập nhật cache ẩn của trình quản lý gói với:

  • sudo apt-get update

Tiếp theo, ta sẽ cài đặt pecl với gói php-pear . Ta cũng cần php5-dev để cài đặt các module PHP qua peclphp5-mcrypt để cài đặt XHGui:

  • sudo apt-get install php-pear php5-dev php5-mcrypt

Để bật tiện ích mở rộng mcrypt , hãy chạy:

  • sudo php5enmod mcrypt

Cuối cùng, ta cần Git để cài đặt XHGui. Nếu Git chưa được cài đặt trên server của bạn, bạn có thể cài đặt nó ngay bây giờ với:

  • sudo apt-get install git

Bước 2 - Cài đặt XHProf

Bây giờ ta sẽ cài đặt và kích hoạt XHProf. Để cài đặt nó qua pecl , hãy chạy:

  • sudo pecl install xhprof-beta

Tiếp theo, ta cần kích hoạt phần mở rộng xhprof . Để tạo điều kiện thuận lợi cho quá trình này trong khi vẫn giữ các tiêu chuẩn Ubuntu / Debian, ta sẽ tạo một file cấu hình ini riêng biệt và kích hoạt nó bằng cách sử dụng lệnh php5enmod .

Tạo file cấu hình ini mới bên trong /etc/php5/mods-available :

  • sudo nano /etc/php5/mods-available/xhprof.ini

Bao gồm các nội dung sau trong file này:

/etc/php5/mods-available/xhprof.ini
extension=xhprof.so 

Để bật file cấu hình module , hãy chạy:

  • sudo php5enmod xhprof

Bây giờ điều duy nhất còn lại cần làm là khởi động lại web server để áp dụng các thay đổi. Trên môi trường LAMP (Apache), bạn có thể thực hiện việc này với:

  • sudo service apache2 restart

Trên môi trường LEMP (Nginx + PHP5-FPM), bạn nên khởi động lại dịch vụ php5-fpm với:

  • sudo service php5-fpm restart

Phần mở rộng xhprof bây giờ sẽ được cài đặt và kích hoạt. Để xác nhận, bạn có thể chạy:

  • php --ri xhprof

Đầu ra phải giống như sau :

Output
xhprof xhprof => 0.9.2 CPU num => 1

Bước 3 - Cài đặt MongoDB

Bước tiếp theo là cài đặt MongoDB và phần mở rộng mongo PHP trên server . MongoDB được XHGui sử dụng để lưu trữ dữ liệu thu được thông qua phân tích ứng dụng của XHProf.

Để cài đặt MongoDB, hãy chạy:

  • sudo apt-get install mongodb

Để cài đặt phần mở rộng MongoDB PHP, hãy chạy:

  • sudo pecl install mongo

Cài đặt sẽ yêu cầu đầu vào của bạn tại một số điểm, để chọn xem bạn có muốn cài đặt xác thực doanh nghiệp cho MongoDB hay không. Bạn có thể để giá trị mặc định (không) và chỉ cần nhấn enter để tiếp tục cài đặt.

Bây giờ ta cần kích hoạt phần mở rộng PHP mongo , theo cùng một quy trình mà ta đã sử dụng cho phần mở rộng xhprof . Tạo file cấu hình mới tại /etc/php5/mods-available/mongo.ini :

  • sudo nano /etc/php5/mods-available/mongo.ini

Bao gồm các nội dung sau trong file :

/etc/php5/mods-available/mongo.ini
extension=mongo.so 

Để bật file cấu hình module , hãy chạy:

  • sudo php5enmod mongo

Bây giờ khởi động lại web server để áp dụng các thay đổi. Trên môi trường LAMP (Apache), bạn có thể thực hiện việc này với:

  • sudo service apache2 restart

Trên môi trường LEMP (Nginx + PHP5-FPM), bạn nên khởi động lại dịch vụ php5-fpm với:

  • sudo service php5-fpm restart

Phần mở rộng mongo bây giờ sẽ được cài đặt và kích hoạt. Để xác nhận, bạn có thể chạy:

  • php --ri mongo

Đầu ra phải giống như sau :

Output
mongo MongoDB Support => enabled Version => 1.6.12 Streams Support => enabled SSL Support => enabled Supported Authentication Mechanisms MONGODB-CR => enabled SCRAM-SHA-1 => enabled MONGODB-X509 => enabled GSSAPI (Kerberos) => disabled PLAIN => disabled ...

Bước 4 - Cài đặt index MongoDB (Tùy chọn)

Đây là bước tùy chọn nhưng được khuyến khích sẽ cải thiện hiệu suất tổng thể của XHGui khi lưu trữ và truy cập dữ liệu từ MongoDB.

Truy cập ứng dụng client MongoDB qua dòng lệnh với:

  • mongo

Bây giờ, hãy chạy chuỗi lệnh sau để tạo index cho XHGui:

  • 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 } )

Để thoát khỏi ứng dụng client MongoDB, hãy chạy:

  • exit

Bước 5 - Cài đặt XHGui

Bước tiếp theo là cài đặt XHGui và cài đặt nó làm server ảo trên web server của bạn.

Ta sẽ bắt đầu bằng cách sao chép repository XHGui từ Github. Vì ta cần cung cấp nội dung của XHGui như một server ảo trên web server , ta sẽ đặt repository nhân bản bên trong /var/www .

Bạn nên cài đặt folder XHGui thuộc sở hữu của regular user của bạn. Trong ví dụ này, ta sẽ sử dụng sammy làm tên user và group , nhưng bạn nên thay thế các giá trị này bằng tên user và group của bạn .

  • sudo mkdir -p /var/www/xhgui
  • sudo chown -R sammy.sammy /var/www/xhgui
  • cd /var/www
  • git clone https://github.com/perftools/xhgui.git xhgui

Để cài đặt các phụ thuộc của XHGui, hãy thực thi trình cài đặt đi kèm:

  • cd xhgui
  • php install.php

Sau khi các phần phụ thuộc được cài đặt thành công, ta cần cấu hình một server ảo để phục vụ nội dung của xhgui . Các phần tiếp theo trình bày cách tạo server ảo cho xhgui trên cả môi trường LAMP và LEMP.

Cài đặt Server ảo của XHGui trên LAMP

Khi sử dụng Apache làm web server , trước tiên ta cần đảm bảo mod_rewrite được bật. Để kích hoạt nó, hãy chạy:

  • sudo a2enmod rewrite

Tạo một file server ảo mới trong /etc/apache2/sites-available :

  • sudo nano /etc/apache2/sites-available/xhgui.conf

Đặt các nội dung sau vào trong file này:

/etc/apache2/sites-available/xhgui.conf
 <VirtualHost *:80>     DocumentRoot /var/www/xhgui/webroot     ServerName xhgui.example.com      <Directory "/var/www/xhgui/webroot">         Options Indexes MultiViews FollowSymLinks         AllowOverride All         Require all granted     </Directory> </VirtualHost> 

Lưu ý root tài liệu phải trỏ đến webroot folder con bên trong folder chính của XHGui.

Nếu bạn hiện không có domain phụ có thể sử dụng cho server ảo này, bạn có thể sử dụng domain giả và tạo mục nhập trong file local /etc/hosts trỏ ServerName mà bạn đặt thành địa chỉ IP của server . Để biết thêm thông tin về cách tạo server ảo Apache, bạn có thể xem hướng dẫn Cách cài đặt server ảo Apache trên Ubuntu 14.04 của ta .

Bật server ảo với:

  • sudo a2ensite xhgui

Để áp dụng các thay đổi, hãy reload Apache bằng:

  • sudo service apache2 reload

Cài đặt Server ảo của XHGui trên LEMP

Bắt đầu bằng cách tạo một file server ảo mới trên /etc/nginx/sites-available :

  • sudo nano /etc/nginx/sites-available/xhgui

Đặt các nội dung sau vào trong file này:

/ etc / nginx / sites-available / xhgui
server {     listen   80;     server_name xhgui.example.com;     root   /var/www/xhgui/webroot/;     index  index.php;      location / {         try_files $uri $uri/ /index.php?$uri&$args;     }      location ~ \.php$ {                 try_files $uri =404;                 fastcgi_split_path_info ^(.+\.php)(/.+)$;                 fastcgi_pass unix:/var/run/php5-fpm.sock;                 fastcgi_index index.php;                 include fastcgi_params;     } } 

Lưu ý root tài liệu phải trỏ đến webroot folder con bên trong folder chính của XHGui.

Nếu hiện tại bạn không có domain phụ có thể sử dụng cho server ảo này, bạn có thể sử dụng domain giả và tạo mục nhập trong file local /etc/hosts trỏ server_name mà bạn đặt thành địa chỉ IP của server . Để biết thêm thông tin về cách tạo server ảo Nginx, bạn có thể xem hướng dẫn Cách cài đặt khối server Nginx trên Ubuntu 14.04 của ta .

Để bật server ảo mới, hãy chạy:

  • sudo ln -s /etc/nginx/sites-available/xhgui /etc/nginx/sites-enabled/xhgui

Bây giờ, hãy khởi động lại Nginx để áp dụng các thay đổi:

  • sudo service nginx restart

Bước 6 - Cài đặt XHProf

Đến đây, bạn có thể truy cập giao diện của XHGui từ trình duyệt của bạn bằng cách truy cập vào tên server mà bạn đã chỉ định trong cấu hình web server của bạn . Vì ta chưa bắt đầu thu thập dữ liệu profile , bạn sẽ thấy một trang như sau:

Hình ảnh 01: Lần chạy đầu tiên của XHGui

Phần mở rộng XHProf đã được cài đặt trên server , nhưng ta vẫn cần kích hoạt quá trình tạo profile cho ứng dụng của bạn. Điều này thường được thực hiện bằng cách bao gồm một chỉ thị PHP trên web server của bạn để tự động thêm một đoạn mã vào tất cả các tập lệnh PHP đang được thực thi. Điều quan trọng cần lưu ý là theo mặc định, XHProf sẽ chỉ lập profile 1 trong số 100 yêu cầu được gửi đến ứng dụng.

XHGui cung cấp một tiêu đề PHP mặc định mà bạn có thể thêm trước vào các tập lệnh của bạn để khởi tạo cấu hình cho ứng dụng của bạn. Nếu bạn đã làm theo tất cả các bước trong hướng dẫn này, file tiêu đề sẽ được đặt tại /var/www/xhgui/external/header.php .

Các phần tiếp theo sẽ chỉ cho bạn cách tự động thêm file tiêu đề này vào tất cả các tập lệnh PHP của bạn trên cả môi trường Apache và Nginx. Đối với ví dụ này, ta sẽ bật cấu hình cho một ứng dụng WordPress được lưu trữ dưới dạng trang web chính trên server này.

Bật profile trên Apache

Hãy chỉnh sửa file cấu hình Apache cho trang web mà ta muốn cấu hình. Trong ví dụ này, ta sẽ bật cấu hình cho trang web Apache chính được lưu trữ trên server này, được xác định tại /etc/apache2/sites-available/000-default.conf . Mở file này bằng editor dòng lệnh mà bạn chọn:

  • sudo nano /etc/apache2/sites-available/000-default.conf

Bao gồm dòng được đánh dấu bên trong khối <VirtualHost> hiện có:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>   ...   php_admin_value auto_prepend_file "/var/www/xhgui/external/header.php"   ... </VirtualHost> 

Lưu file và thoát. Khởi động lại Apache để áp dụng các thay đổi:

  • sudo service apache2 restart

Bật profile trên Nginx

Hãy chỉnh sửa file cấu hình Nginx cho trang web mà ta muốn cấu hình. Trong ví dụ này, ta sẽ bật cấu hình cho trang web default được lưu trữ trên server này, được xác định tại /etc/nginx/sites-available/default . Mở file này bằng editor dòng lệnh mà bạn chọn:

  • sudo nano /etc/nginx/sites-available/default

Bây giờ hãy tìm khối xác định cách xử lý các tập lệnh .php . Bao gồm dòng được đánh dấu bên trong khối này:

/ etc / nginx / sites-available / default
 location ~ \.php$ {    ...    fastcgi_param PHP_VALUE "auto_prepend_file=/var/www/xhgui/external/header.php";    ... } 

Lưu file và thoát. Khởi động lại Nginx để áp dụng các thay đổi:

  • sudo service nginx restart

Bước 7 - Bắt đầu với XHGui

Mọi thứ hiện đã được cài đặt đúng cách, nhưng tùy thuộc vào lượng lượt xem mà trang web thường nhận được, có thể mất một khoảng thời gian trước khi dữ liệu profile đầu tiên hiển thị trong XHGui. Điều này là do XHProf theo mặc định sẽ chỉ cấu hình 1 trong số 100 yêu cầu nhận được. Bạn có thể cần phải chuyển qua trang web của bạn và reload một vài lần trước khi có bất kỳ dữ liệu profile nào.

Tổng quan về XHGui

Khi có thông tin profile , bạn sẽ thấy một trang như thế này:

Hình ảnh 02: Tổng quan XHGui

Dưới đây, bạn có thể tìm thấy mô tả nhanh về từng trường trong bảng tổng quan này:

  • Phương pháp: Phương pháp được sử dụng trong yêu cầu được phân tích
  • URL: URL đã được lập profile
  • Thời gian: Thời gian dữ liệu profile này được thu thập
  • wt (Wall Time): Yêu cầu này mất bao lâu để được hoàn thành
  • cpu: Thời gian CPU dành để thực hiện yêu cầu này
  • mu (Sử dụng bộ nhớ): Bộ nhớ trung bình được sử dụng trong yêu cầu này
  • pmu (Sử dụng bộ nhớ tối đa): Mức sử dụng bộ nhớ cao nhất trong yêu cầu này

Để xem chi tiết của quá trình chạy cấu hình, hãy sử dụng liên kết trong trường thời gian . Bạn sẽ thấy một trang như thế này:

Hình ảnh 03: Dữ liệu profile

Ở phía bên trái, bạn có thể thấy thông tin về yêu cầu đã được phân tích, chẳng hạn như phương pháp được sử dụng, tên tập lệnh và URL, tham số yêu cầu, trong số những thứ khác. Trên nội dung trang chính, bạn có thể xác định các hàm hoặc phương thức mất nhiều thời gian nhất để được thực thi, cũng như các hàm hoặc phương thức có mức tiêu thụ bộ nhớ cao hơn. Tất cả thông tin này liên quan đến một yêu cầu và chạy profile cụ thể.

Kiểm tra các cuộc gọi chức năng

Nếu bạn cuộn xuống cuối trang, bạn sẽ có quyền truy cập vào một bảng với thông tin chi tiết về tất cả các lệnh gọi hàm được thực thi trong yêu cầu này, bao gồm số lần hàm hoặc phương thức đã được thực thi, thời gian chạy bao lâu, bộ nhớ nó đã sử dụng, và nhiều chi tiết thú vị khác. Bạn có thể sử dụng tiêu đề bảng để sắp xếp danh sách theo bất kỳ tham số nào trong số này. Bạn cũng có thể sử dụng hộp tìm kiếm ở bên phải để tìm kiếm một hàm hoặc tên phương pháp cụ thể.

Hình ảnh 04: Lệnh gọi hàm XHGui

So sánh các lần chạy

Một trong những tính năng hữu ích nhất của XHGui là công cụ so sánh mà bạn có thể sử dụng để so sánh hai lần chạy cấu hình khác nhau. Điều này cung cấp cho bạn khả năng áp dụng các thay đổi đối với mã của bạn và so sánh nhiều lần chạy để xem liệu các thay đổi có dẫn đến bất kỳ lợi ích nào về hiệu suất cho ứng dụng hay không.

Trong khi xem một tập hợp dữ liệu profile , ở bên phải của phần Chức năng Xem , bạn có thể thấy một nút có tên So sánh Lần chạy này . Nhấp vào nút này sẽ hiển thị cho bạn danh sách tất cả các lần chạy cấu hình được thực thi cho URL cụ thể đó, nơi bạn có thể chọn một trong các mục trong danh sách để tạo chế độ xem so sánh. Chỉ cần chọn cách chạy bạn muốn so sánh và nhấp vào nút So sánh .

Đây là cách chế độ xem so sánh trông như thế nào:

Hình ảnh 05: XHGui So sánh Chạy

Kết luận

Lập profile là một kỹ thuật quan trọng để tối ưu hóa phần mềm, cung cấp cho bạn những hiểu biết chi tiết về ứng dụng của bạn ở cấp mã. Với sự trợ giúp của các công cụ như XHProf và XHGui, bạn có thể xác định hiệu quả các phần có vấn đề trong mã của bạn và theo dõi tác động của các thay đổi mã đối với hiệu suất của ứng dụng.

Để biết thêm thông tin về các tùy chọn cấu hình có sẵn cho XHGui, hãy kiểm tra kho lưu trữ Github chính thức.


Tags:

Các tin liên quan

Cách nâng cấp lên PHP 7 trên CentOS 7
2016-01-14
Cách nâng cấp lên PHP 7 trên Ubuntu 14.04
2015-12-15
Cách triển khai nhiều ứng dụng PHP bằng Ansible trên Ubuntu 14.04
2015-06-28
Cách triển khai ứng dụng PHP nâng cao bằng Ansible trên Ubuntu 14.04
2015-06-02
Cách triển khai một ứng dụng PHP cơ bản bằng Ansible trên Ubuntu 14.04
2015-04-14
Cách chia sẻ các phiên PHP trên nhiều server Memcached trên Ubuntu 14.04
2014-07-22
Cách sử dụng Framework PHP miễn phí béo
2014-03-06
Cách tự động hóa quy trình triển khai ứng dụng PHP bằng Capistrano trên Ubuntu 13
2014-02-26
Cách triển khai ứng dụng Kohana PHP trên VPS Debian 7 / Ubuntu 13 với Nginx và PHP-FPM
2013-12-30
Cách cài đặt và thiết lập Kohana, Khung phát triển ứng dụng web PHP
2013-12-30