얼마나 많은 프로세스를 시작해야 할까요
프로세스 수 설정 방법
프로세스 수는 count 속성에 의해 결정됩니다 (Windows 시스템에서는 프로세스 수 설정이 지원되지 않습니다). 예를 들어 아래 코드를 참조하세요.
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:2345");
// ## 4개의 프로세스를 시작하여 서비스를 제공합니다 ##
$http_worker->count = 4;
...
프로세스 수 설정 시 고려해야 할 조건
-
CPU 코어 수
-
메모리 크기
-
비즈니스가 IO 집약형인지 CPU 집약형인지
프로세스 수 설정 원칙
-
각 프로세스가 사용하는 메모리의 합은 총 메모리보다 작아야 합니다 (일반적으로 각 비즈니스 프로세스는 약 40M의 메모리를 차지합니다).
-
IO 집약형인 경우, 즉 비즈니스에서 차단식 IO가 포함된 경우, 예를 들어 일반적인 MySQL, Redis 등의 저장소 접근은 차단식 접근입니다. 프로세스 수를 CPU 코어 수의 3배로 설정할 수 있습니다. 비즈니스에서 차단 대기가 매우 많다면 프로세스 수를 추가로 늘릴 수 있으며, 예를 들어 CPU 코어 수의 8배 또는 더 높게 설정할 수 있습니다. 비차단식 IO는 CPU 집약형에 해당되며 IO 집약형에 해당하지 않습니다.
-
CPU 집약형인 경우, 즉 비즈니스에서 차단식 IO 오버헤드가 없는 경우, 예를 들어 비동기 IO를 사용하여 네트워크 자원을 읽는 경우, 프로세스가 비즈니스 코드에 의해 차단되지 않는 상황이라면 프로세스 수를 CPU 코어 수와 동일하게 설정할 수 있습니다.
프로세스 수 설정 참고값
비즈니스 코드가 IO 집약형인 경우, IO 집약 정도에 따라 프로세스 수를 설정합니다. 예를 들어, CPU 코어 수의 3-8배로 설정합니다.
비즈니스 코드가 CPU 집약형인 경우, 프로세스 수를 CPU 코어 수로 설정할 수 있습니다.
주의
Workerman 자체의 IO는 모두 비차단형입니다. 예를 들어 Connection->send 등은 비차단형이며 CPU 집약형 작업입니다. 자신의 비즈니스가 어느 유형에 해당하는지 모를 경우, 프로세스 수를 CPU 코어 수의 3배 정도로 설정하면 됩니다. 또한 프로세스 수가 많다고 해서 항상 좋지는 않으며, 프로세스를 너무 많이 시작하면 프로세스 전환 오버헤드가 증가하여 성능에 어느 정도 영향을 미칠 수 있습니다.