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
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
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;
}
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
Đừ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
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
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
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
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
- 1. Làm cách nào để xác định xem tập lệnh python được thực thi từ crontab?
- 2. Làm cách nào để nhận được tên tập lệnh được thực thi trong bash?
- 3. Lệnh thực thi in cho quy trình con Python. Mở
- 4. Cách Thực thi Tập lệnh PowerShell từ SSIS
- 5. Quy trình chuyển đổi tập lệnh Python đơn giản thành Windows thực thi
- 6. Vợt - làm thế nào để có được "lệnh được thực thi trước" trong tập lệnh bash?
- 7. Cách tìm đường dẫn từ nơi quy trình/thực thi hiện tại đang chạy?
- 8. Làm cách nào để xác định URL nào đang được xử lý bởi một quy trình HTTPD nhất định?
- 9. Thực thi tập lệnh php trước mỗi tập lệnh php?
- 10. Trình duyệt dừng/dừng tạm dừng thực thi tập lệnh?
- 11. Cách bắt đầu quy trình trong cùng thư mục với tập tin thực thi
- 12. Thực thi tập lệnh SQL từ dòng lệnh
- 13. Nhận tên quy trình hiện tại (thực thi) trong Go?
- 14. Xác thực định dạng ngày trong tập lệnh shell
- 15. Chạy tập lệnh Python từ dòng lệnh mở tập lệnh trong trình soạn thảo văn bản mặc định thay vì thực thi tập lệnh
- 16. Làm cách nào để xác định quy trình nào đang sử dụng cổng nối tiếp?
- 17. Thực thi tập lệnh ruby từ cron
- 18. Crontab không thực thi được tập lệnh Python
- 19. Cách lấy tên tệp của tập lệnh đang được thực hiện trong NodeJS?
- 20. Macports chọn trình thông dịch Python mặc định để thực thi tập lệnh?
- 21. Dừng thực thi tập lệnh Ruby
- 22. Quy trình xử lý được xác định như thế nào?
- 23. postgreSQL - psql \ i: cách thực thi tập lệnh trong một đường dẫn nhất định
- 24. Làm thế nào để chờ quá trình chấm dứt thực hiện một quy trình khác trong tập tin thực thi
- 25. Chạy tập lệnh bash từ tập lệnh khác mà không phải đợi tập lệnh hoàn tất quá trình thực thi?
- 26. Làm cách nào để xác định nền tảng nào mà tệp thực thi được biên dịch?
- 27. Cách chỉ định cài đặt Firefox để sử dụng cho thực thi tập lệnh watir-webdriver
- 28. Tại sao cron không thực thi tập lệnh PHP của tôi một cách chính xác?
- 29. Sự kiện .NET cho quá trình thực thi Quy trình
- 30. tuần tự thực thi các quy trình nền unix
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
cách tôi có thể truy cập nó shoud tôi thêm bất kỳ paramter để cấu hình nginx? –
@babakfaghihian có, bạn cần phải chuyển URL đó (ví dụ: '/ php-status') sang php-fpm. – Marki555