【发布时间】:2015-12-31 00:49:27
【问题描述】:
我在 debian jessie、python3.4、django 和 django REST 框架上使用 apache 和 mod_wsgi 来支持 REST Web 服务。
我目前正在进行性能测试。我的服务器是 KS-2 (http://www.kimsufi.com/fr/serveurs.xml),具有 4Gb 的 RAM 和 Atom N2800 处理器(1.8GHz,2c/4t)。我的服务器已经运行了大量的小服务,但我的平均负载不超过 0.5,而且我通常有 2Gb 的可用 RAM。我提供这些上下文信息是因为我在下面描述的性能在此硬件支持的上下文中可能是正常的。
我对 python 驱动的 Web 服务还很陌生,除了性能方面,我真的不知道该做什么。我使用了 firefox 的网络监视器来测试请求的持续时间。
我已经使用 django rest 框架的第一个示例 (http://www.django-rest-framework.org/) 建立了一个测试环境。当我转到 url http://myapi/users/?format=json 时,我必须等待大约 1600 毫秒。如果我在短时间内多次检查响应,它会下降 60 毫秒。但是,只要我等待超过 ~5 秒,平均时间就是 1600 毫秒。
我的应用程序有大约 6k 行 python,并在 INSTALLED_APPS 中包含一些 django 库(django-cors-headers、django-filter、django-guardian、django-rest-swagger)。当我在其上执行相同类型的测试(在可比较的视图上返回我的用户列表)时,我得到 6500/90 毫秒。
我的数据不需要很多资源来检索(django-debug-toolbar 显示我的 SQL 查询需要不到 10 毫秒的时间来执行)。所以我不确定幕后发生了什么,但我猜所有 .py 文件都需要定期解析或 .pyc 才能读取。如果是这种情况,是否有可能摆脱这种行为?我的意思是,在我知道我不会经常编辑文件的生产环境中。或者如果不是这样,降低第一次调用的权重。
注意:我已经阅读了 django 关于缓存的文档 (https://docs.djangoproject.com/en/1.9/topics/cache/),但在我的应用程序中,我的数据(似乎不需要很多资源)容易经常更改。我猜缓存对应用程序的源代码没有帮助,我错了吗?
谢谢
【问题讨论】:
-
服务器不会“定期”解析文件;每个进程只需要加载一次。
标签: python django performance django-rest-framework django-wsgi