2014-06-23 62 views
1

基准测试使用uwsgi nginx和pypy部署的简单python web服务的最佳方式是什么?uwsgi + nginx + pypy web服务基准测试

如何根据我的硬件规格学习预期的平均结果?

我用AB:

[email protected]# ab -kc 10 -n 1000 http://domain:8080/ 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking domain (be patient) 
Completed 100 requests 
Completed 200 requests 
Completed 300 requests 
Completed 400 requests 
Completed 500 requests 
Completed 600 requests 
Completed 700 requests 
Completed 800 requests 
Completed 900 requests 
Completed 1000 requests 
Finished 1000 requests 


Server Software:   
Server Hostname:  domain 
Server Port:   8080 

Document Path:  /
Document Length:  11 bytes 

Concurrency Level:  10 
Time taken for tests: 21.567 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Keep-Alive requests: 0 
Total transferred:  55000 bytes 
HTML transferred:  11000 bytes 
Requests per second: 46.37 [#/sec] (mean) 
Time per request:  215.673 [ms] (mean) 
Time per request:  21.567 [ms] (mean, across all concurrent requests) 
Transfer rate:   2.49 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  103 109 63.1 104 1107 
Processing: 103 105 1.6 105  109 
Waiting:  103 105 1.6 105  109 
Total:  206 214 63.2 209 1215 

Percentage of the requests served within a certain time (ms) 
    50% 209 
    66% 210 
    75% 210 
    80% 215 
    90% 216 
    95% 216 
    98% 216 
    99% 216 
100% 1215 (longest request) 

但我不知道这些值是否正常与否。这对我来说似乎非常缓慢。 46 rps只有10个并发连接?

当我使用100个并发连接,我的Web服务器崩溃和不响应

哪儿我去错了吗?

当我用1000并发连接时,ab不能完成测试。

Completed 1000 requests 
Completed 2000 requests 
Completed 3000 requests 
Completed 4000 requests 
Completed 5000 requests 
Completed 6000 requests 
Completed 7000 requests 
Completed 8000 requests 
Completed 9000 requests 
apr_socket_recv: Connection reset by peer (104) 
Total of 9894 requests completed 

开始uwsgi在virtal ENV:

uwsgi --http :8080 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats :9191 

我的HW: 2GB内存,2个核心(2GB的Linode)

回答

1

新在这里,但我会尽力帮助。你看到的数字是正常的,我不认为你有任何必要的错误配置。 10个并发连接意味着基准测试有十个并发线程同时发出请求。您看到的请求/秒速率实际上是正在收到的请求数量,而不是服务器响应的速率。

要理解服务器的速度,您应该查看“每个请求的时间”,即响应时间。这是一个同时连接的线程发出请求并接收完整响应所需的时间。在这种情况下,215ms是一个很好的平均值。下面的细节特别有用,因为它表明90%的请求在216ms以下处理,接近您的平均水平,并显示服务器响应速度相当稳定。尝试增加并发进程的数量或每个进程发送的请求数量。这会增加你的请求/秒的价值,并且会让你的服务器变得更难。然后,您可以测量每秒钟的特定请求数(实时流量负载)应达到的响应时间。

希望这会有所帮助!

+0

当我1000个并发连接使用,AB无法完成测试: 完成9000个请求 apr_socket_recv:连接被对方​​复位(104) 9894个请求总计完成 – MatandDie

+0

@MatandDie,这个问题似乎更直接关系到uWSGI与nginx进行通信的方式。你有没有尝试增加你的缓冲区大小?如果您接收到大量请求或许多请求,则可以使用'buffer-size = 65535'将uWSGI中的缓冲区大小增加到64k。 –

+0

与缓冲区大小参数相同的结果。顺便说一句,非常感谢:) – MatandDie