What is an acceptable amount of Dyno load?

Issue

Dashboard Metrics displays Dyno Load, measured as "1m Load Average" and "1m Load Max". The method of taking these measurements is explained on our Dev Center (https://devcenter.heroku.com/articles/metrics#dyno-load), but this does not illustrate what you should expect my application to run at.

Resolution

Load average limits by dyno type

Dynos that are at or below the listed load average below are considered to have an acceptable dyno load:

Dyno Type vCPU count Load average
Hobby n/a 1.0
Standard-1x n/a 1.0
Standard-2x n/a 1.0
Performance-M 2 2.0
Performance-L-RAM 4 4.0
Private-L-RAM 4 4.0
Shield-L-RAM: 4 4.0
Performance-L 8 8.0
Performance-XL 8 8.0
Private-XL 8 8.0
Performance-2XL 16 16
Private-2XL 16 16
Shield-2XL 16 16

Dyno load explained

The dyno load metric is a count of tasks actively executing on the CPU as well as tasks waiting for a free CPU. If you only have one physical "dedicated" core and you have a load average of 2, that indicates that you are asking for more CPU resources than the machine has. Exceeding the indicated load average for a consistent stretch of time means that your application is having performance issues.

Note: IO tasks such as reading from disk or making network requests are not counted in dyno-load since they're not actively waiting on the CPU.

If your dyno load is much higher than the number listed above, it indicates that your application is experiencing CPU contention.

If your dyno load is considerably lower than the number listed above, while under maximum load, it indicates that your application is not fully utilizing all available resources.

Increasing and decreasing dyno load

Many applications have a way to tune the number of threads or processes that their application is attempting to use. Different languages have different performance characteristics, for instance, Ruby and Python have a GVL/GIL that prevents concurrent execution of program code by multiple threads. In general, if you are above the listed load, you will want to decrease process and/or thread counts until your application is under the given value.

vCPU count

The vCPU count is a count of the physical cores plus the hyper threads available to your dyno.

You can obtain the vCPU count on a machine by running nproc in a heroku run session:

$ heroku run nproc --size=performance-l
8

In this case performance-l dynos have 4 physical cores and 4 hyper threads. The value of nproc shows vCPU count of 8.

Note: Physical CPU cores on non-performance dynos are shared across multiple applications and do not represent a dedicated resource to your application.

WARNING: Starting November 28, 2022, free Heroku Dynos, free Heroku Postgres, and free Heroku Key-Value Store plans will no longer be available. If you have apps using any of these resources, you must upgrade to paid plans by this date to ensure your apps continue to run and retain your data. Heroku Connect and Heroku Scheduler free plans and other third-party add-ons are not affected. Eligible students can apply for platform credits through our new Heroku for GitHub Students program. See our blog and FAQ for more info.

Ask on Stack Overflow

Engage with a community of passionate experts to get the answers you need

Ask on Stack Overflow

Heroku Support

Create a support ticket and our support experts will get back to you

Contact Heroku Support