Nginx가 정적 파일을 너무 느리게 제공함

Nginx가 정적 파일을 너무 느리게 제공함

스택오버플로에 물어봤지만 어쩌면 SF 제작진에게 더 많은 질문일지도 모르겠습니다.

그래서 이런 기사가 많이 나왔는데이 하나최근에는 가벼운 프런트 엔드 웹 서버와 함께 사용할 때 Django Static Generator의 장점을 칭찬했습니다. 그것은 나에게 많은 의미가 있습니다.

그러나 다른 사람들이 보고하는 것과 같은 결과(초당 수천 건의 요청)를 얻지는 못하는데 그 이유는 모르겠습니다.

나는 내 신문의 웹사이트를 개편할 준비를 하고 있습니다. 지금은 테스트 서버에서 Static Generator를 사용해 구현하고 있습니다. 그리고 특정 정적 페이지에서 Apache Bench를 실행하면 매우 비참한 결과가 나타납니다.

ab -c 10 -n 1000 http://journal.streamlister.com/news/

Concurrency Level:      10
Time taken for tests:   53.011 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      21281212 bytes
HTML transferred:       21067360 bytes
Requests per second:    18.86 [#/sec] (mean)
Time per request:       530.107 [ms] (mean)
Time per request:       53.011 [ms] (mean, across all concurrent requests)
Transfer rate:          392.04 [Kbytes/sec] received

포위 공격이 진행되는 동안 서버를 지켜보고 있는데 top, 아파치나 데이터베이스 서버에 전혀 타격을 주지 않는 것을 볼 수 있습니다. 따라서 이는 실제로 캐시된 페이지를 제공하는 것입니다. Nginx가 실행 중이지만 메모리 사용량이 2%를 넘지 않습니다. CPU는 약 95% 유휴 상태로 유지됩니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떻게 든 nginx를 잘못 구성했을 수 있습니까? 내 기본 구성 파일이 아래에 붙여져 있습니다. 이 사이트에 특정한 포함은 거의 샘플 구성의 복사본입니다.정적 생성기 홈페이지. 저는 Slicehost 256k 슬라이스에서 Ubuntu 9.10을 실행하고 있습니다.

user not_my_real_username;
worker_processes  4;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  8192;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  0;
    #keepalive_timeout  65;
    tcp_nodelay        on;
    gzip  on;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

답변1

구성에 다음 옵션을 추가하면 nginx 성능을 높일 수 있습니다.

   http {

      open_file_cache max=1000 inactive=300s;
      open_file_cache_valid 360s;
      open_file_cache_min_uses 2;
      open_file_cache_errors off;

    }

답변2

귀하의 nginx는 실제로 합리적인 속도로 파일을 제공하고 있습니다. 외부 컴퓨터에서 ab해당 페이지의 CSS 파일 중 하나를 사용하여 초당 371개의 요청을 얻을 수 있었습니다 .

전체 페이지를 테스트하고 있습니다. 이는 해당 페이지에 대해 22개의 요청을 한다는 의미입니다. 벤치할 때 초당 약 40개의 요청을 받을 수 있었습니다 http://journal.streamlister.com/news/.

아마도 더 빠를 수도 있지만 CPU와 디스크 I/O를 다른 사람들과 공유하는 VPS를 사용하고 있습니다.

답변3

나는 그것이 귀하의 VPS일 수 있다는 gekkz의 의견에 동의해야 합니다. 방금 정적 파일 중 하나에 대해 ab 테스트를 수행한 결과 다음과 같은 결과를 얻었습니다.

전송된 총량: 11203000바이트
HTML 전송량: 10861000바이트
초당 요청: 674.14[#/초] (평균)
요청당 시간: 14.834 [ms] (평균)
요청당 시간: 1.483 [ms] (모든 동시 요청에 걸쳐 평균)
전송 속도: 7375.39 [Kbytes/sec] 수신

이것은 CSS 파일이었습니다. 나는 또한 linode.com의 VPS를 사용하고 있습니다. 그들의 최근 블로그 게시물은 다음과 같습니다.일부 테스트관심을 가질 수 있는 다양한 VPS에서 수행되었습니다.

방금 살펴보았는데 구성 파일이 약간 다릅니다. 2개의 프로세스 설정, 1024개의 연결이 있고 keep_alive가 켜져 있습니다.

답변4

귀하의 테스트 매개 변수가 문제라고 생각합니다. 최대 동시성은 10이지만 각 페이지를 전달하는 데 총 ~500ms가 걸리면 초당 최대 약 20개의 요청이 표시됩니다.

ab를 사용하여 더 높은 동시성 수준으로 테스트해 보셨나요? (ab는 웹 애플리케이션의 로드 테스트를 위한 매우 단순한 도구이며 실제로는 "마이크로벤치마크"로만 간주될 수 있습니다.) 물론 다른 컴퓨터에서 벤치마킹해야 합니다. 대역폭이나 메모리가 문제인 경우에는 두 대 이상의 다른 컴퓨터에서 벤치마킹해야 합니다.

관련 정보