Đăng chéo tài liệu tham khảo của tôi từ phiên bản tài liệu SO đang ngoại tuyến.
Hồ sơ với XDebug
Một phần mở rộng cho PHP có tên Xdebug có sẵn để hỗ trợ cấu hình các ứng dụng PHP , cũng như gỡ lỗi thời gian chạy. Khi chạy trình lược tả, đầu ra được ghi vào một tệp ở định dạng nhị phân gọi là "cacheegrind". Các ứng dụng có sẵn trên mỗi nền tảng để phân tích các tệp này. Không có thay đổi mã ứng dụng là cần thiết để thực hiện hồ sơ này.
Để kích hoạt cấu hình, hãy cài đặt tiện ích mở rộng và điều chỉnh cài đặt php.ini. Một số bản phân phối Linux đi kèm với các gói tiêu chuẩn (ví dụ php-xdebug
gói của Ubuntu ). Trong ví dụ của chúng tôi, chúng tôi sẽ chạy hồ sơ tùy chọn dựa trên một tham số yêu cầu. Điều này cho phép chúng tôi giữ các cài đặt tĩnh và chỉ bật trình lược tả khi cần.
# 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"
Tiếp theo, hãy sử dụng ứng dụng khách web để gửi yêu cầu tới URL của ứng dụng mà bạn muốn lập hồ sơ, ví dụ:
http://example.com/article/1?XDEBUG_PROFILE=1
Khi trang xử lý, nó sẽ ghi vào một tệp có tên tương tự như
/tmp/cachegrind.out.12345
Theo mặc định, số trong tên tệp là id quá trình đã viết nó. Đây là cấu hình với các xdebug.profiler_output_name
thiết lập.
Lưu ý rằng nó sẽ ghi một tệp cho mỗi yêu cầu / quy trình PHP được thực thi. Vì vậy, ví dụ, nếu bạn muốn phân tích một bài đăng mẫu, một hồ sơ sẽ được viết cho yêu cầu GET để hiển thị biểu mẫu HTML. Tham số XDEBUG_PROFILE sẽ cần được chuyển vào yêu cầu POST tiếp theo để phân tích yêu cầu thứ hai xử lý biểu mẫu. Do đó, khi lập hồ sơ đôi khi dễ dàng hơn để chạy curl để POST một biểu mẫu trực tiếp.
Phân tích đầu ra
Sau khi viết bộ đệm hồ sơ có thể được đọc bởi một ứng dụng như KCachegrind hoặc Webgrind . PHPStorm, một IDE PHP phổ biến, cũng có thể hiển thị dữ liệu lược tả này .
KCachegrind, ví dụ, sẽ hiển thị thông tin bao gồm:
- Chức năng được thực thi
- Thời gian gọi, cả chính nó và bao gồm các cuộc gọi chức năng tiếp theo
- Số lần mỗi hàm được gọi
- Biểu đồ cuộc gọi
- Liên kết đến mã nguồn
Bạn cần tìm gì
Rõ ràng điều chỉnh hiệu suất là rất cụ thể cho từng trường hợp sử dụng của ứng dụng. Nói chung, thật tốt khi tìm kiếm:
- Các cuộc gọi lặp đi lặp lại đến cùng chức năng mà bạn không muốn thấy. Đối với các hàm xử lý và truy vấn dữ liệu, đây có thể là cơ hội chính để ứng dụng của bạn lưu vào bộ đệm.
- Chức năng chạy chậm. Ứng dụng dành phần lớn thời gian ở đâu? phần thưởng tốt nhất trong điều chỉnh hiệu năng là tập trung vào những phần của ứng dụng tiêu tốn nhiều thời gian nhất.
Lưu ý : Xdebug, và đặc biệt là các tính năng định hình của nó, rất tốn tài nguyên và làm chậm quá trình thực thi PHP. Không nên chạy chúng trong môi trường máy chủ sản xuất.