Xem trạng thái hoạt động
Chạy php start.php status
có thể xem được trạng thái hoạt động của Workerman, tương tự như sau:
----------------------------------------------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]
Giải thích
GLOBAL STATUS
Từ cột này chúng ta có thể thấy
Phiên bản Workerman làversion:3.5.13
Thời gian khởi động 2018-02-03 11:48:20, đã hoạt động đượcrun 112 days 2 hours
Tải máy chủ load average: 0, 0, 0, tương ứng là tải trung bình của hệ thống trong 1 phút, 5 phút và 15 phút gần đây
Thư viện sự kiện I/O được sử dụng là event-loop:\Workerman\Events\Event
4 workers (3 loại tiến trình, bao gồm tiến trình ChatGateway, ChatBusinessWorker, Register và WebServer)
11 processes (tổng cộng 11 tiến trình)
worker_name (tên tiến trình worker)
exit_status (mã trạng thái thoát của tiến trình worker)
exit_count (số lần thoát với mã trạng thái này)
Thông thường, exit_status bằng 0 cho biết thoát bình thường, nếu là giá trị khác, có nghĩa là tiến trình đã thoát bất thường và phát sinh một thông báo lỗi tương tự như WORKER EXIT UNEXPECTED, thông báo lỗi sẽ được ghi lại trong tệp được chỉ định bởi Worker::logFile.
Các exit_status thường gặp và ý nghĩa của chúng như sau:
- 0: biểu thị thoát bình thường, khi chạy reload để khởi động lại mượt mà sẽ thấy mã thoát là 0, đây là hiện tượng bình thường. Lưu ý rằng việc gọi exit hoặc die trong mã chương trình cũng sẽ dẫn đến mã thoát là 0 và phát sinh một thông báo lỗi
WORKER EXIT UNEXPECTED, không cho phép mã kinh doanh trong workerman gọi các câu lệnh exit hoặc die. - 9: biểu thị tiến trình đã bị tín hiệu SIGKILL giết. Mã thoát này chủ yếu xảy ra trong các trường hợp stop và reload khởi động lại mượt mà, nguyên nhân dẫn đến mã thoát này là do các tiến trình con không phản hồi trong thời gian quy định đối với tín hiệu reload của tiến trình chính (chẳng hạn như mysql, curl đang chờ lâu hoặc mã kinh doanh bị chết vòng lặp), bị tiến trình chính sử dụng tín hiệu SIGKILL buộc dừng. Lưu ý, khi sử dụng lệnh kill trong dòng lệnh linux gửi tín hiệu SIGKILL đến tiến trình con cũng sẽ dẫn đến mã thoát này.
- 11: biểu thị php đã xảy ra coredump, thường là do sử dụng các tiện ích không ổn định, hãy bình luận tiện ích tương ứng trong php.ini; ngoài ra, một số ít trường hợp là lỗi của php, trong trường hợp này cần nâng cấp php.
- 65280: nguyên nhân dẫn đến mã thoát này là mã kinh doanh có lỗi nghiêm trọng, ví dụ như gọi hàm không tồn tại, lỗi cú pháp, v.v., thông tin lỗi cụ thể sẽ được ghi vào tệp chỉ định bởi Worker::logFile, bạn cũng có thể tìm thấy thông tin đó trong tệp được chỉ định bởi error_log trong php.ini (nếu có chỉ định).
- 64000: nguyên nhân dẫn đến mã thoát này là mã kinh doanh ném ra ngoại lệ, nhưng mã kinh doanh không bắt được ngoại lệ này, dẫn đến tiến trình thoát. Nếu workerman chạy ở chế độ gỡ lỗi, ngăn xếp gọi ngoại lệ sẽ được in ra terminal, khi chạy ở chế độ daemon, ngăn xếp gọi ngoại lệ sẽ được ghi vào tệp được chỉ định bởi Worker::stdoutFile.
PROCESS STATUS
pid:pid của tiến trình
memory:Bộ nhớ mà PHP đã yêu cầu cho tiến trình này. Giá trị này không bao gồm bộ nhớ chiếm dụng bởi tệp thực thi PHP, vì vậy giá trị hiển thị sẽ nhỏ hơn bộ nhớ thực tế của tiến trình, cụ thể hãy tham khảo memory_get_usage。
listening:Giao thức truyền tải và cổng IP đang lắng nghe. Nếu không lắng nghe bất kỳ cổng nào thì hiển thị là none. Tham khảo hàm khởi tạo lớp Worker
worker_name:Tên dịch vụ mà tiến trình này đang chạy, xem thuộc tính name của lớp Worker
connections:Số lượng phiên TCP hiện tại mà tiến trình này có, các phiên kết nối bao gồm các phiên TcpConnection và AsyncTcpConnection. Giá trị này là số liệu thời gian thực, không phải là giá trị tích lũy. Lưu ý: Khi các phiên kết nối gọi close, nếu số lượng tương ứng không giảm, có thể là mã kinh doanh đã lưu giữ đối tượng $connection, dẫn đến phiên kết nối này không thể được hủy.
total_request:Biểu thị số lượng yêu cầu mà tiến trình này đã nhận từ lúc khởi động đến bây giờ. Số lượng yêu cầu ở đây không chỉ bao gồm các yêu cầu từ khách hàng mà còn bao gồm các yêu cầu giao tiếp nội bộ của Workerman, chẳng hạn như các yêu cầu giao tiếp giữa Gateway và BusinessWorker trong kiến trúc GatewayWorker. Giá trị này là giá trị tích lũy.
send_fail:Số lần tiến trình này gửi dữ liệu đến khách hàng bị lỗi, nguyên nhân thất bại thường là do kết nối của khách hàng bị ngắt, mục này không bằng 0 thường thuộc trạng thái bình thường, tham khảo nguyên nhân send_fail trong status. Giá trị này là giá trị tích lũy.
timers:Số lượng bộ hẹn giờ hoạt động của tiến trình này (không bao gồm các bộ hẹn giờ đã bị xóa và các bộ hẹn giờ đơn lần đã chạy). Lưu ý: Tính năng này yêu cầu phiên bản workerman >=3.4.7. Giá trị này là số liệu thời gian thực, không phải là giá trị tích lũy.
qps:Số lượng yêu cầu mạng mà tiến trình hiện tại đã nhận mỗi giây, lưu ý: chỉ khi thêm -d vào status mới thống kê tùy chọn này, nếu không sẽ hiển thị là 0. Tính năng này yêu cầu phiên bản workerman >=3.5.2. Giá trị này là số liệu thời gian thực, không phải là giá trị tích lũy.
status: Trạng thái của tiến trình, nếu là idle thì biểu thị đang rảnh rỗi, nếu là busy thì biểu thị đang bận. Lưu ý: Nếu tiến trình vào trạng thái bận tạm thời là hiện tượng bình thường, nếu tiến trình luôn ở trạng thái bận, có thể đã xảy ra tình trạng tắc nghẽn trong kinh doanh hoặc bị chết vòng lặp, cần điều tra theo mục gỡ lỗi tiến trình bận. Lưu ý: Tính năng này yêu cầu phiên bản workerman >=3.5.0.
Nguyên lý
Sau khi chạy kịch bản status, tiến trình chính sẽ gửi một tín hiệu SIGUSR2 đến tất cả các tiến trình worker, sau đó kịch bản status sẽ vào giai đoạn ngủ tạm thời để chờ đợi kết quả thống kê trạng thái của các tiến trình worker. Lúc này, các tiến trình worker đang rảnh rỗi sẽ ngay lập tức ghi lại trạng thái hoạt động của chúng (số lượng kết nối, số lượng yêu cầu, v.v.) vào một tệp trên đĩa, trong khi đó các tiến trình worker đang xử lý logic kinh doanh sẽ chờ cho đến khi xử lý xong logic kinh doanh mới ghi lại thông tin trạng thái của chúng. Sau một thời gian ngủ tạm, kịch bản status sẽ bắt đầu đọc các tệp trạng thái trên đĩa và hiển thị kết quả trên console.
Lưu ý
Trong quá trình chạy status, có thể phát hiện một số tiến trình hiển thị trạng thái busy, nguyên nhân là do tiến trình bận rộn xử lý công việc (chẳng hạn như logic kinh doanh bị chặn lâu trên curl hoặc yêu cầu cơ sở dữ liệu, hoặc chạy vòng lặp lớn), không thể báo cáo trạng thái, dẫn đến hiển thị trạng thái busy.
Khi gặp phải vấn đề này, cần điều tra mã kinh doanh, xem ở đâu gây ra tình trạng tắc nghẽn lâu dài, và đánh giá xem thời gian tắc nghẽn có trong dự kiến hay không, nếu không phù hợp với dự kiến cần điều tra mã kinh doanh theo mục gỡ lỗi tiến trình bận.