চালানোর অবস্থা দেখুন
চালান 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 সুশৃঙ্খল পুনরায় শুরু করার সময় ঘটে, যা ঘটতে পারে যদি স্ন্দশী প্রক্রিয়া নির্ধারিত সময়ে সাড়া না দেয় (যেমন mysql, curl ইত্যাদি দীর্ঘ সময় ধরে অপেক্ষা করে বা ব্যবসায়িক অন্ধকূপ ইত্যাদি), প্রধান প্রসেসটি ZIGKILL সংকেত ব্যবহার করে। মনে রাখবেন, যখন লিনাক্স কমান্ড লাইন থেকে kill কমান্ড ব্যবহার করে শুধুমাত্র SIGKILL সংকেত সাব-প্রসেসে পাঠানো হয়, তখনও এই প্রস্থান কোডটি ঘটে।
- 11:php তে coredump ঘটে, সাধারণত অস্থিতিশীল এক্সটেনশনের কারণে হয়, দয়া করে php.ini তে সংশ্লিষ্ট এক্সটেনশন মন্তব্য করুন; অতিরিক্ত কিছু ক্ষেত্রে এটি php এর bug, তখন আপনাকে 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:এই প্রসেসের কার্যকর টিমারের সংখ্যা (মুছা সামান্য টিমার এবং ইতিমধ্যে একবার চলা টিমার বাদে)। মনে রাখবেন, এই বৈশিষ্ট্যের জন্য workerman সংস্করণ >=3.4.7 প্রয়োজন। এই মানটি রিয়েল টাইম সংখ্যা, মোট নয়।
qps:বর্তমান প্রসেস প্রতি সেকেন্ডে প্রাপ্ত নেটওয়ার্ক অনুরোধ সংখ্যা, মনে রাখবেন: status এর সময় -d যোগ করা হলে শুধুমাত্র এই বিকল্পটি গণনা হবে, অন্যথায় 0 দেখাবে। এই বৈশিষ্ট্যের জন্য workerman সংস্করণ >=3.5.2 প্রয়োজন। এই মানটি রিয়েল টাইম সংখ্যা, মোট নয়।
status: প্রসেসের অবস্থা, যদি idle দেখায় তবে মানে এটি অলস, যদি busy দেখায় তবে এটি ব্যস্ত। মনে রাখবেন: যদি প্রসেসটি সংক্ষিপ্ত সময়ের জন্য ব্যস্ত থাকে তবে এটি স্বাভাবিক অবস্থা, যদি প্রসেসটি দীর্ঘ সময় ধরে ব্যস্ত থাকে, তাহলে ব্যবসায়িক ব্লক অথবা ব্যবসায়িক অন্ধকূপের পরিস্থিতি হতে পারে, যা ব্যস্ত প্রসেস ডিবাগিং অধ্যায় অনুসারে তদন্ত করার প্রয়োজন। মনে রাখবেন, এই বৈশিষ্ট্যের জন্য workerman সংস্করণ >=3.5.0 প্রয়োজন।
পদ্ধতি
status স্ক্রিপ্টটি চালানোর পর, প্রধান প্রক্রিয়া সকল কর্মী প্রক্রিয়ার কাছে একটি SIGUSR2 সংকেত পাঠায়, তারপর status স্ক্রিপ্টটি একটি সংক্ষিপ্ত ঘুমের পর্যায়ে প্রবেশ করে, যাতে বিভিন্ন কর্মী প্রক্রিয়া অবস্থা পরিসংখ্যান ফলাফলগুলি অপেক্ষা করতে পারে। এই সময় খালি কর্মী প্রক্রিয়া SIGUSR2 সংকেত পাওয়ার পর তৎক্ষণাত কিছু বিশেষ ডিস্ক ফাইলে নিজস্ব চলার অবস্থা (সংযোগ সংখ্যা, অনুরোধ সংখ্যা ইত্যাদি) লিখবে, এবং ব্যবসায়িক লজিক পরিচালনা করতে থাকা কর্মী প্রক্রিয়া, ব্যবসায়িক লজিক সম্পন্ন হওয়া পর্যন্ত নিজের অবস্থা তথ্য লিখতে অপেক্ষা করবে। সংক্ষিপ্ত ঘুমের পরে, status স্ক্রিপ্ট ডিস্কের অবস্থা ফাইলগুলি পড়তে শুরু করে এবং কনসোলের ফলাফল প্রদর্শন করে।
নির্দেশ
status চলানোর সময় কিছু প্রসেস busy দেখাতে পারে, এর কারণ হল প্রক্রিয়াটি ব্যবসা পরিচালনার জন্য ব্যস্ত (যেমন ব্যবসায়িক লজিক দীর্ঘ সময়ের জন্য curl বা ডেটাবেস অনুরোধে ব্লক করা হয়েছে, অথবা বড় লুপ চালানো হয়েছে), ফলে তারা অবস্থা রিপোর্ট করতে পারছে না, এবং অবস্থা busy দেখাচ্ছে।
এ ধরনের সমস্যাগুলি ব্যবসায়িক কোড সরবরাহ করার জন্য তদন্ত করা প্রয়োজন, দেখুন কোথায় ব্যবসা দীর্ঘ সময়ের জন্য ব্লক হয়েছে এবং ব্লক耗时 প্রত্যাশিত কি না তা মূল্যায়ন করা দরকার, যদি প্রত্যাশিত না হয় তবে ব্যস্ত প্রসেস ডিবাগিং অধ্যায় অনুযায়ী ব্যবসায়িক কোড তদন্ত করতে হবে।