चलाने की स्थिति देखें

चालाए php start.php status
आप Workerman की चलाने की स्थिति देख सकते हैं, जैसा कि नीचे दिया गया है:

----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:3.5.13          PHP version:5.5.9-1ubuntu4.24
start time:2018-02-03 11:48:20   run 112 days 2 hours   
load average: 0, 0, 0            event-loop:\Workerman\Events\Event
4 workers       11 processes
worker_name        exit_status      exit_count
ChatBusinessWorker 0                0
ChatGateway        0                0
Register           0                0
WebServer          0                0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory  listening                worker_name        connections send_fail timers  total_request qps    status
18306   2.25M   none                     ChatBusinessWorker 5           0         0       11            0      [idle]
18307   2.25M   none                     ChatBusinessWorker 5           0         0       8             0      [idle]
18308   2.25M   none                     ChatBusinessWorker 5           0         0       3             0      [idle]
18309   2.25M   none                     ChatBusinessWorker 5           0         0       14            0      [idle]
18310   2M      websocket://0.0.0.0:7272 ChatGateway        8           0         1       31            0      [idle]
18311   2M      websocket://0.0.0.0:7272 ChatGateway        7           0         1       26            0      [idle]
18312   2M      websocket://0.0.0.0:7272 ChatGateway        6           0         1       21            0      [idle]
18313   1.75M   websocket://0.0.0.0:7272 ChatGateway        5           0         1       16            0      [idle]
18314   1.75M   text://0.0.0.0:1236      Register           8           0         0       8             0      [idle]
18315   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [idle]
18316   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 18M     -                        -                  54          0         4       138           0      [Summary]

विवरण

GLOBAL STATUS

इस खंड से हम देख सकते हैं

Workerman का संस्करण version:3.5.13

शुरू करने का समय 2018-02-03 11:48:20 , चला run 112 days 2 hours

सर्वर लोड load average: 0, 0, 0 , जो कि हाल की 1 मिनट, 5 मिनट, 15 मिनट में सिस्टम का औसत लोड है।

उपयोग किए गए IO इवेंट लाइब्रेरी, event-loop:\Workerman\Events\Event

4 workers (3 प्रकार की प्रक्रियाएँ, जिसमें ChatGateway, ChatBusinessWorker, Register प्रक्रिया, WebServer प्रक्रिया शामिल हैं)

11 processes (कुल 11 प्रक्रियाएँ)

worker_name (कार्यकर्ता प्रक्रिया का नाम)

exit_status (कार्यकर्ता प्रक्रिया का निकासी स्थिति कोड)

exit_count (उस स्थिति कोड के निकासी次数)

सामान्यतः exit_status 0 का अर्थ है कि प्रक्रिया सामान्य रूप से निकली है, यदि यह अन्य मान है, तो इसका मतलब है कि प्रक्रिया असामान्य रूप से निकली है, और एक समान WORKER EXIT UNEXPECTED त्रुटि संदेश उत्पन्न होता है, त्रुटि संदेश को Worker::logFile में निर्दिष्ट फ़ाइल में रिकॉर्ड किया जाएगा।

