django tastypie性能调整

时间:2013-11-11 14:51:41

标签: python django performance nginx tastypie

我有一个使用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,但我希望根据我的服务器/请求场景对我的情况有一些看法。

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否访问了完全相同的查询网址100次?如果是这样,缓存会创造奇迹。

您看到的性能很差,因为所有请求都排队并按顺序处理。能够同时处理您的请求会有所帮助。您需要更多CPU核心来处理您的Web请求。

将SQL服务器移动到另一台计算机也可能有所帮助。