【问题标题】:Why is my django development server running locally so much faster then running the same development server on Heroku?为什么我的 django 开发服务器在本地运行比在 Heroku 上运行相同的开发服务器要快得多?
【发布时间】:2013-01-19 02:24:44
【问题描述】:

我有一个使用 Django 的网站,当输入它时,它会从 postgresql 数据库中的单个表中加载大约 100 行。

本地开发服务器:页面加载时间 300 毫秒
Heroku 上的生产服务器:页面加载时间 1.34 秒(约慢 4.13 倍) (集成gunicorn 并在非空转测功机上从aws S3 加载我的静态文件)

什么?

请注意,我的生产服务器上还没有流量,我正在使用 1 台测功机。

当我在 Heroku 上为我的生产服务器使用与我的开发服务器完全相同的设置时,它甚至更慢。 这样的加载时间差异正常吗?

我的电脑规格

Memory: 3.7 GiB  
Processor: Intel® Core™ i5 CPU M 520 @ 2.40GHz × 4   
OS type: 64-bit 

【问题讨论】:

  • 你发现这发生在“第一次”命中吗?
  • 在第一次加载新浏览器会话的页面时是的。那么后续的“命中”呢,这是意料之中的吗? (我还没有集成任何缓存)
  • 我不使用 Heroku,但是从查看 dynos 的页面来看,dynos 似乎是 EC2 微型实例?我猜测这是基于为每个测功机保留 512 MB 的事实。如果是这种情况,那将解释您在速度上的巨大差异,因为微型实例受到了非常严重的限制。您可以通过运行top 并查看第三行的st 值来看到这一点。如果它们没有映射到微实例,那么请忽略我所说的。
  • 我们在部署 django 或 rails 应用程序时遇到了同样的问题,第一次点击会非常慢,但之后它就可以正常工作了。这些都是可以解释发生了什么的答案。 serverfault.com/questions/275035/…stackoverflow.com/questions/2606190/…
  • 从您的顶部输出中,st 的值为 0.1%(请参阅最后一行的最后一个条目)。看起来您毕竟没有在微型实例上运行,其中st 的值可能高达 90%。恐怕因为我不使用 Heroku,所以我没有什么有用的补充。

标签: python django heroku


【解决方案1】:

如果我的电脑大约有3.9 Gb ram,而根据this source,一台测功机确实有512Mb ram,这意味着我的电脑有大约7.8 倍以上的内存。根据this source 的说法,ram 对于提高数据库查询的性能非常重要。因为我做了很多查询,所以时差对我来说很有意义。

在我的 heroku 应用程序目录中运行 top 出人意料地返回 35 Gb ram。但是根据 this source 在 Heroku 中运行 top 是从您的应用运行的不同测功机(一次性测功机)执行的。

我现在唯一不明白的是为什么one-off dyno 有这么多内存。

只要没有人给出更好的答案,我就会一直检查这个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2015-02-23
    • 2018-07-23
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多