
我在 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 應用程式的工具,並且只能真正被視為「微基準測試」)。當然,您還應該在另一台機器上進行基準測試,如果頻寬或記憶體有問題的話,可能不只一台其他機器。