Nginx 처리 속도 관련해서 설정할 수 있는 옵션입니다.

 

Nginx는 non-blocking I/O 방식을 사용하므로 자신에게 요청해온 connection file에 read 가능한지를 계속해서 확인해 주어야 하는데요.

multi-thread 방식에서는 context-switching을 계속 해야 하므로 대량 호출이 발생할 경우, 자원을 많이 사용하게 된다면

non-blocking I/O를 사용하는 single-thread 방식의 Nginx에서는 자신에게 연결되어 있는 socket에 읽을 데이터가 있는지 계속 확인하는데 자원을 낭비할 수 있다고 합니다.

Nginx에 들어오는 연결이 적을 경우 낭비되는 자원이 크지 않지만,

사용자가 많아질 경우 idle 상태로 연결된 connection이 많다면 이 connection들을 스캔하는 데 많은 자원이 필요하게 되어

그러한 시스템에서는 아래와 같이 설정하도록 권장하고 있습니다.

 

events{
    use epoll;
}

 

위에서 지정한 epoll은 Linux에서 socket을 관리하는 데 사용하는 방식 중 하나로, epoll 외에도 poll, select 방식이 있습니다.

이 중 poll과 select는 해당 프로세스에 연결된 모든 connection file을 스캔하지만, epoll은 수천개의 file descriptor를 처리할 수 있도록 보다 효율적인 알고리즘을 사용하고 있어 대량 요청이 발생하는 시스템에 적합하다고 합니다.