Używam nginx + php-fpm. Czy jest jakiś sposób, w jaki sposób mogę wiedzieć, co robi każdy z procesów PHP? Coś jak rozszerzony mod_status w apache, gdzie widzę, że proces apache z PID x przetwarza URL y. Nie jestem pewien, czy proces PHP zna adres URL, ale uzyskanie ścieżki i nazwy skryptu będzie wystarczające.Jak ustalić, który skrypt jest wykonywany w procesie PHP-FPM
Odpowiedz
Po kilku godzinach googlowania i przeglądanie PHP.net systemu śledzenia błędów znalazłem rozwiązanie. Jest dostępny od PHP 5.3.8 lub 5.3.9, ale nie wydaje się być udokumentowany. Na podstawie żądania funkcji #54577 strona stanu obsługuje opcję full
, która wyświetla status każdego pracownika osobno. Więc na przykład adres URL będzie http://server.com/php-status?full
i wyjście próbka wygląda następująco:
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 ma wbudowany monitor stanu, choć nie jest to tak szczegółowe, jak mod_status. Z pliku konfiguracyjnym php-fpm /etc/php-fpm.d/www.conf
(na 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
Jeśli włączysz tę można następnie przekazać ścieżkę z nginx do gniazda/portu dla PHP-FPM i można przeglądać strony stanu.
nginx.conf:
location /status {
include fastcgi_params;
fastcgi_pass unix:/var/lib/php/php-fpm.sock;
}
tak wiem o tym statusie z PHP-FPM, ja już go używać w monitorowaniu munin i zabbix. Zapewnia jednak jedynie informacje zbiorcze, a nie informacje dotyczące poszczególnych procesów. – Marki555
Nie myśl, że można zrobić znacznie więcej oprócz tworzenia niestandardowego rozwiązania rejestrowania lub konfigurowania przetwarzania dzienników dostępu, ale to nie daje szczegółowych informacji, takich jak czas przetwarzania. Jestem pewien, że wraz z dojrzewaniem PHP-FPM rozszerzą raportowanie statusu. – sjdaws
W końcu odkryłem, że strona statusu obsługuje informacje o procesach (zobacz moją odpowiedź). – Marki555
linii poleceń CGI jest bardziej wygodny:
SCRIPT_NAME=/status \
SCRIPT_FILENAME=/status \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect 127.0.0.1:9000
Pamiętaj również, że musisz dodać 'QUERY_STRING = full', aby zwrócić to, czego szuka OP. Zmiana 'SCRIPT_FILENAME' na'/status? Full' nie działa. – Isius
Nadal musisz włączyć stronę statusu, odkomentowując 'pm.status_path'; Zaletą tej metody jest to, że serwer ten nie musi być narażony na działanie serwera. 'SCRIPT_NAME' i' SCRIPT_FILENAME' powinny być takie same jak 'pm.status_path' z pliku' php-fpm.conf'. Ten ostatni parametr ('127.0.0.1: 9000') jest połączeniem z serwerem FCGI, * nie * serwerem sieciowym - powinien to być dowolny parametr' listen' znajdujący się w tym samym pliku INI. Jeśli jest to gniazdo, możesz potrzebować użyć 'sudo' do połączenia, w takim przypadku użyj również' -E', aby powiedzieć 'sudo', aby przechodził przez zmienne środowiskowe do' cgi-fcgi'. – Wolfgang
- 1. Jak ustalić, czy kod jest wykonywany jako skrypt lub funkcja?
- 2. Jak dokładnie wykonywany jest skrypt PHP?
- 3. Jak sprawdzić, czy skrypt powłoki Linux jest wykonywany przez cronjob?
- 4. Czy można się dowiedzieć, który skrypt jest uruchomiony w procesie Pythona?
- 5. Jak mogę debugować JavaScript, który jest wykonywany przez Chutzpah/PhantomJS
- 6. Łapanie określonego kodu javascript, który jest wykonywany onClick
- 7. Jak znaleźć który skrypt PHP jest nieszczelny?
- 8. Postman pre-prośba skrypt wykonywany po żądaniu
- 9. Jak często wykonywany jest GK?
- 10. Jak ustalić, który pakiet ramek nuget .NET Framework jest docelowy?
- 11. Jak ustalić, który klucz ModelState zawiera błąd
- 12. Jak ustalić, który kompilator był wymagany?
- 13. jak ostrzeżenia przycisk, który należy ustalić
- 14. Jak ustalić, czy kod jest wykonywany jako funkcja lub przy użyciu trybu komórki?
- 15. Kiedy wykonywany jest index.php w wordpress?
- 16. Jak utworzyć skrypt bash, który pobiera argumenty?
- 17. W jaki sposób jest wykonywany konstruktor?
- 18. Podczas wykonywania skryptów powłoki, jak sprawdzić, który numer wiersza jest wykonywany,
- 19. jQuery/AJAX: Jak ustalić, kiedy host jest w trybie offline
- 20. Skrypt Bash, jak spać w nowym procesie, a następnie wykonać polecenie
- 21. Jak ustalić, który przycisk został naciśnięty na Androidzie
- 22. Jak ustalić, czy obiekt jQuery jest odroczony?
- 23. Jak ustalić, który proces w3wp.exe należy do jakiej witryny?
- 24. Jak ustalić, czy jednostka doktrynalna jest trwała?
- 25. Czy istnieje sposób sprawdzenia, czy skrypt powłoki jest wykonywany z flagą -x
- 26. Jak ustalić, który test rspec trwa tak długo?
- 27. Shell scenariusz: Upewnij się, że skrypt nie jest wykonywany, jeśli już działa
- 28. Jak ustalić, czy powiązanie szyn jest przyspieszone?
- 29. Jak ustalić, czy jest oczekiwany semafor wysyłkowy?
- 30. Jak mogę się dowiedzieć, który skrypt PHP działa w systemie Linux?
Inną bardzo użyteczną opcją jest: html, np: http://server.com/php-status?full&html (sformatuje dane wyjściowe jako tabelę html, co znacznie ułatwia obserwowanie wszystkich uruchomionych skryptów) – ivanhoe
jak czy mogę uzyskać do niego dostęp shoud i dodaję dowolny parametr do konfiguracji nginx? –
@babakfaghihian tak, musisz przekazać ten URL (na przykład '/ php-status') do php-fpm. – Marki555