Có cách nào để chẩn đoán tập lệnh PHP hoặc Perl nào tiêu tốn nhiều thời gian CPU nhất trên máy chủ sản xuất không?


7

Trên một máy chủ hoạt động hơi yếu, đôi khi nó bị tấn công bởi rất nhiều robot đang bò cùng lúc. Trong khi một giải pháp là xem xét việc ném thêm sức mạnh xử lý vào máy chủ web, thì nó đã nhấn mạnh rằng một số tập lệnh ít được tối ưu hóa tuyệt vời.

Điều mà tôi muốn có thể làm là tính thời gian CPU trên cơ sở mỗi yêu cầu và tập trung vào sửa lỗi trước. Có bất cứ điều gì được tích hợp vào Apache hoặc PHP có thể giúp đạt được điều này không? Tôi đoán MySQL cũng sẽ có các số liệu riêng để xác định các truy vấn chuyên sâu nhất về máy chủ?

Câu trả lời:


6

Bạn cũng có thể thực hiện hồ sơ PHP, sử dụng bất kỳ trình biên dịch nào. Sở thích của tôi là XDebug:

http://www.xdebug.org/docs/profiler

Nó không yêu cầu bạn thay đổi bất kỳ tập lệnh nào.

Điều này sẽ nhanh chóng chỉ ra các nút thắt cổ chai; Nó cũng sẽ giúp với phần MySQL. Mặc dù MySQL có báo cáo riêng, nhưng bạn có thể gặp tình huống trong đó tập lệnh thực hiện cùng một truy vấn (nhanh) trong 1000 lần liên tiếp. MySQL sẽ không báo cáo điều này, nhưng bạn nhận thấy từ XDebug rằng một chức năng đã được gọi nhiều lần cho chỉ một trang.

Bạn có thể làm một khảo sát ban đầu trên một máy chủ dev; bất kỳ vấn đề tối ưu hóa sẽ hiển thị một cách nhanh chóng. Từ nhật ký sản xuất của bạn, hãy tìm ra những trang được truy cập nhiều nhất và phân tích chúng đầu tiên trên máy chủ dev.

Nếu bạn vẫn cần thực hiện hồ sơ trên máy chủ sản xuất, hãy xem xét bật ngẫu nhiên cho một tập hợp con các yêu cầu để giảm thiểu tải. Từ các tài liệu:

Bạn cũng có thể chọn lọc kích hoạt trình biên dạng với cài đặt xdebug.profiler_enable_trigger được đặt thành 1. Nếu được đặt thành 1, thì bạn có thể bật trình lược tả bằng cách sử dụng biến GET / POST hoặc COOKIE của tên XDEBUG_PROFILE

Apache mod_rewrite sẽ giúp thêm biến GET một cách trong suốt mà không được truyền đến / từ người dùng.


2

Có một vài cách có thể xảy ra về vấn đề này - cách cuối cùng sẽ tốt nhất là phụ thuộc vào bao nhiêu thời gian và công sức bạn sẵn sàng dành cho một giải pháp.

Điểm chuẩn PHP: Nói chung là việc triển khai thời gian / nỗ lực cao nếu mã của bạn chưa bao gồm điểm chuẩn. Thêm một đoạn mã để đặt thời gian và bộ định thời microtime ở đầu mỗi tập lệnh và ghi lại tổng thời gian và microtime trôi qua ở cuối tập lệnh (cùng với URI được gọi). Bạn có thể thêm bộ định thời điểm chuẩn bổ sung cho các chức năng cụ thể nếu bạn có thể cần phải cấu trúc lại mã của mình sau (chỉ cần nhớ đợi cho đến khi tất cả các hoạt động thông thường đã hoàn thành để ghi dữ liệu điểm chuẩn của bạn - nếu không bạn sẽ can thiệp vào thông tin điểm chuẩn).

wget Điểm chuẩn: Có thể là cách lười nhất để điểm chuẩn. Lấy danh sách các URI được yêu cầu từ nhật ký máy chủ web của bạn và đưa chúng vào wget như các yêu cầu cục bộ đối với máy chủ web (lý tưởng là bạn sẽ làm điều này nhiều lần trong khi lưu lượng truy cập rất thấp để có kết quả đại diện)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.