减少 django 上的用户 CPU 时间

Posted

技术标签:

【中文标题】减少 django 上的用户 CPU 时间【英文标题】:Reduce User CPU Time on django 【发布时间】:2014-12-22 17:19:56 【问题描述】:

我实际上在一个 Django 网站上工作,使用 django 调试工具栏,在一个数字海洋小水滴上。这一切都适用于 Postgresql、Django、gunicorn 和 nginx

困扰我的是渲染时间约为 2.5 秒,其中大部分是关于 用户 CPU 时间

Resource         Value
User CPU time    2271.395 msec
System CPU time  86.142 msec
Total CPU time   2357.537 msec
Elapsed time     2483.655 msec
Context switches 8 voluntary, 469 involuntary

Browser Chronology
domainLookup 0 (+0)
connect 0 (+0)
request 3 (+-1419272753107)
response 5653 (+-1419272758757)
domLoading 5669 (+-1419272758773)
domInteractive -1419272753104
domContentLoadedEvent -1419272753104 (+0)
loadEvent -1419272753104 (+0)

所以,我想提高速度,我设置了一个快速的数字海洋水滴(最大的一个),时间看起来一样。我知道最大的水滴主要意味着更多的 CPU 核心,因此,更多的并发请求。

但是问题是那两个:

    与系统 CPU 时间相反的用户 CPU 时间是多少? 如何减少用户 CPU 时间?

【问题讨论】:

所以你启用了调试?你能扩大实际花费的时间吗? 嗯,我想要,但我不知道怎么做。我的意思是,该网站正在处理 geodjango 的一些请求,但它们只需要 140 毫秒。 (django-debug-toolbar 中的 SQL 选项卡)。而且我不知道如何找到用户 CPU 时间花费在哪里(我什至不确定它是在服务器端而不是在客户端)但基本上,我的网站在数据库中搜索之后发生了什么“艺术事件”实际的日期时间。然后使用 AJAX 和 navigator.geolocation 搜索离用户最近的艺术事件。 在调试工具栏上单击时间时,它会告诉您该时间花费在哪里,您还应该查找在查询中花费的时间(即使这通常不是问题),并尝试禁用某些应用程序,例如django-compressor(在某些情况下会导致这个问题) @DRC 我在 Time 下添加了我可以获取的所有信息。但是,对我来说,我所理解的只是:浏览器等待很长时间,因为用户 CPU 时间很长。而且我不知道用户 CPU 时间是什么。是关于 python 生成页面内容吗? nginx 丢失在硬盘中?服务器与用户有问题?我的网站没有优化? 是每个请求而不是第一个请求吗?您是否尝试过禁用调试?还可以尝试查看profiling panel of the debug toolbar 的内容,也许您还应该添加您的 wsgi (gnunicorn) 配置。 【参考方案1】:

我有几乎相同的场景(Digital Ocean、Postgres、uWSGI 上的小水滴...),然后我想知道为什么 CPU 时间在一个简单页面上约为 700 毫秒,而在更复杂的页面上约为 3 秒,如图所示在 Django 调试工具栏上。但后来我发现调试工具栏本身使用了大部分时间。当我关闭它并放置另一个分析器(http://djangosnippets.org/snippets/727/ 上的中间件)时,我看到这些时间下降到 ~ 200 毫秒和 ~ 800 毫秒。

所以回答你的问题:

    在Django Debug Toolbar: understanding the time panel上查看 Chris Pratt 的回答

    没有减少 CPU 时间的独特方法。您必须分析您的配置文件输出以发现 CPU 的使用位置。

我从 Yugal Jindle 的回答中得到了配置文件中间件: How to profile django application with respect to execution time?。使用 HotShot 检查其他分析器选项。

【讨论】:

我转发这个。设置完所有内容后,我第一次运行本地服务器时,CPU 的平均时间接近 3 秒。通过在 settings.py 中注释掉中间件中的第一行以及已安装应用程序中的 debug_toolbar 来禁用 debug_toolbar - 速度提高了 5 倍。这实际上是 David Winterbottom 在 2013 年的一封电子邮件中提到的:groups.google.com/forum/#!topic/django-oscar/phpAfwNbtN4

以上是关于减少 django 上的用户 CPU 时间的主要内容,如果未能解决你的问题,请参考以下文章

Django上的多个站点

Django 上的用户角色模式

在 QML 中旋转图像时减少 CPU 使用率

如何根据 Graphene/Django 上的用户类型限制模型上的字段访问?

Cassandra 用户定义类型上的 Django Queryset 引发类型错误

web框架之Django