찾다

 >  Q&A  >  본문

Ab 처리량 테스트, nginx가 Apache만큼 좋지 않은 이유

환경

으아악

코드

으아악 으아악

테스트

으아악

결과

으아악

질문

이제 다들 nginx를 추천하는데 왜 순수 HTML이든 PHP 단독이든 nginx의 처리량이 Apache보다 열등할까요?
UGC 플랫폼이 Apache나 nginx에 더 적합할까요?

怪我咯怪我咯2749일 전860

모든 응답(5)나는 대답할 것이다

  • 漂亮男人

    漂亮男人2017-05-16 17:03:44

    Windows 7에서 IIS와 Apache 성능 비교 테스트
    IIS + php-cgi.exe(NTS) vs Apache + php5apache2_4.dll(TS)
    환경(64비트 Win7): IIS7+PHP5.4(NTS 비 스레드- 안전 버전) vs Apache2.4(32비트)+PHP5.4
    정적 파일 성능:

    으아아아

    결론: APR 런타임 및 WinNT 멀티스레딩을 기반으로 하는 Apache는 정적 리소스 처리에 있어서 IIS보다 나쁘지 않습니다.

    PHP 성능:

    으아아아

    결론: Apache는 스레드 MPM을 사용하므로 스레드 안전 버전의 PHP를 사용해야 합니다. 스레드 안전성 검사에는 특정 오버헤드가 있으므로 성능은 IIS+PHP-CGI보다 낮습니다.

    Nginx는 높은 동시성을 달성하기 위해 멀티스레딩을 기반으로 하지 않고 epoll(Linux), kqueue(FreeBSD) 이벤트 중심 비동기 네트워크 IO 메커니즘을 기반으로 하며 Windows IOCP가 아닌 Windows에서 가장 독창적인 선택을 사용합니다. 이 버전의 Nginx는 테스트 및 개발만을 목표로 합니다. Nginx의 진정한 성능을 발휘하려면 Linux 또는 FreeBSD에서 실행되어야 합니다.

    Apache는 Windows에서도 선택 시스템 호출을 사용하지만 Apache의 WINNT MPM은 다중 스레드 MPM이므로 높지 않은 동시성(예: 100 동시성)에서 정적 리소스를 처리하는 데 있어서 IIS보다 유리합니다. Linux에서 epoll을 사용하는 MPM은 예를 들어 2.4 시리즈의 기본 이벤트 MPM은 epoll 이벤트 기반 아키텍처이며, 각 작업자 프로세스에는 여러 스레드가 있습니다. 비동기 네트워크 IO를 수행하는 것은 Apache입니다. Nginx의 도전에 대한 강력한 대응

    회신하다
    0
  • 滿天的星座

    滿天的星座2017-05-16 17:03:44

    windows는 아무것도 설명하지 않습니다. Windows에서 테스트하는 데에만 사용되며 그 이상은 아닙니다.
    Windows용 nginx 버전은 기본 Win32 API(Cygwin 에뮬레이션 계층 아님)를 사용합니다. 현재는 select() 연결 처리 방법만 사용되므로 이 문제와 기타 알려진 문제 버전으로 인해 높은 성능과 확장성을 기대할 수 없습니다. Windows용 nginx는 베타 버전으로 간주됩니다.
    Windows에는 epoll 및 kqueue가 없으므로 Windows에서 select를 사용할 때 nginx의 성능이 당연히 저하됩니다.

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 17:03:44

    포스터가 직접 테스트하고 검증하는 것이 좋은 습관인데 nginx 서버로는 리눅스를 주로 사용합니다. Windows를 사용하는 경우 nginx의 성능은 apache만큼 좋지 않을 수 있습니다. nginx와 apache는 모두 대기열 루프 처리와 유사한 Windows에서 동일한 작동 메커니즘을 사용해야 합니다.
    Windows에서 nginx의 느린 성능은 다음과 같은 이유 때문일 수 있습니다. nginx는 php-cgi도 호출해야 하며 apache에는 php의 sapi가 내장되어 있습니다.

    Linux에서는 여전히 apache가 선택되며 nginx는 epoll을 사용할 수 있습니다.
    apache는 여전히
    nginx의 epoll 메커니즘 처리를 위해 대기열에 있고 요청이 오면 php-cgi에 전달한 후 다음 요청으로 진행합니다. php-cgi 처리가 완료되면 클라이언트에 반환하면 됩니다. 이렇게 하면 병렬이 됩니다.

    포스터를 통해 epoll과 apache의 차이점을 확인할 수 있습니다.
    당신이 대학에서 공부하고 있고 당신이 살고 있는 기숙사 건물에 방이 많고, 친구들이 당신을 찾아오고 싶어한다고 가정해 보겠습니다.

    선택된 버전의 여주인은 친구들이 당신을 찾을 때까지 방에서 방으로 당신을 찾도록 데려갈 것입니다.

    기숙사 이모님의 epoll 버전은 먼저 각 학생의 방 번호를 적어드립니다. 친구가 오면 친구에게 자신이 살고 있는 방을 알려 주기만 ​​하면 됩니다. 친구를 건물 주변으로 데려갈 필요가 없습니다. 누군가를 찾으세요.

    1만명이 와서 이 건물에 사는 동급생을 찾고 싶다면 셀렉트 버전과 에폴 버전 중 누가 더 효율적인지는 자명합니다.

    마찬가지로 동시성이 높은 서버에서 I/O 폴링은 가장 시간이 많이 걸리는 작업 중 하나이며 select와 epoll 중 어떤 성능이 더 높은지 명확합니다.

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 17:03:44

    NG 승리? 哎

    회신하다
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:03:44

    구성은 게시하지 않겠습니다. nginx가 epool을 활성화했나요?

    회신하다
    0
  • 취소회신하다