2013-02-22 39 views
14

Tôi đang chạy nginx + php-fpm. Có cách nào làm thế nào tôi có thể biết mỗi tiến trình PHP đang làm gì? Một cái gì đó như mở rộng mod_status trong apache, nơi tôi có thể thấy rằng quá trình apache với PID x là xử lý URL y. Tôi không chắc chắn nếu quá trình PHP biết URL, nhưng nhận được đường dẫn kịch bản và tên sẽ là đủ.Cách xác định tập lệnh nào đang được thực thi trong quy trình PHP-FPM

Trả lời

24

Sau vài giờ googling và duyệt PHP.net hệ thống theo dõi lỗi tôi đã tìm thấy giải pháp. Nó có sẵn từ PHP 5.3.8 hoặc 5.3.9, nhưng dường như không được ghi lại. Dựa trên yêu cầu tính năng #54577, trang trạng thái hỗ trợ tùy chọn full, sẽ hiển thị trạng thái riêng của từng công nhân. Vì vậy, ví dụ như địa chỉ URL sẽ http://server.com/php-status?full và đầu ra mẫu trông giống như:

pid:     22816 
state:    Idle 
start time:   22/Feb/2013:15:03:42 +0100 
start since:   10933 
requests:    28352 
request duration:  1392 
request method:  GET 
request URI:   /ad.php?zID=597 
content length:  0 
user:     - 
script:    /home/web/server.com/ad/ad.php 
last request cpu:  718.39 
last request memory: 1310720 
+3

Một tùy chọn rất hữu ích khác là html, ví dụ: http://server.com/php-status?full&html (nó sẽ định dạng đầu ra dưới dạng bảng html, giúp dễ dàng xem tất cả các tập lệnh chạy cùng một lúc) – ivanhoe

+0

cách tôi có thể truy cập nó shoud tôi thêm bất kỳ paramter để cấu hình nginx? –

+0

@babakfaghihian có, bạn cần phải chuyển URL đó (ví dụ: '/ php-status') sang php-fpm. – Marki555

6

PHP-FPM có tích hợp màn hình trạng thái, mặc dù nó không phải là chi tiết như mod_status. Từ php-fpm tập tin cấu hình /etc/php-fpm.d/www.conf (trên CentOS 6)

; The URI to view the FPM status page. If this value is not set, no URI will be 
; recognized as a status page. By default, the status page shows the following 
; information: 
; accepted conn - the number of request accepted by the pool; 
; pool    - the name of the pool; 
; process manager - static or dynamic; 
; idle processes - the number of idle processes; 
; active processes - the number of active processes; 
; total processes - the number of idle + active processes. 
; The values of 'idle processes', 'active processes' and 'total processes' are 
; updated each second. The value of 'accepted conn' is updated in real time. 
; Example output: 
; accepted conn: 12073 
; pool:    www 
; process manager: static 
; idle processes: 35 
; active processes: 65 
; total processes: 100 
; By default the status page output is formatted as text/plain. Passing either 
; 'html' or 'json' as a query string will return the corresponding output 
; syntax. Example: 
; http://www.foo.bar/status 
; http://www.foo.bar/status?json 
; http://www.foo.bar/status?html 
; Note: The value must start with a leading slash (/). The value can be 
;  anything, but it may not be a good idea to use the .php extension or it 
;  may conflict with a real PHP file. 
; Default Value: not set 
;pm.status_path = /status 

Nếu bạn bật chức năng này, bạn có thể vượt qua con đường từ nginx để ổ cắm của bạn/cổng cho PHP-FPM và bạn có thể xem các trang trạng thái.

nginx.conf:

location /status { 

    include fastcgi_params; 
    fastcgi_pass unix:/var/lib/php/php-fpm.sock; 

} 
+0

vâng tôi biết về tình trạng này từ php-fpm, tôi đã sử dụng nó theo dõi munin và zabbix. Tuy nhiên, nó chỉ cung cấp thông tin tổng hợp và không cung cấp thông tin theo quy trình. – Marki555

+0

Đừng nghĩ rằng bạn còn có thể làm được nhiều hơn việc tạo giải pháp ghi nhật ký tùy chỉnh hoặc thiết lập xử lý nhật ký truy cập, nhưng điều đó sẽ không cung cấp cho bạn thông tin chi tiết bạn cần như thời gian xử lý. Tôi chắc chắn khi PHP-FPM đáo hạn, họ sẽ mở rộng báo cáo trạng thái. – sjdaws

+0

Cuối cùng tôi đã thấy rằng trang trạng thái hỗ trợ thông tin mỗi tiến trình (xem câu trả lời của tôi). – Marki555

3

dòng lệnh cgi là thuận hơn:

SCRIPT_NAME=/status \ 
SCRIPT_FILENAME=/status \ 
REQUEST_METHOD=GET \ 
cgi-fcgi -bind -connect 127.0.0.1:9000 
+4

Cũng lưu ý rằng bạn phải thêm 'QUERY_STRING = full' để trả lại OP đang tìm kiếm gì. Thay đổi 'SCRIPT_FILENAME' thành'/status? Full' không hoạt động. – Isius

+0

Bạn sẽ vẫn cần bật trang trạng thái bằng cách bỏ ghi chú 'pm.status_path'; lợi thế của phương pháp này là nó không cần phải được tiếp xúc bởi máy chủ web. 'SCRIPT_NAME' và' SCRIPT_FILENAME' phải giống với 'pm.status_path' từ tệp' php-fpm.conf'. Tham số cuối cùng ('127.0.0.1: 9000') là kết nối tới máy chủ FCGI, * không * máy chủ web - nó sẽ là bất cứ tham số' listen' nào nằm trong cùng một tệp INI đó. Nếu đó là một socket, bạn có thể cần sử dụng 'sudo' để kết nối, trong trường hợp này cũng sử dụng' -E' để nói 'sudo' truyền các biến môi trường tới' cgi-fcgi'. – Wolfgang

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