然后指向wrk(使用null文件null.html)
wrk --timeout 10 -t 2 -c 100 -d20s http://127.0.0.1:8080/null.html Running 20s test @ http://127.0.0.1:8080/null.html 2 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 11.65s 5.10s 13.89s 83.91% Req/Sec 3.33k 3.65k 12.33k 75.19% 125067 requests in 20.01s, 32.08MB read Socket errors: connect 0, read 37, write 0, timeout 49 Requests/sec: 6251.46 Transfer/sec: 1.60MB
..性能非常差,实际上似乎存在某种巨大的延迟问题.
在测试期间,gwan有200%的忙碌,而wrk有67%的忙碌.
指向nginx,wrk忙碌200%,nginx忙碌45%:
wrk --timeout 10 -t 2 -c 100 -d20s http://127.0.0.1/null.html Thread Stats Avg Stdev Max +/- Stdev Latency 371.81us 134.05us 24.04ms 91.26% Req/Sec 72.75k 7.38k 109.22k 68.21% 2740883 requests in 20.00s, 540.95MB read Requests/sec: 137046.70 Transfer/sec: 27.05MB
在nginx处指向weighttpd可以获得更快的结果:
/usr/local/bin/weighttp -k -n 2000000 -c 500 -t 3 http://127.0.0.1/null.html weighttp - a lightweight and simple webserver benchmarking tool starting benchmark... spawning thread #1: 167 concurrent requests, 666667 total requests spawning thread #2: 167 concurrent requests, 666667 total requests spawning thread #3: 166 concurrent requests, 666666 total requests progress: 9% done progress: 19% done progress: 29% done progress: 39% done progress: 49% done progress: 59% done progress: 69% done progress: 79% done progress: 89% done progress: 99% done finished in 7 sec, 13 millisec and 293 microsec, 285172 req/s, 57633 kbyte/s requests: 2000000 total, 2000000 started, 2000000 done, 2000000 succeeded, 0 failed, 0 errored status codes: 2000000 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 413901205 bytes total, 413901205 bytes http, 0 bytes data
服务器是KVM下的虚拟8核专用服务器(裸机)
我从哪里开始寻找gwan在这个平台上遇到的问题?
我在同一个操作系统上测试过lighttpd,nginx和node.js,结果都是人们所期望的.服务器已通过扩展短暂端口,增加的ulimits,调整时间等待回收等常规方式进行调整.
11月7日更新:我们已经修复了G-WAN v4.11.7中的空文件问题,G-WAN现在也比这个游戏的Nginx快两倍(禁用www缓存).最新版本的G-WAN比Nginx更快,包含小型和大型文件,默认情况下禁用G-WAN缓存,以便人们更容易将G-WAN与Nginx等其他服务器进行比较.
Nginx有一些缓存功能(可以跳过stat()调用和基于memcached的模块)但两者都必须比G-WAN的本地缓存慢得多.
对于某些应用程序(如CDN),也需要禁用缓存.其他应用程序(如AJAX应用程序)极大地受益于G-WAN缓存功能,因此可以随意重新启用缓存,即使是基于每个请求.
希望这澄清了这个问题.
“reproducing the performance claims”
首先,标题具有误导性,因为上面记录不良的*测试不使用相同的工具,也不使用G-WAN测试提取的HTTP资源.
[*]你的nginx.conf文件在哪里?这两台服务器的HTTP响应头是什么?什么是你的“裸机”8核CPU?
G-WAN测试基于ab.c,这是由G-WAN团队编写的weighttp(由Lighttpd服务器团队制作的测试工具)编写的包装器,因为ab.c公开的信息是much more informative.
其次,测试文件“null.html”是……一个空文件.
我们不会浪费时间讨论这种测试的不相关性(您的网站提供多少空的HTML文件?)但这很可能是观察到“性能不佳”的原因.
没有创建G-WAN来提供空文件(我们从未尝试过,也没有被要求这样做).但我们肯定会添加此功能以避免此类测试造成的混淆.
由于您要“检查声明”,我建议您使用100.bin文件(具有不可压缩MIME类型的100字节文件)使用weighttp(测试中最快的HTTP加载工具):此处不涉及Gzip ).
使用非空文件Nginx is massively slower than G-WAN,即使在独立测试中也是如此.
到目前为止我们还不知道wrk,但它似乎是Nginx team制作的工具:
“wrk是专门为了尝试推动nginx达到它的极限而编写的,
并且在它的第一轮测试中被推高到0.5Mr / s.“
更新(一天后)
既然您没有再发布任何数据,我们就这样做了:
wrk weighttp ----------------------- ----------------------- Web Server 0.html RPS 100.html RPS 0.html RPS 100.html RPS ---------- ---------- ------------ ---------- ------------ G-WAN 80,783.03 649,367.11 175,515 717,813 Nginx 198,800.93 179,939.40 184,046 199,075
就像你的测试一样,我们可以看到wrk比weighttp略慢.
我们还可以看到,使用两种HTTP加载工具,G-WAN比Nginx更快.
以下是详细结果:
G-WAN
./wrk -c300 -d3 -t6 "http://127.0.0.1:8080/0.html" Running 3s test @ http://127.0.0.1:8080/0.html 6 threads and 300 connections Thread Stats Avg Stdev Max +/- Stdev Latency 3.87ms 5.30ms 80.97ms 99.53% Req/Sec 14.73k 1.60k 16.33k 94.67% 248455 requests in 3.08s, 55.68MB read Socket errors: connect 0, read 248448, write 0, timeout 0 Requests/sec: 80783.03 Transfer/sec: 18.10MB ./wrk -c300 -d3 -t6 "http://127.0.0.1:8080/100.html" Running 3s test @ http://127.0.0.1:8080/100.html 6 threads and 300 connections Thread Stats Avg Stdev Max +/- Stdev Latency 263.15us 381.82us 16.50ms 99.60% Req/Sec 115.55k 14.38k 154.55k 82.70% 1946700 requests in 3.00s, 655.35MB read Requests/sec: 649367.11 Transfer/sec: 218.61MB weighttp -kn300000 -c300 -t6 "http://127.0.0.1:8080/0.html" progress: 100% done finished in 1 sec, 709 millisec and 252 microsec, 175515 req/s, 20159 kbyte/s requests: 300000 total, 300000 started, 300000 done, 150147 succeeded, 149853 failed, 0 errored status codes: 150147 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 35284545 bytes total, 35284545 bytes http, 0 bytes data weighttp -kn300000 -c300 -t6 "http://127.0.0.1:8080/100.html" progress: 100% done finished in 0 sec, 417 millisec and 935 microsec, 717813 req/s, 247449 kbyte/s requests: 300000 total, 300000 started, 300000 done, 300000 succeeded, 0 failed, 0 errored status codes: 300000 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 105900000 bytes total, 75900000 bytes http, 30000000 bytes data
Nginx的
./wrk -c300 -d3 -t6 "http://127.0.0.1:8080/100.html" Running 3s test @ http://127.0.0.1:8080/100.html 6 threads and 300 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.54ms 1.16ms 11.67ms 72.91% Req/Sec 34.47k 6.02k 56.31k 70.65% 539743 requests in 3.00s, 180.42MB read Requests/sec: 179939.40 Transfer/sec: 60.15MB ./wrk -c300 -d3 -t6 "http://127.0.0.1:8080/0.html" Running 3s test @ http://127.0.0.1:8080/0.html 6 threads and 300 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.44ms 1.15ms 9.37ms 75.93% Req/Sec 38.16k 8.57k 62.20k 69.98% 596070 requests in 3.00s, 140.69MB read Requests/sec: 198800.93 Transfer/sec: 46.92MB weighttp -kn300000 -c300 -t6 "http://127.0.0.1:8080/0.html" progress: 100% done finished in 1 sec, 630 millisec and 19 microsec, 184046 req/s, 44484 kbyte/s requests: 300000 total, 300000 started, 300000 done, 300000 succeeded, 0 failed, 0 errored status codes: 300000 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 74250375 bytes total, 74250375 bytes http, 0 bytes data weighttp -kn300000 -c300 -t6 "http://127.0.0.1:8080/100.html" progress: 100% done finished in 1 sec, 506 millisec and 968 microsec, 199075 req/s, 68140 kbyte/s requests: 300000 total, 300000 started, 300000 done, 300000 succeeded, 0 failed, 0 errored status codes: 300000 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 105150400 bytes total, 75150400 bytes http, 30000000 bytes data
Nginx配置文件试图匹配G-WAN的行为
# ./configure --without-http_charset_module --without-http_ssi_module # --without-http_userid_module --without-http_rewrite_module # --without-http_limit_zone_module --without-http_limit_req_module user www-data; worker_processes 6; worker_rlimit_nofile 500000; pid /var/run/nginx.pid; events { # tried other values up to 100000 without better results worker_connections 4096; # multi_accept on; seems to be slower multi_accept off; use epoll; } http { charset utf-8; # HTTP "Content-Type:" header sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 10; keepalive_requests 10; # 1000+ slows-down nginx enormously... types_hash_max_size 2048; include /usr/local/nginx/conf/mime.types; default_type application/octet-stream; gzip off; # adjust for your tests gzip_min_length 500; gzip_vary on; # HTTP "Vary: Accept-Encoding" header gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; # cache metadata (file time, size, existence, etc) to prevent syscalls # this does not cache file contents. It should helps in benchmarks where # a limited number of files is accessed more often than others (this is # our case as we serve one single file fetched repeatedly) # THIS IS ACTUALY SLOWING-DOWN THE TEST... # # open_file_cache max=1000 inactive=20s; # open_file_cache_errors on; # open_file_cache_min_uses 2; # open_file_cache_valid 300s; server { listen 127.0.0.1:8080; access_log off; # only log critical errors #error_log /usr/local/nginx/logs/error.log crit; error_log /dev/null crit; location / { root /usr/local/nginx/html; index index.html; } location = /nop.gif { empty_gif; } location /imgs { autoindex on; } } }
欢迎提出意见 – 特别是来自Nginx专家 – 根据这一完整记录的测试进行讨论.