gpt4 book ai didi

python - Django apache 与内置开发服务器的显着开销

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:54 24 4
gpt4 key购买 nike

我正在即将成为生产环境的 Django/Tastypie 上运行,但是我注意到使用 Apache 与使用内置开发服务器相比开销很大。 Apache 慢得多。

以下是使用 ab 的非科学带宽测试:

Apache :

$ ab -n 100 -c 50 https://www.mydomain.com/api/v1/clock/?format=json
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 www.mydomain.com (be patient).....done


Server Software: Apache/2.2.22
Server Hostname: www.mydomain.com
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,AES256-SHA,2048,256

Document Path: /api/v1/clock/?format=json
Document Length: 295 bytes

Concurrency Level: 50
Time taken for tests: 1.313 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 49800 bytes
HTML transferred: 29500 bytes
Requests per second: 76.15 [#/sec] (mean)
Time per request: 656.634 [ms] (mean)
Time per request: 13.133 [ms] (mean, across all concurrent requests)
Transfer rate: 37.03 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 15 283 162.5 282 590
Processing: 55 324 148.4 306 622
Waiting: 55 319 150.2 305 621
Total: 110 607 138.8 619 712

Percentage of the requests served within a certain time (ms)
50% 619
66% 691
75% 692
80% 701
90% 709
95% 709
98% 711
99% 712
100% 712 (longest request)

开发服务器(manage.py runserver):

$ ab -n 100 -c 50 http://127.0.0.1:8000/api/v1/clock/?format=json
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 127.0.0.1 (be patient).....done


Server Software: WSGIServer/0.1
Server Hostname: 127.0.0.1
Server Port: 8000

Document Path: /api/v1/clock/?format=json
Document Length: 381 bytes

Concurrency Level: 50
Time taken for tests: 0.701 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 54500 bytes
HTML transferred: 38100 bytes
Requests per second: 142.59 [#/sec] (mean)
Time per request: 350.656 [ms] (mean)
Time per request: 7.013 [ms] (mean, across all concurrent requests)
Transfer rate: 75.89 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.9 0 7
Processing: 43 73 47.0 63 365
Waiting: 31 70 47.0 61 365
Total: 50 74 47.0 64 365

Percentage of the requests served within a certain time (ms)
50% 64
66% 67
75% 69
80% 71
90% 77
95% 101
98% 276
99% 365
100% 365 (longest request)

如您所见,在较小的负载下,开发服务器的速度大约快 10 倍。即使在更高的负载下,它处理的请求也是原来的两倍。

我已经对 Apache 进行了基本修改以尝试解决这个问题,这似乎有点帮助,但是还有什么我遗漏的吗?我请求的“时钟”是一个非常基本的脚本,带有一个直接的数据库调用,因此连接或任何事情都没有什么奇怪的。它使用 Tastypie,因此输出为纯文本/json。似乎有些不对劲,因为开发服务器的请求速度要快得多。

这是我的 Apache 设置。它是在守护进程模式下在 worker MPM 上设置的:

KeepAlive Off

<IfModule mpm_worker_module>
StartServers 25
MinSpareThreads 25
MaxSpareThreads 300
ThreadLimit 64
ThreadsPerChild 25
MaxClients 300
MaxRequestsPerChild 0
</IfModule>

WSGIRestrictEmbedded On

虚拟主机添加:

    WSGIDaemonProcess www.mydomain.com processes=4 threads=1
WSGIProcessGroup www.mydomain.com
WSGIScriptAlias / /var/www/domain/wsgi.py process-group=www.mydomain.com application-group=%{GLOBAL}
WSGIPassAuthorization On

Python/Tastypie 设置:

Debug = False
USE_I18N = False
USE_X_FORWARDED_HOST = True

它在负载均衡的 AWS 中型实例上运行,并且该服务器不提供任何静态文件,例如 images/css/js。我尝试在 IOPS/x-large 实例上提高它,但没有任何变化。数据库位于 Amazon RDS 上。但是在运行开发服务器时所有这些都是一样的,这告诉我托管环境不是问题。

任何帮助将不胜感激!!我现在真的不太担心高负载。这是一个基于 JSON 的 API,因此所有请求都是文本并且非常小。我最关心的是大量小请求的响应时间。

谢谢!标记

编辑:

我在 apache 上做了一个新的 ab 测试,将 dns 映射到本地主机。这与将其映射到 127.0.0.1 基本相同。这提供了更好的结果:

$ ab -n 100 -c 50 http://www.mydomain.com/api/v1/clock/?format=json
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 www.mydomain.com (be patient).....done


Server Software: Apache/2.2.22
Server Hostname: www.mydomain.com
Server Port: 80

Document Path: /api/v1/clock/?format=json
Document Length: 381 bytes

Concurrency Level: 50
Time taken for tests: 0.666 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 55900 bytes
HTML transferred: 38100 bytes
Requests per second: 150.22 [#/sec] (mean)
Time per request: 332.841 [ms] (mean)
Time per request: 6.657 [ms] (mean, across all concurrent requests)
Transfer rate: 82.01 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 3.0 2 6
Processing: 38 258 92.6 308 357
Waiting: 33 254 92.9 303 354
Total: 44 261 90.6 310 363

Percentage of the requests served within a certain time (ms)
50% 310
66% 321
75% 323
80% 327
90% 336
95% 344
98% 362
99% 363
100% 363 (longest request)

所以最初的测试是通过外部负载均衡器进行的。这些数字还可以,但是前 50% 的测试平均响应时间仍为 310 毫秒。这些似乎可以与我的实时外部测试相媲美。然而,django 开发服务器前 50% 的测试平均耗时 64 毫秒,尽管 apache 服务器的扩展性要好得多。是否有任何建议来调整 apache,以便它可以更快地进入为初始请求提供服务的范围?我不介意使用额外的服务器进行水平扩展,但请求时间对我来说意味着一切。

最佳答案

您是否考虑过使用 NGINX?它让我们在使用 uwsgi 运行时有显着的性能提升。

关于python - Django apache 与内置开发服务器的显着开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17914360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com