[nginx] worker_processesとworker_cpu_affinityについて
nginxにはworker_processesというパラメータがあります。 NginxのWiki の Coreモジュールのページには、次のような説明があります。
A worker process is a single-threaded process.
If Nginx is doing CPU-intensive work such as SSL or gzipping and you have 2 or more CPUs/cores, then you may set worker_processes to be equal to the number of CPUs or cores.
If you are serving a lot of static files and the total size of the files is bigger than the available memory, then you may increase worker_processes to fully utilize disk bandwidth.
Your OS may schedule all workers on single CPU/core this can be avoided using worker_cpu_affinity.
Nginx has the ability to use more than one worker process for several reasons:
- to use SMP
- to decrease latency when workers blockend on disk I/O
- to limit number of connections per process when select()/poll() is used
The worker_processes and worker_connections from the event sections allows you to calculate maxclients value:
max_clients = worker_processes * worker_connections
何が書いてあるかといえば、
worker prcessは、シングルスレッドなプロセスだよ。
nginxがSSLやgzip圧縮みたいにCPUを専有するような処理をするって場合に、2つ以上のCPUコアがあるなら、worker_processesにはCPUコア数と同じを設定したらいいよ。
大量の静的ファイルをホスティングしていて、ファイルサイズが空きメモリサイズよりも大きくなっちゃうような場合も、worker_processesの値を増やして、ディスク帯域を十分に使えるようにしたらいいよ。
君のOSだと全部のworker_processを1つのCPUコアに割りつけてしまうかもしれないけど、そんな時はworker_cpu_affinityを設定すれば回避できるよ。
nginxは、
- SMPを使うため。
- ディスクI/Oによる応答遅延を減らすため。
- select()/poll()環境下でプロセスごとの接続数を制限するため。
といったいくつかの理由から複数のworker processが使えるようになっているよ。
worker_processesとeventセクションに設定するworker_connectionsから、最大クライアント数を計算できるよ。つまり、
最大クライアント数 = worker_processes * worker_connections
になるよ。
といった内容でしょうか。
つまり、worker_processes を CPUコア数にして、worker_cpu_affinityをきちんと設定しなさいよ、ということで、
僕のサーバは2コアなので、
worker_processes 2; worker_cpu_affinity 0101 1010;
を設定しました。
worker prcess는 단일 스레드 프로세스이야. nginx가 SSL 및 gzip 압축처럼 CPU를 소유하는 처리를한다고하면, 2 개 이상의 CPU 코어가 있다면, worker_processes는 CPU 코어 수와 동일한 설정하면 좋아. 많은 정적 파일을 호스팅하고있어 파일 크기가 사용 가능한 메모리 크기보다 큽니다 버리는 경우도 worker_processes 값을 늘려 디스크 대역폭을 충분히 사용할 수 있도록하면 좋을거야. 네 OS라고 모든 worker_process을 하나의 CPU 코어에 할당 버릴지도 모르지만, 그런 때는 worker_cpu_affinity을 설정하면 회피 할 수 있어요. nginx는
- SMP를 사용하기.
- 디스크 I / O의 응답 지연을 감소시키기 위하여.
- select () / poll () 환경에서 프로세스 당 연결 수를 제한하기 위하여.
같은 몇 가지 이유에서 여러 worker process를 사용할 수있게되어 있어요.
worker_processes와 event 섹션에 설정 worker_connections에서 최대 클라이언트 수를 계산할 수 있어요. 즉, 최대 클라이언트 수 = worker_processes * worker_connections 될거야.
같은 내용입니까?
즉, worker_processes를 CPU 코어 수에하여 worker_cpu_affinity를 제대로 설정하십시오,라고하는 것으로,
내 서버는 2 코어이므로,
worker_processes 2; worker_cpu_affinity 0101 1010;
을 설정했습니다