我有一个使用django-tastypie的网站通过API向移动应用提供数据。在对我们的API进行第一次apache-benchmark测试时,我注意到性能不如我预期的那么好(不得不承认我没有坚实的基础来支持我的期望)。我的服务器设置如下:2.4GHZ 2核CPU,2560M内存,ubuntu12.04。我使用nginx和uwsgi,设置uwsgi使用4个worker,nginx也使用4个worker_processes。
这是来自API端点的ab结果。该查询跨越7个表,具有30多个查询,并具有一堆嵌套资源。当我分析SQL查询时,其中只有3个占用超过1毫秒(分别为1毫秒,1毫秒和2毫秒)。
ab -n 100 -c 8 -H 'Accept-Encoding: gzip' "http://mysite"
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 lvxingjia.cc (be patient).....done
Server Software: nginx/1.4.1
Server Hostname: mysite
Server Port: 80
Document Path: mysite
Document Length: 10807 bytes
Concurrency Level: 8
Time taken for tests: 19.146 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 1117500 bytes
HTML transferred: 1080700 bytes
Requests per second: 5.22 [#/sec] (mean)
Time per request: 1531.720 [ms] (mean)
Time per request: 191.465 [ms] (mean, across all concurrent requests)
Transfer rate: 57.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 16 37 56.5 23 485
Processing: 775 1455 238.1 1502 1901
Waiting: 765 1443 237.8 1488 1889
Total: 794 1492 235.7 1555 1920
Percentage of the requests served within a certain time (ms)
50% 1555
66% 1626
75% 1653
80% 1694
90% 1758
95% 1783
98% 1903
99% 1920
100% 1920 (longest request)
我对性能调整很陌生,如果不是因为我们现在没有太多流量而不是很糟糕,我甚至不想这样做。
所以我的第一个问题是:鉴于我的服务器资源和请求的复杂性,数字是否合理?
我的第二个问题是,如果这个数字是不可接受的,我应该考虑哪个方面来改善?数据库查询,行剖析django?我得到了线条剖析结果,实际上看到了深度复制的一个tastypie问题,其他用户也报告过,而monky-patch确实提高了我的性能约30%。
我在这里也看到一篇很棒的帖子:Bad Django / uwsgi performance,但我希望根据我的服务器/请求场景对我的情况有一些看法。
谢谢!
答案 0 :(得分:0)
您是否访问了完全相同的查询网址100次?如果是这样,缓存会创造奇迹。
您看到的性能很差,因为所有请求都排队并按顺序处理。能够同时处理您的请求会有所帮助。您需要更多CPU核心来处理您的Web请求。
将SQL服务器移动到另一台计算机也可能有所帮助。