में कौन सी स्क्रिप्ट निष्पादित की जा रही है यह निर्धारित करने के लिए कि मैं nginx + php-fpm चला रहा हूं। क्या कोई तरीका है कि मैं कैसे जान सकता हूं कि प्रत्येक PHP प्रक्रिया क्या कर रही है? अपाचे में विस्तारित mod_status की तरह कुछ, जहां मैं देख सकता हूं कि पीआईडी एक्स के साथ अपाचे प्रक्रिया यूआरएल संसाधित कर रही है। मुझे यकीन नहीं है कि PHP प्रक्रिया यूआरएल जानता है, लेकिन स्क्रिप्ट पथ और नाम प्राप्त करना पर्याप्त होगा।PHP-एफपीएम प्रक्रिया
उत्तर
कुछ googling घंटे और ब्राउज़िंग PHP.net बग ट्रैकिंग प्रणाली के बाद मैं समाधान मिल गया है। यह PHP 5.3.8 या 5.3.9 के बाद उपलब्ध है, लेकिन ऐसा प्रतीत नहीं होता है। फीचर अनुरोध #54577 के आधार पर, स्थिति पृष्ठ full
विकल्प का समर्थन करता है, जो प्रत्येक कार्यकर्ता की अलग-अलग स्थिति प्रदर्शित करेगा। उदाहरण के लिए यूआरएल http://server.com/php-status?full
हो जाएगा और नमूना उत्पादन लगता है:
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 में स्थिति मॉनिटर में निर्मित है, हालांकि यह mod_status के रूप में विवरण के रूप में नहीं है। php-एफ पी एम कॉन्फ़िग फ़ाइल /etc/php-fpm.d/www.conf
(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
आप इस सक्षम करते हैं से, आप तो पीएचपी-एफ पी एम के लिए अपने सॉकेट/पोर्ट के लिए nginx से पथ पारित कर सकते हैं और आप स्थिति पृष्ठ देख सकते हैं।
nginx.conf:
location /status {
include fastcgi_params;
fastcgi_pass unix:/var/lib/php/php-fpm.sock;
}
हाँ मैं php-एफ पी एम से इस स्थिति के बारे में पता है, मैं पहले से ही यह उपयोग कर रहा हूँ मुनिन और ज़ब्बिक्स निगरानी में। हालांकि यह केवल कुल जानकारी प्रदान करता है, प्रति प्रक्रिया जानकारी नहीं। – Marki555
ऐसा नहीं लगता कि आप एक कस्टम लॉगिंग समाधान बनाने या एक्सेस लॉग प्रोसेसिंग सेट अप करने के अलावा बहुत कुछ कर सकते हैं, लेकिन इससे आपको समय की प्रक्रिया जैसी विस्तृत जानकारी नहीं मिलती है। मुझे यकीन है कि PHP-FPM परिपक्व होने पर वे स्थिति रिपोर्टिंग का विस्तार करेंगे। – sjdaws
अंत में मैंने पाया है कि स्थिति पृष्ठ प्रति-प्रक्रिया जानकारी का समर्थन करता है (मेरा उत्तर देखें)। – Marki555
cgi कमांड लाइन अधिक convinient है:
SCRIPT_NAME=/status \
SCRIPT_FILENAME=/status \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect 127.0.0.1:9000
यह भी ध्यान दें कि ओपी की तलाश करने के लिए आपको 'QUERY_STRING = full'' जोड़ना होगा। 'SCRIPT_FILENAME' को'/status? Full' में बदलना काम नहीं करता है। – Isius
आपको अभी भी 'pm.status_path' को कम करके स्थिति पृष्ठ को सक्षम करने की आवश्यकता होगी; इस विधि का लाभ यह है कि इसे वेब सर्वर द्वारा उजागर करने की आवश्यकता नहीं है। 'SCRIPT_NAME' और' SCRIPT_FILENAME' 'php-fpm.conf' फ़ाइल से' pm.status_path' के समान होना चाहिए। वह अंतिम पैरामीटर ('127.0.0.1: 9000') एफसीजीआई सर्वर से कनेक्शन है, * नहीं * वेब सर्वर - यह वही होना चाहिए जो 'सुनवाई' पैरामीटर उसी आईएनआई फ़ाइल में हो। यदि यह सॉकेट है, तो आपको कनेक्ट करने के लिए 'सुडो' का उपयोग करने की आवश्यकता हो सकती है, इस मामले में 'cgi-fcgi' में पर्यावरण चर के माध्यम से गुजरने के लिए' sudo' को बताने के लिए '-E' का उपयोग भी किया जा सकता है। – Wolfgang
एक और बहुत उपयोगी विकल्प है? Html, उदाहरण: http://server.com/php-status?full&html (यह आउटपुट को HTML तालिका के रूप में प्रारूपित करेगा, जो एक ही समय में सभी चल रही स्क्रिप्ट को देखना बहुत आसान बनाता है) – ivanhoe
कैसे क्या मैं इसे ज़ोर से एक्सेस कर सकता हूं मैं nginx config में कोई पैरामीटर जोड़ सकता हूं? –
@babakfaghihian हाँ, आपको उस यूआरएल (उदाहरण के लिए php-status') php-fpm को पास करने की आवश्यकता है। – Marki555