सामान्य exit_status और उनके अर्थ निम्नलिखित हैं:

  • 0: सामान्य रूप से निकली, reload को चिकनी रीस्टार्ट करने के बाद 0 का निकासी कोड आना सामान्य है। ध्यान दें कि यदि कार्यक्रम में exit या die का उपयोग किया जाता है, तो भी निकासी कोड 0 उत्पन्न होता है और एक WORKER EXIT UNEXPECTED त्रुटि संदेश उत्पन्न होता है, workerman में व्यावसायिक कोड में exit या die बयान का उपयोग करने की अनुमति नहीं है।
  • 9: प्रक्रिया को SIGKILL सिग्नल से मारा गया। यह निकासी कोड मुख्यतः stop और reload चिकनी रीस्टार्ट के समय होता है, इस निकासी कोड का कारण यह है कि उप-प्रक्रिया ने मुख्य प्रक्रिया का reload सिग्नल निर्धारित समय के भीतर प्रतिक्रियादान नहीं किया (जैसे mysql, curl आदि लंबी समय से अवरोधवाले इंतजार या व्यावसायिक लूप से) और मुख्य प्रक्रिया द्वारा मजबूर उपयोग किए जाने वाले SIGKILL सिग्नल से मारा गया। ध्यान दें कि जब लिनक्स कमांड लाइन में kill कमांड का उपयोग करके उप-प्रक्रिया को SIGKILL सिग्नल भेजा जाता है तो यह भी इस निकासी कोड का कारण बनता है।
  • 11: php में coredump उत्पन्न हुआ, सामान्यतः अस्थिर विस्तार के उपयोग के कारण, कृपया php.ini में संबंधित विस्तार को टिप्पणी करें; इसके अलावा कुछ मामलों में php का बग हो सकता है, इस समय php को अपडेट करना आवश्यक है।
  • 65280: इस निकासी कोड का कारण यह है कि व्यावसायिक कोड में गंभीर त्रुटि है, जैसे कि अस्तित्व में न होने वाले फ़ंक्शन का उपयोग करना, वाक्य रचना की त्रुटियाँ आदि, विशिष्ट त्रुटि संदेश को Worker::logFile में निर्दिष्ट फ़ाइल में रिकॉर्ड किया जाएगा, या php.ini में error_log में निर्दिष्ट फ़ाइल में (यदि कोई निर्दिष्ट है) ढूंढा जा सकता है।
  • 64000: इस निकासी कोड का कारण यह है कि व्यावसायिक कोड ने अपवाद उत्पन्न किया, लेकिन व्यावसायिक ने इस अपवाद को पकड़ नहीं लिया, जिससे प्रक्रिया का निकास हो गया। यदि workerman डिबग मोड में चलता है तो अपवाद कॉल स्टैक टर्मिनल में प्रिंट किया जाएगा, और डेमन मोड में चलता है तो अपवाद कॉल स्टैक को Worker::stdoutFile में निर्दिष्ट फ़ाइल में रिकॉर्ड किया जाएगा।

PROCESS STATUS

pid: प्रक्रिया pid

memory: इस प्रक्रिया द्वारा PHP द्वारा अनुरोध की गई मेमोरी। यह मान PHP निष्पादन फ़ाइल आदि द्वारा उपयोग की गई मेमोरी को नहीं गिनता है, इसलिए प्रदर्शित मान वास्तविक प्रक्रिया की उपयोग की गई मेमोरी से कम होना चाहिए, कृपया memory_get_usage को देखें।

listening: ट्रांसपोर्ट लेयर प्रोटोकॉल और सुनने वाला आईपी पोर्ट। यदि कोई पोर्ट सुन नहीं रहा है तो none दिखाएगा। Worker वर्ग के कंस्ट्रक्टर को देखें।

worker_name: यह प्रक्रिया चलाने वाली सेवा का नाम, Worker वर्ग की name प्रॉपर्टी को देखें।

connections: इस प्रक्रिया में वर्तमान कितने TCP कनेक्शन उदाहरण हैं, कनेक्शन उदाहरणों में TcpConnection और AsyncTcpConnection उदाहरण शामिल हैं। यह मान वास्तविक समय का मान है, संचयी मान नहीं है। ध्यान दें: जब कनेक्शन उदाहरण close का उपयोग करते हैं तो यदि संबंधित गणना में कोई कमी नहीं होती है, तो इसका कारण यह हो सकता है कि व्यावसायिक कोड ने $connection वस्तु को संरक्षित किया है, जिससे यह कनेक्शन उदाहरण नष्ट नहीं हो सकता।

total_request: इस प्रक्रिया ने आरंभ से अब तक कुल कितने अनुरोध प्राप्त किए हैं। यहां के अनुरोध की संख्या में केवल क्लाइंट द्वारा भेजे गए अनुरोध शामिल नहीं हैं, बल्कि Workerman के आंतरिक संचार अनुरोध भी शामिल हैं, जैसे GatewayWorker संरचना में Gateway और BusinessWorker के बीच के संचार अनुरोध। यह मान संचयी मान है।

