실행 상태 확인

php start.php status를 실행하여 Workerman의 실행 상태를 확인할 수 있으며, 다음과 유사한 내용이 표시됩니다:

----------------------------------------------전역 상태---------------------------------------------------------
Workerman version:3.5.13          PHP version:5.5.9-1ubuntu4.24
시작 시간:2018-02-03 11:48:20   112일 2시간 실행   
로드 평균: 0, 0, 0            이벤트 루프:\Workerman\Events\Event
4개의 워커       11개의 프로세스
worker 이름        exit 상태      exit 횟수
ChatBusinessWorker 0                0
ChatGateway        0                0
Register           0                0
WebServer          0                0
----------------------------------------------프로세스 상태---------------------------------------------------
pid 메모리  listening                worker 이름        연결 개수 전송 실패 타이머 총 요청 qps    상태
18306   2.25M   none                     ChatBusinessWorker 5           0         0       11            0      [유휴]
18307   2.25M   none                     ChatBusinessWorker 5           0         0       8             0      [유휴]
18308   2.25M   none                     ChatBusinessWorker 5           0         0       3             0      [유휴]
18309   2.25M   none                     ChatBusinessWorker 5           0         0       14            0      [유휴]
18310   2M      websocket://0.0.0.0:7272 ChatGateway        8           0         1       31            0      [유휴]
18311   2M      websocket://0.0.0.0:7272 ChatGateway        7           0         1       26            0      [유휴]
18312   2M      websocket://0.0.0.0:7272 ChatGateway        6           0         1       21            0      [유휴]
18313   1.75M   websocket://0.0.0.0:7272 ChatGateway        5           0         1       16            0      [유휴]
18314   1.75M   text://0.0.0.0:1236      Register           8           0         0       8             0      [유휴]
18315   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [유휴]
18316   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [유휴]
----------------------------------------------프로세스 상태---------------------------------------------------
요약  18M     -                        -                  54          0         4       138           0      [요약]

설명

전역 상태

이 열에서는 다음을 볼 수 있습니다:

Workerman 버전version:3.5.13

시작 시간2018-02-03 11:48:20, 실행 시간112일 2시간

서버 부하로드 평균: 0, 0, 0 각각 1분, 5분, 15분 동안의 시스템 평균 부하

사용중인 IO 이벤트 루프, 이벤트 루프:\Workerman\Events\Event

4개의 워커 (ChatGateway, ChatBusinessWorker, Register, WebServer포함 3가지 프로세스)

11개의 프로세스 (총 11개의 프로세스)

worker 이름 (worker 프로세스 이름)

exit 상태 (worker 프로세스 종료 상태 코드)

exit 횟수 (해당 상태 코드가 종료된 횟수)

보통 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 신호에 응답하지 않아(SIGKILL이 mysql, curl 등의 장기 블로킹 또는 비즈니스 무한 루프 등으로 인해 강제로) 발생한 것입니다. 주의: 리눅스 명령 줄에서 kill 명령으로 SIGKILL 신호를 자식 프로세스에 전송하면 이와 같은 종료 코드가 발생합니다.
  • 11:php가 코어덤프가 발생한 경우입니다. 이는 불안정한 확장으로 인한 것으로, php.ini에서 해당 확장을 주석 처리해야 합니다. 일부 경우에는 php 버그일 수 있으며, 이 경우 php를 업그레이드해야 합니다.
  • 65280:비즈니스 코드에 치명적인 오류가 있는 경우로, 존재하지 않는 함수를 호출하는 등의 구문 오류 등이 포함됩니다. 구체적인 오류 정보는 Worker::logFile에 지정된 파일에 기록되며 필요한 경우에는 php.ini에 지정된 error_log 파일에서 확인할 수 있습니다.
  • 64000:비즈니스 코드가 예외를 발생시켰지만 이 예외를 처리하지 않아서 프로세스가 종료된 경우입니다. Workerman이 디버그 모드로 실행될 때 예외 호출 스택은 터미널에 출력되며, 데몬 모드로 실행될 때는 예외 호출 스택이 Worker::stdoutFile에 지정된 파일에 기록됩니다.

