2012-11-20 24 views
7

Gần đây tôi đã thêm thời gian thực thi PHP vào nhật ký khách truy cập của mình để phát hiện các vấn đề có thể xảy ra trong mã hoặc cơ sở dữ liệu. Thời gian được tính bằng microtime() khác nhau giữa đầu và cuối của tập lệnh.Thực thi PHP dài cho người dùng có độ trễ cao (?)

Thời gian thực hiện trung bình (bao gồm các thử nghiệm của riêng tôi trên phiên bản gỡ lỗi của trang web) là 2-15ms. Sau đó, tôi ngẫu nhiên thấy + 300ms thực thi đối với một số người dùng. Những người có khả năng gây ra bởi tải gai, truy vấn cơ sở dữ liệu uncached hoặc truy cập hệ thống tập tin.

Điều tôi không thể hiểu là hiện tại và sau đó xuất hiện người dùng với thời gian thực hiện 5-30 giây (!). Dựa trên các thử nghiệm của tôi, những trang này xuất hiện trên các trang có vẻ ngẫu nhiên và không có bất kỳ yêu cầu nào trên nhật ký truy cập cho những lần đó, cũng như không có bất kỳ điều gì trên mã hoặc truy vấn cơ sở dữ liệu. 90% những yêu cầu đó đến từ Trung Quốc và dường như là một số loại trình thu thập thông tin hoặc chương trình.

Vì vậy: Độ trễ có thể ảnh hưởng đến thời gian thực thi của tập lệnh PHP không? Việc thực thi PHP có bị tạm dừng trong khi bộ đệm trước đó được gửi tới người dùng không?

Tôi tìm thấy thread khác này với vật chất dường như tương tự nhưng không có câu trả lời: PHP's execution time changes based upon internet/connection latency?

EDIT:
tôi đã kết thúc tăng PHP output_buffering từ 4k đến 128k byte. Bây giờ thời gian thực hiện điển hình giảm xuống còn 2-6ms và không có nhiều thời gian dài ngẫu nhiên hơn.

+3

"Vì vậy: Độ trễ có thể ảnh hưởng đến thời gian thực thi của tập lệnh PHP không? PHP có bị tạm dừng trong khi bộ đệm trước được gửi tới người dùng không?" --- để ngăn chặn nginx đó như một proxy ngược được sử dụng. Vì vậy, php + apache làm việc nhanh chóng, sau đó nginx phục vụ từ từ – zerkms

+0

Không phải là có một cách để làm cho apache chính nó hoạt động như một bộ đệm cho PHP? Tôi không thực sự phiền nếu apache quá trình sống lâu hơn, chỉ có vấn đề là trì hoãn php script mess lên trang thống kê thời gian thực hiện ... – MiikaH

Trả lời

1

Tôi nghĩ rằng độ trễ có thể ảnh hưởng đến thời gian thực thi PHP, tùy thuộc vào cấu hình máy chủ, đặc biệt là output_buffering and implicit_flush.

Ngoài ra, có một số chức năng như gethostsbyaddr có thể làm chậm tập lệnh PHP.

Có thể bạn có thể sử dụng XDebug để tạo dấu vết thực thi và xem "dòng thời gian" của việc thực thi tập lệnh.

+0

Vâng, tôi figured "output_buffering" giá trị có khả năng liên quan đến điều này. Tôi nghĩ rằng sự chậm trễ xảy ra bất cứ khi nào PHP flushes bộ đệm. Thật không may tăng output_buffering sẽ thực sự làm cho hiệu suất chung tồi tệ hơn bởi vì không có gì sẽ được gửi đến trình duyệt trước khi toàn bộ trang được tạo ra. – MiikaH

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