Nginx 提供靜態檔案的速度太慢

Nginx 提供靜態檔案的速度太慢

我在 Stack Overflow 上問過這個問題,但也許這更像是 SF 工作人員的問題。

於是就有了很多這樣的文章這個最近,讚揚了 Django Static Generator 與輕型前端 Web 伺服器結合使用時的優點。這對我來說很有意義。

然而,我得到的結果與其他人報告的結果完全不同——每秒數千個請求——而且我不知道為什麼會這樣。

我正準備重新設計我的報紙網站。我現在已經在測試伺服器上使用靜態生成器得到了它。當我在特定的靜態頁面上運行 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在伺服器上觀察,我可以看到它根本沒有攻擊 Apache 或資料庫伺服器。事實上,它是為快取頁面提供服務的。 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/

它可能會更快,但您在 VPS 上與其他人共用 CPU 和磁碟 I/O。

答案3

我必須同意gekkz的觀點,它可能是你的VPS。我剛剛對我的一個靜態文件進行了 ab 測試並獲得:

傳輸總量:11203000 位元組
HTML 傳輸:10861000 位元組
每秒請求數:674.14[#/sec](平均值)
每個請求的時間:14.834 [ms](平均值)
每個請求的時間:1.483 [ms](所有並發請求的平均值)
傳輸速率:接收到7375.39 [Kbytes/ sec]

這是一個 CSS 檔案。我也在使用 linode.com 的 VPS。他們最近的一篇部落格文章顯示一些測試在可能感興趣的各種 VPS 上完成。

我只是看了看,我的設定檔只有一點點不同。我有 2 個進程設置,1024 個連接,並且我已打開 keep_alive。

答案4

我認為你的測試參數是問題所在。最大並發數為 10,但每個頁面總共需要約 500 毫秒才能交付,因此您每秒最多會看到大約 20 個請求。

您是否使用 ab 測試過更高的並發等級? (請注意,ab 是一個非常簡單的用於負載測試 Web 應用程式的工具,並且只能真正被視為「微基準測試」)。當然,您還應該在另一台機器上進行基準測試,如果頻寬或記憶體有問題的話,可能不只一台其他機器。

相關內容