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.
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|
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.
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
Note: Physical CPU cores on non-performance dynos are shared across multiple applications and do not represent a dedicated resource to your application.