Viewing Running Status

Running php start.php status shows Workerman’s running status similar to the following:

----------------------------------------------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]

Description

GLOBAL STATUS

In this section, we can see:

Workerman version version:3.5.13

Start time 2018-02-03 11:48:20, running for run 112 days 2 hours

Server load load average: 0, 0, 0, representing the system’s average load in the last 1, 5, and 15 minutes.

Used IO event library: event-loop:\Workerman\Events\Event

4 workers (3 types of processes, including ChatGateway, ChatBusinessWorker, Register processes and WebServer process)

11 processes (a total of 11 processes)

worker_name (worker process name)

exit_status (exit status code of worker processes)

exit_count (exit count of the status code)

Generally, an exit_status of 0 indicates a normal exit. If it has a different value, the process exited unexpectedly, and an error message similar to WORKER EXIT UNEXPECTED will be recorded in the file specified in Worker::logFile.

Common exit_status and their meanings:

PROCESS STATUS

pid: Process ID

memory: The current memory usage of the process (excluding the memory usage of the PHP executable)

listening: Transmission layer protocol and listening IP:port. If it is not listening on any port, it shows none. Refer to Worker class constructor.

worker_name: The name of the service the process is running. See Worker class name attribute.

connections: The current number of TCP connection instances in the process, including TcpConnection and AsyncTcpConnection instances. This value is real-time, not cumulative. Note: If the connection instance is closed but the corresponding count is not reduced, it may be because the business code has saved the $connection object, preventing the connection instance from being destroyed.

total_request: Represents the total number of requests received by the process from startup to now. This includes not only requests from clients, but also internal communication requests within Workerman, such as GatewayWorker’s communication requests between Gateway and BusinessWorker. This value is cumulative.

send_fail: The number of times the process failed to send data to clients. The failure is generally due to the client disconnecting. If this value is not 0, it generally indicates a normal state. See the reasons for send_fail in status. This value is cumulative.

timers: The number of active timers in the process (excluding deleted timers and one-time timers that have already run). Note: This feature requires Workerman version >=3.4.7. This value is real-time, not cumulative.

qps: The number of network requests received by the process per second. Note: Only with -d added to the status will this option be counted; otherwise, it will display 0. This feature requires Workerman version >=3.5.2. This value is real-time, not cumulative.

status: Process status, showing idle if it is idle, and busy if it is busy. Note: If the process is briefly busy, it is normal. If the process is consistently busy, there may be a business blockage or a business dead loop situation, which needs to be investigated based on the section Debugging Busy Processes. Note: This feature requires Workerman version >=3.5.0.

Principle

After running the status script, the main process sends a SIGUSR2 signal to all worker processes. Then, the status script enters a brief sleep stage to wait for the status statistics from each worker process. When an idle worker process receives the SIGUSR2 signal, it immediately writes its own running status (e.g., connection count, request count, etc.) to a specific disk file, while a worker process processing business logic waits to finish processing business logic before writing its status information. After a brief sleep, the status script starts reading the status files from the disk and displays the results on the console.

Note

When using the status command, you may find that some processes are busy. This is because the process is busy processing business logic (e.g., long-term blocking in curl or database requests, running large loops), and cannot report its status, resulting in a busy display.

When this issue occurs, you need to troubleshoot the business code to find where the business is blocked for a long time and evaluate whether the blocked time is within expectations. If it does not meet expectations, you need to troubleshoot the business code based on the section Debugging Busy Processes.