Python django tastypie性能调整

Python django tastypie性能调整,python,django,performance,nginx,tastypie,Python,Django,Performance,Nginx,Tastypie,我有一个网站使用django tastypie通过API向移动应用程序提供数据。在对我们的API进行第一次apache基准测试时,我注意到性能不如我预期的好(不得不承认,我没有一个坚实的基础来支持我的预期)。我的服务器设置如下:2.4GHZ双核CPU,2560M内存,ubuntu12.04。我将nginx与uwsgi一起使用,将uwsgi设置为使用4个worker,并将nginx与4个worker\u进程一起使用 这是我从API端点得到的ab结果。该查询跨越7个表,包含30多个查询和一组嵌套资源

我有一个网站使用django tastypie通过API向移动应用程序提供数据。在对我们的API进行第一次apache基准测试时,我注意到性能不如我预期的好(不得不承认,我没有一个坚实的基础来支持我的预期)。我的服务器设置如下:2.4GHZ双核CPU,2560M内存,ubuntu12.04。我将nginx与uwsgi一起使用,将uwsgi设置为使用4个worker,并将nginx与4个worker\u进程一起使用

这是我从API端点得到的ab结果。该查询跨越7个表,包含30多个查询和一组嵌套资源。当我分析SQL查询时,其中只有3个需要超过1ms(分别为1ms、1ms和2ms)

ab-n100-c8-H“接受编码:gzip”http://mysite"
这是ApacheBench,版本2.3
版权1996亚当·特维斯,宙斯科技有限公司,http://www.zeustech.net/
授权给Apache软件基金会,http://www.apache.org/
基准测试lvxingjia.cc(耐心)…完成
服务器软件:nginx/1.4.1
服务器主机名:mysite
服务器端口:80
文档路径:mysite
文件长度:10807字节
并发级别:8
测试时间:19.146秒
完成申请:100
失败的请求:0
写入错误:0
传输总量:1117500字节
传输的HTML:1080700字节
每秒请求数:5.22[#秒](平均值)
每次请求的时间:1531.720[ms](平均值)
每个请求的时间:191.465[ms](所有并发请求的平均时间)
传输速率:接收到57.00[千字节/秒]
连接时间(毫秒)
最小平均值[+/-sd]最大中值
连接:16 37 56.5 23 485
处理:7751455238.115021901
等候电话:7651443237.814881889
总数:794149235.71551920
在特定时间内服务的请求百分比(毫秒)
50%   1555
66%   1626
75%   1653
80%   1694
90%   1758
95%   1783
98%   1903
99%   1920
100%1920(最长请求)
我对性能调整还很陌生,如果它不是什么可怕的事情,我甚至不想费心去做,因为我们现在没有太多的流量

所以我的第一个问题是:考虑到我的服务器资源和请求的复杂性,这个数字合理吗

我的第二个问题是,如果这个数字不可接受,我应该在哪些方面寻求改进?数据库查询,行分析django?我得到了行分析结果,实际上看到了deepcopy的一个tastypie问题,其他用户也报告了这个问题,monky补丁确实将我的性能提高了约30%

我在这里也看到了一篇很好的帖子:,但考虑到我的服务器/请求场景,我希望对我的情况有一些看法


谢谢

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

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


将您的SQL server移动到另一台计算机也可能有所帮助。

在哪里进行gzip压缩?在nginx还是django?gzip压缩设置是什么?gzip是在nginx中完成的。我将gzip_http_version设置为1.0,以便ab请求可以获取gzip的json数据。我可以通过文档长度验证gzip是否正常工作。但实际上它并没有改变性能那么多,因为我认为瓶颈不是在带宽上。实际上我问过,因为当有人设置<代码> GZIPHyPraceLeals大于1时,这是非常常见的,因此性能会受到影响。如果您正在访问返回元素列表的端点,请考虑缓存响应,或者加速序列化,因为tastypie可能会在数据序列化的长列表上打嗝(即使db query非常快)。@kroolik:缓存不是为了负载测试吗?你有没有关于加速序列化的例子,或者是什么情况可能会导致速度变慢的例子?缓存是计算性能的固有部分,从一级CPU缓存到memcache/redis/varnish等。通过缓存,我不一定意味着API可能提供的最终HTML/json。缓存中间数据库请求也会提高性能。就一般方向而言,tastypie通常会对嵌套资源进行过火的查询,因为它们会进行嵌套并提取各种内容。您可以最小化这一点,也可以最大化缓存以提高性能。这将是我开始挖掘的第一个地方。
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)