send_fail: इस प्रक्रिया द्वारा क्लाइंट को डेटा भेजने में विफलता की संख्या, विफलता का कारण सामान्यतः क्लाइंट कनेक्शन का断开 होता है, यह मान 0 नहीं होने पर सामान्य स्थिति का अर्थ है, status में send_fail का कारण को देखें। यह मान संचयी मान है।

timers: इस प्रक्रिया में सक्रिय टाइमर की संख्या (हटाए गए टाइमर और पहले ही चल चुके एकल टाइमर को छोड़कर)। ध्यान दें: यह विशेषता बिना कार्यकर्ता संस्करण>=3.4.7 के आवश्यक है। यह मान वास्तविक समय का मान है, संचयी मान नहीं है।

qps: वर्तमान प्रक्रिया में प्रति सेकंड प्राप्त नेटवर्क अनुरोधों की संख्या, ध्यान दें: केवल status के साथ -d जोड़ने पर यह विकल्प गिनेगा, अन्यथा 0 दिखाएगा। यह विशेषता बिना कार्यकर्ता संस्करण>=3.5.2 के आवश्यक है। यह मान वास्तविक समय का मान है, संचयी मान नहीं है।

status: प्रक्रिया की स्थिति, यदि idle है तो इसका मतलब है कि यह खाली है, यदि busy है तो इसका मतलब है कि यह व्यस्त है। ध्यान दें: यदि प्रक्रिया अस्थायी रूप से व्यस्त है तो यह सामान्य स्थिति है, यदि प्रक्रिया हमेशा व्यस्त है, तो यह संभव है कि व्यावसायिक अवरोध या व्यावसायिक लूप की स्थिति उत्पन्न हो रही है, इसे व्यस्त प्रक्रियाओं की समस्या का समाधान खंड के अनुसार जाँचने की आवश्यकता है। ध्यान दें: यह विशेषता बिना कार्यकर्ता संस्करण>=3.5.0 के आवश्यक है।

सिद्धांत

status स्क्रिप्ट चलने के बाद, मुख्य प्रक्रिया सभी कार्यकर्ता प्रक्रियाओं को SIGUSR2 सिग्नल भेजती है, इसके बाद status स्क्रिप्ट एक छोटी नींद के चरण में चली जाती है ताकि विभिन्न कार्यकर्ता प्रक्रियाओं की स्थिति सांख्यिकी परिणामों की प्रतीक्षा कर सके। इस समय, खाली कार्यकर्ता प्रक्रियाएँ SIGUSR2 सिग्नल प्राप्त करने के तुरंत बाद अपनी कार्य स्थिति (कनेक्शन संख्या, अनुरोध संख्या आदि) को एक विशेष डिस्क फ़ाइल में लिखती हैं, जबकि व्यवसाय तर्क को संसाधित करने वाली कार्यकर्ता प्रक्रियाएँ अपने स्थिति जानकारी को लिखने से पहले व्यावसायिक तर्क को संसाधित होने का इंतजार करती हैं। थोड़े समय बाद, status स्क्रिप्ट डिस्क में स्थिति फ़ाइल को पढ़ना शुरू करती है और परिणामों को कंसोल में प्रदर्शित करती है।

ध्यान दें

status के दौरान आप देख सकते हैं कि कुछ प्रक्रियाएँ busy के रूप में दिखाई दे रही हैं, इसका कारण यह है कि प्रक्रिया व्यवसाय को संसाधित करने में व्यस्त है (जैसे व्यवसाय तर्क curl या डेटाबेस अनुरोध पर लंबे समय तक विघटन में है, या बड़े लूप को चलाया जा रहा है), जिससे स्थिति रिपोर्ट नहीं की जा सके, जिससे busy प्रदर्शित होता है।

इस समस्या का समाधान करने के लिए व्यावसायिक कोड की जाँच करें, देखें कि कहां व्यावासिक लंबी अवधि के लिए अवरोधित हो रहा है, और यह मूल्यांकन करें कि अवरोध का समय अपेक्षित है या नहीं, यदि यह अपेक्षित से मेल नहीं खाता है, तो व्यस्त प्रक्रियाओं की समस्या का समाधान खंड के अनुसार व्यावासिक कोड की जाँच की आवश्यकता है।