uwsgi + nginx + pypy 网页服务基准测试

1 投票
1 回答
1306 浏览
提问于 2025-04-18 10:48

如何对使用uwsgi、nginx和pypy部署的简单Python网络服务进行性能测试,找出最佳方法?

我该如何根据我的硬件配置来了解预期的平均结果?

我使用了ab工具:

root@# 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)

但是我不知道这些数值是否正常。对我来说,这看起来非常慢。只有10个并发连接时,46个请求每秒(rps)?

当我使用100个并发连接时,我的网络服务器崩溃了,无法响应。

我哪里出错了?

当我使用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:

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

我的硬件配置: 2GB内存,2个核心(linode 2GB)

1 个回答

1

我刚来这里,但我会尽量帮忙。你看到的数字是正常的,我觉得你并没有配置错误。10个并发连接意味着在基准测试中,有十个线程同时发出请求。你看到的每秒请求数其实是接收到的请求数量,而不是你服务器的响应速度。

要了解你服务器的速度,你应该关注“每个请求的时间”,也就是响应时间。这是一个同时连接的线程发出请求并收到完整响应所需的时间。在这种情况下,215毫秒是个不错的平均值。下面的细分数据特别有用,它显示90%的请求在216毫秒以内处理完成,这接近你的平均值,说明你服务器的响应速度相对稳定。你可以尝试增加并发进程的数量,或者每个进程发送的请求数量。这样会提高你的每秒请求数,并让你的服务器承受更大的压力。然后你就可以评估在一定数量的每秒请求下(实际流量负载)你应该期待什么样的响应时间。

希望这对你有帮助!

撰写回答