2010-10-28 28 views
6

Có cách nào để lược tả chỉ các trang PHP chậm trên máy chủ sản xuất không?Tiểu sử làm chậm các trang PHP trong sản xuất

Hiện tại, chúng tôi đang ghi lại các trang chậm vào tệp văn bản nhưng không có thêm thông tin thì khó có thể nói lý do chúng chậm (không phải lúc nào cũng chậm).

Tôi đã sử dụng trình biên dịch Xdebug trước đây, nhưng tôi thực sự không muốn bật tính năng này trên các máy chủ sản xuất của mình vì chúng tôi có khả năng nhận được 100 yêu cầu mỗi giây. Tôi cũng đã sử dụng Zend Platform, nhưng tôi không thực sự muốn cài đặt lại.

+0

Trong trường hợp bạn đang sử dụng mysql, hãy đảm bảo "nhật ký truy vấn chậm" đang hoạt động. – c0rnh0li0

Trả lời

3

Bạn có thể thay đổi nhật ký máy chủ Apache/HTTP để ghi lại thời gian dành cho mỗi yêu cầu. Hãy theo dõi this guide ví dụ. Sau đó, bạn có thể thu thập dữ liệu cho mỗi yêu cầu mất bao lâu, xác định các trang/yêu cầu chậm và sử dụng XDebug hoặc WebGrind để phân tích thêm nguyên nhân.

Dễ dàng và không có cống rãnh lớn trên máy chủ sản xuất của bạn.

+0

Tuyệt vời, có một liên kết trong các nhận xét về mod-log-firstbyte - http://code.google.com/p/mod-log-firstbyte/ sẽ đăng nhập vào thời gian xử lý nhật ký apache. – Noodles

+0

Tôi không thể nói rằng tôi đã nghĩ về điều đó, nhưng thậm chí tốt hơn để đăng nhập chỉ thời gian máy chủ của bạn tự nó cần để phục vụ một nguồn tài nguyên. – Ghostpsalm

2

Bạn có thể viết câu lệnh hẹn giờ là một phần của các trang chậm để thu hẹp nó xuống. Sau đó, một khi một số dữ liệu được xây dựng, rửa sạch và lặp lại.

define('START_TIME', microtime(true)); 
function timer() { 
    static $last; 
    $time_since_start = microtime(true) - START_TIME; 
    $time_since_last = microtime(true) - $last; 
    // Do something with $time vars 
    $last = microtime(true); 
} 

Ngoài ra kiểm tra này: http://particletree.com/features/php-quick-profiler/

Nó có thể phù hợp với nhu cầu của bạn

+0

PQP trông đẹp và đẹp, nhưng nó không thực sự mang lại cho tôi những chi tiết sau này. Dù sao cũng cảm ơn bạn. – Noodles

0

Tôi muốn được tinh ranh của một thư viện hoàn toàn mới cho một máy chủ sản xuất. Khi tôi gỡ lỗi, tôi thích sử dụng các lệnh * auto_prepend_file * và * auto_append_file * trong php.ini. Bạn có thể dễ dàng thực hiện như đã đề xuất ở trên với phương pháp này và nhận được thời gian chính xác cho mỗi lần tải trang.

Nếu bạn lo lắng về các trang tải chậm chỉ tính bằng giây, dưới đây là giải pháp nhanh chóng và dơ bẩn trừ thời gian yêu cầu máy chủ từ thời gian kết thúc gần đúng trong tệp được tự động thêm vào. Sau đó bạn có thể lưu trữ kết quả trong một tệp db hoặc phẳng.

ví dụ trong php.in

auto_append_file = [location]/my_timer.php 

my_timer.php

define('TRIGGER_TIME_LOG','3'); // Minimum number of timer seconds to log page load 

$time = time() - $_SERVER['REQUEST_TIME']; // Page load time 

if($time >= TRIGGER_TIME_LOG) 
{ 
    /* 
    * DO LOGGING TO DB OR FLAT FILE HERE 
    */ 
} 
+0

Như tôi đã nói, chúng tôi đã đăng nhập các trang chậm, tôi chỉ cần thêm chi tiết (như các chức năng chậm). – Noodles

+0

Xin lỗi, tôi đã hiểu lầm. – DrPerdix

0

tôi đề nghị bạn để có một cái nhìn tại các webgrind project. Bạn có thể kích hoạt lược tả mỗi truy vấn, điều này có thể cho phép bạn lấy dữ liệu lược tả từ máy chủ sản xuất của mình mà không có tác động hiệu suất lớn.

Tôi hy vọng điều này sẽ giúp bạn

+0

Vấn đề là chúng ta không biết nơi chậm chạp là gì.Chúng tôi thực sự cần một cái gì đó mà sẽ xác định các trang chậm như Zend Platform, nhưng một cái gì đó mà không chi phí hàng ngàn đô la một năm. – Noodles

0

Tôi biết đây không phải là giải pháp tốt nhất, nhưng ...

Bạn có thể tạo ra một lớp helper để đăng nhập mọi quá trình mà bạn có, cùng với sự khởi đầu và kết thúc thời gian . Tôi biết bạn đã làm nó đã cho toàn bộ quá trình, nhưng đối với mỗi chức năng bắt đầu và kết thúc, bạn có thể thêm một "Profiler :: logtime (FUNC)";

Các vấn đề liên quan