프로세스 상태

pid: 프로세스 pid

memory: 해당 프로세스의 현재 메모리 점유량(PHP 자체 실행 파일의 메모리 점유량은 포함하지 않음)

listening: 전송 계층 프로토콜 및 리스닝 IP 및 포트. 어떠한 포트도 듣지 않는 경우 none으로 표시됩니다. Worker 클래스 생성자를 참고하세요.

worker 이름: 해당 프로세스가 실행 중인 서비스 이름으로 Worker 클래스 name 속성을 참고하세요.

connections: 해당 프로세스의 현재 TCP 연결 인스턴스 수를 나타냅니다. 연결 인스턴스에는 TcpConnection 및 AsyncTcpConnection 인스턴스가 포함됩니다. 이 값은 누적이 아닌 실시간 값임을 유의하십시오. 참고: 연결 인스턴스가 close를 호출한 후 해당 수가 감소하지 않을 경우 비즈니스 코드가 $connection 객체를 보관해서 해당 연결 인스턴스가 소멸하지 않도록 하는 것일 수 있습니다.

total_request: 해당 프로세스가 시작되고 현재까지받은 요청의 총 개수를 나타냅니다. 여기에는 클라이언트가 보내는 요청 뿐만 아니라 Workerman 내부 통신 요청도 포함됩니다. 이 값은 누적 값입니다.

send_fail: 해당 프로세스가 클라이언트에 데이터를 보내는 데 실패한 횟수를 나타냅니다. 실패 이유는 일반적으로 클라이언트가 연결을 끊은 경우입니다. 이 값은 누적 값입니다. 상태에 대한 send_fail 원인를 참고하십시오.

timers: 해당 프로세스의 활성 타이머 수를 나타냅니다(삭제된 타이머 및 이미 실행된 일회성 타이머는 포함되지 않음). 참고: 이 기능은 Workerman 버전 >= 3.4.7이 필요합니다. 이 값은 누적이 아닌 실시간 값임을 유의하십시오.

qps: 현재 프로세스가 초당 받는 네트워크 요청 수를 나타냅니다. 참고: status 시 -d를 추가하여야만 이 옵션이 통계 됩니다. 그렇지 않으면 0이 표시됩니다. 이 기능은 Workerman 버전 >= 3.5.2가 필요합니다. 이 값은 누적이 아닌 실시간 값임을 유의하십시오.

status: 프로세스 상태. idle인 경우 비활성 상태를, busy인 경우 활성 상태를 나타냅니다. 참고: 프로세스가 잠깐 바쁜 상황에 직면할 수는 있으나 지속적으로 바쁜 상태일 경우 비즈니스가 차단되거나 비즈니스 무한 루프에 빠진 가능성이 있으므로 busy 프로세스 디버깅 섹션을 따라 문제를 해결해야 합니다. 참고: 이 기능은 Workerman 버전 >= 3.5.0이 필요합니다.

원리

status 스크립트를 실행하면 주 프로세스가 모든 worker 프로세스에게 SIGUSR2 신호를 보내고 나서 status 스크립트가 잠시 대기하여 각 worker 프로세스의 상태 통계 결과를 기다립니다. 이때 유휴 중인 worker 프로세스는 즉각적으로 특정한 디스크 파일에 자신의 실행 상태를 기록하고, 현재 비즈니스 로직을 처리 중인 worker 프로세스는 비즈니스 로직 처리 후에 자신의 상태 정보를 기록합니다. 잠시 후 status 스크립트가 디스크의 상태 파일을 읽고 결과를 콘솔에 출력합니다.

주의사항

상태 조회시 일부 프로세스가 바쁜 상태로 표시될 수 있으며, 이는 프로세스가 비즈니스 처리로 인해 상태를 보고하지 못해 바쁜 상태로 표시되는 것입니다.

이러한 문제가 발생하면 비즈니스 코드를 확인하여 어디에서 비즈니스가 오랜 시간 동안 차단되었는지 파악하고 차단 시간이 예상과 다른지 평가하여, busy 프로세스 디버깅 섹션을 참고하여 비즈니스 코드 문제를 해결해야 합니다.