2013-02-22 45 views
14

में कौन सी स्क्रिप्ट निष्पादित की जा रही है यह निर्धारित करने के लिए कि मैं nginx + php-fpm चला रहा हूं। क्या कोई तरीका है कि मैं कैसे जान सकता हूं कि प्रत्येक PHP प्रक्रिया क्या कर रही है? अपाचे में विस्तारित mod_status की तरह कुछ, जहां मैं देख सकता हूं कि पीआईडी ​​एक्स के साथ अपाचे प्रक्रिया यूआरएल संसाधित कर रही है। मुझे यकीन नहीं है कि PHP प्रक्रिया यूआरएल जानता है, लेकिन स्क्रिप्ट पथ और नाम प्राप्त करना पर्याप्त होगा।PHP-एफपीएम प्रक्रिया

उत्तर

24

कुछ 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 
+3

एक और बहुत उपयोगी विकल्प है? Html, उदाहरण: http://server.com/php-status?full&html (यह आउटपुट को HTML तालिका के रूप में प्रारूपित करेगा, जो एक ही समय में सभी चल रही स्क्रिप्ट को देखना बहुत आसान बनाता है) – ivanhoe

+0

कैसे क्या मैं इसे ज़ोर से एक्सेस कर सकता हूं मैं nginx config में कोई पैरामीटर जोड़ सकता हूं? –

+0

@babakfaghihian हाँ, आपको उस यूआरएल (उदाहरण के लिए php-status') php-fpm को पास करने की आवश्यकता है। – Marki555

6

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; 

} 
+0

हाँ मैं php-एफ पी एम से इस स्थिति के बारे में पता है, मैं पहले से ही यह उपयोग कर रहा हूँ मुनिन और ज़ब्बिक्स निगरानी में। हालांकि यह केवल कुल जानकारी प्रदान करता है, प्रति प्रक्रिया जानकारी नहीं। – Marki555

+0

ऐसा नहीं लगता कि आप एक कस्टम लॉगिंग समाधान बनाने या एक्सेस लॉग प्रोसेसिंग सेट अप करने के अलावा बहुत कुछ कर सकते हैं, लेकिन इससे आपको समय की प्रक्रिया जैसी विस्तृत जानकारी नहीं मिलती है। मुझे यकीन है कि PHP-FPM परिपक्व होने पर वे स्थिति रिपोर्टिंग का विस्तार करेंगे। – sjdaws

+0

अंत में मैंने पाया है कि स्थिति पृष्ठ प्रति-प्रक्रिया जानकारी का समर्थन करता है (मेरा उत्तर देखें)। – Marki555

3

cgi कमांड लाइन अधिक convinient है:

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

यह भी ध्यान दें कि ओपी की तलाश करने के लिए आपको 'QUERY_STRING = full'' जोड़ना होगा। 'SCRIPT_FILENAME' को'/status? Full' में बदलना काम नहीं करता है। – Isius

+0

आपको अभी भी 'pm.status_path' को कम करके स्थिति पृष्ठ को सक्षम करने की आवश्यकता होगी; इस विधि का लाभ यह है कि इसे वेब सर्वर द्वारा उजागर करने की आवश्यकता नहीं है। 'SCRIPT_NAME' और' SCRIPT_FILENAME' 'php-fpm.conf' फ़ाइल से' pm.status_path' के समान होना चाहिए। वह अंतिम पैरामीटर ('127.0.0.1: 9000') एफसीजीआई सर्वर से कनेक्शन है, * नहीं * वेब सर्वर - यह वही होना चाहिए जो 'सुनवाई' पैरामीटर उसी आईएनआई फ़ाइल में हो। यदि यह सॉकेट है, तो आपको कनेक्ट करने के लिए 'सुडो' का उपयोग करने की आवश्यकता हो सकती है, इस मामले में 'cgi-fcgi' में पर्यावरण चर के माध्यम से गुजरने के लिए' sudo' को बताने के लिए '-E' का उपयोग भी किया जा सकता है। – Wolfgang