2

I am currently trying to understand why some of my requests in my Python Heroku app take >30 seconds. Even simple requests which do absolutely nothing.

One of the things I've done is look into the load average on my dynos. I did three things:

1) Look at the Heroku logs. Once in a while, it will print the load. Here are examples:

Mar 16 11:44:50 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 heroku[web.2] Dyno load average (1m): 11.900

Mar 16 11:45:11 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 heroku[web.2] Dyno load average (1m): 8.386

Mar 16 11:45:32 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 heroku[web.2] Dyno load average (1m): 6.798

Mar 16 11:45:53 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 heroku[web.2] Dyno load average (1m): 8.031

2) Run "heroku run uptime" several times, each time hitting a different machine (verified by running "hostname"). Here is sample output from just now:

13:22:09 up 3 days, 13:57, 0 users, load average: 15.33, 20.55, 22.51

3) Measure the load average on the machines on which my dynos live by using psutil to send metrics to graphite. The graphs confirm numbers of anywhere between 5 and 20.

I am not sure whether this explains simple requests taking very long or not, but can anyone say why the load average numbers on Heroku are so high?

4

2 回答 2

1

Heroku 将主机子虚拟化为您通过 LXC 使用的来宾“Dyno”。当您运行“正常运行时间”时,您看到的是整个主机的正常运行时间而不是您的容器,并且正如@jon-mountjoy 所指出的,当您执行此操作时,您将获得一个新的 LXC 容器,而不是您正在运行的 Dynos 之一。

Heroku 的 dyno 负载计算也不同于传统的 UNIX/LINUX 负载计算。

Heroku 平均负载反映了就绪队列(即等待处理)中的 CPU 任务数。dyno 管理器大约每 20 秒对每个 dyno 的可运行任务进行计数。使用前 30 分钟的可运行任务计数计算指数衰减移动平均值,其中周期为 1、5 或 15 分钟(以秒为单位),count_of_runnable_tasks 是队列中任务数的条目在给定的时间点,avg 是上次迭代计算的指数负载平均值

Heroku 的平均负载与 Linux 之间的区别在于,Linux 还包括处于不间断睡眠状态的进程(通常等待磁盘活动),如果许多进程由于繁忙或停滞的 I/O 而在 I/O 中保持阻塞,这可能会导致明显不同的结果。 O系统。

在 CPU 绑定的 Dyno 上,我认为这不会有太大的不同。在 IO 绑定的 Dyno 上,Heroku 报告的负载平均值将远低于如果您可以在 LXC 容器上获得 TRUE 正常运行时间所报告的负载平均值。

您还可以通过启用 log-runtime-metrics 来启用发送正在运行的测功机的定期负载消息

于 2015-08-12T17:33:17.887 回答
0

也许这是预期的测功机空转

PS。我怀疑运行没有意义heroku run uptime- 每次都会在一个新的一次性测功机中运行它。

于 2013-03-17T15:25:14.370 回答