Skip Navigation
Show nav
Dev Center
  • Get Started
  • Documentation
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • Documentation
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
Hide categories

Categories

  • Heroku Architecture
    • Compute (Dynos)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • Stacks (operating system images)
    • Networking & DNS
    • Platform Policies
    • Platform Principles
  • Developer Tools
    • Command Line
    • Heroku VS Code Extension
  • Deployment
    • Deploying with Git
    • Deploying with Docker
    • Deployment Integrations
  • Continuous Delivery & Integration (Heroku Flow)
    • Continuous Integration
  • Language Support
    • Node.js
      • Working with Node.js
      • Node.js Behavior in Heroku
      • Troubleshooting Node.js Apps
    • Ruby
      • Rails Support
      • Working with Bundler
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Background Jobs in Python
      • Python Behavior in Heroku
      • Working with Django
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Working with Maven
      • Working with Spring Boot
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go Dependency Management
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • Databases & Data Management
    • Heroku Postgres
      • Postgres Basics
      • Postgres Getting Started
      • Postgres Performance
      • Postgres Data Transfer & Preservation
      • Postgres Availability
      • Postgres Special Topics
      • Migrating to Heroku Postgres
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • Other Data Stores
  • AI
    • Model Context Protocol
    • Vector Database
    • Heroku Inference
      • Inference Essentials
      • AI Models
      • Inference API
      • Quick Start Guides
    • Working with AI
  • Monitoring & Metrics
    • Logging
  • App Performance
  • Add-ons
    • All Add-ons
  • Collaboration
  • Security
    • App Security
    • Identities & Authentication
      • Single Sign-on (SSO)
    • Private Spaces
      • Infrastructure Networking
    • Compliance
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Teams
    • Heroku Connect (Salesforce sync)
      • Heroku Connect Administration
      • Heroku Connect Reference
      • Heroku Connect Troubleshooting
  • Patterns & Best Practices
  • Extending Heroku
    • Platform API
    • App Webhooks
    • Heroku Labs
    • Building Add-ons
      • Add-on Development Tasks
      • Add-on APIs
      • Add-on Guidelines & Requirements
    • Building CLI Plugins
    • Developing Buildpacks
    • Dev Center
  • Accounts & Billing
  • Troubleshooting & Support
  • Integrating with Salesforce
  • Heroku Architecture
  • Compute (Dynos)
  • Dyno Management
  • Scaling Your Dyno Formation

Scaling Your Dyno Formation

English — 日本語に切り替える

Last updated April 14, 2025

Table of Contents

  • Change the Number of Dynos
  • Change the Dyno Size
  • Considerations
  • Additional Reading

This article has instructions for manually scaling your app by changing the dyno size or number of dynos in your formation. Autoscaling is also available for some dyno tiers.

For guidance on how to find the correct size and number of dynos to run for your app, see Guidance for Choosing a Dyno and Application Load Testing.

Change the Number of Dynos

Scaling a process type horizontally provides additional concurrency for performing the work handled by that process type. For example, adding more web dynos allows you to handle more concurrent HTTP requests. Adding more worker dynos lets you process more jobs in parallel.

See Dyno Scaling and Process Limits for the maximum number of dynos you can run per dyno type.

With the Heroku Dashboard

You can’t run more than one Eco or one Basic dyno per process type. Upgrade to a larger dyno first before adding more dynos.

  1. From the Heroku Dashboard, select your app.
  2. Go to the Resources tab.
  3. Click the edit icon beside a process type, for example web.
  4. Move the slider or manually type in the number of desired dynos.
  5. Click Confirm.

With the Heroku CLI

You can change the number of dynos with heroku ps:scale. For example, heroku ps:scale web=3.

You can also change the number of dynos for multiple processes at the same time. For example, heroku ps:scale web=1 worker=5

You can also change both the dyno size and the number of dynos for a process at the same time with heroku ps:scale. For example, heroku ps:scale web=3:performance-l.

With the Heroku API

See the Formation endpoints in the Heroku Platform API to change the dyno size or number of dynos in your dyno formation.

Autoscaling

Heroku offers Autoscaling for Performance-, Private- and Shield-tier dynos. If that feature doesn’t meet your needs, consider a third-party add-on from the Elements marketplace.

Change the Dyno Size

Scale vertically by changing its size to change the resources available to each dyno. For guidance on selecting the correct size, see Guidance for Choosing a Dyno.

With the Heroku Dashboard

Common Runtime Apps

  1. From the Heroku Dashboard, select your app.
  2. Go to the Resources tab.
  3. Above your list of dynos, click Change Dyno Type.
  4. Click the desired dyno tier.
  5. Click Save.
  6. Click the icon beside your listed processes to open the dyno size dropdown menu.
  7. Select a size. Eco and Basic tiers only have one size.

Private Space Apps

  1. From the Heroku Dashboard, select your app.
  2. Go to the Resources tab.
  3. Click the icon beside your listed processes to open the dyno size dropdown menu.
  4. Select a size.

With the Heroku CLI

You can change the dyno size for a process by using heroku ps:type. For example, heroku ps:type worker=standard-2x.

You can also change both the dyno size and the number of dynos for a process at the same time with heroku ps:scale. For example, heroku ps:scale web=3:performance-l.

With the Heroku API

See the Formation endpoints in the Heroku Platform API to change the dyno size or number of dynos in your dyno formation. To find an list of available dyno types for your app, query the Dyno Size endpoint.

Considerations

Releases

When Fir-generation applications are restarted in response to new releases, you may observe the dyno count temporarily exceed the configured scale. This behavior exists to insulate the application from degraded availability– new dynos are created and confirmed to be ready before those running the older release are terminated.

Dynos that are not able to start as a result of the latest release will continue to exist in addition to the dynos running the previous release. In this case, the dyno count will exceed the configured scale until the newest dynos run successfully.

Scaling Limits

See Dyno Scaling and Process Limits for the maximum number of dynos you can run per dyno size.

Mixing Dynos Tiers

Apps on the eco or basic tiers don’t allow for mixing of various dyno types. Apps in these tiers must only use the same type of dyno for all processes.

For rest of our dyno offerings, we offer the ability to mix any dynos that are scoped to that specific runtime tier. We don’t allow the mixing of dynos across various runtimes.

Some examples of this:

  • An app in our Common Runtime could have a performance-m web process and a standard-1x worker.
  • An app in a Private Space could have a private-l web process and a private-m worker process.
  • An app in a Shield Space could have a shield-l web process and a shield-m worker process.
  • An app in a Fir Space could have a dyno-1c-1gb web process and a dyno-2c-4gb worker process.

When Not to Add Dynos

Singleton Processes

Never scale singleton process types, such as a clock/scheduler process type beyond a single dyno. These process types don’t benefit from additional concurrency and can create duplicate records or events.

Backing Service Bottlenecks

Sometimes a bottleneck limits your app’s performance. This bottleneck can come from a backing service, most commonly the database. Adding more dynos in this case can make the problem worse. Fix your bottleneck issues first. For example, if it’s a database, you can try to:

  • Optimize your database queries
  • Upgrade to a larger database
  • Implement caching to reduce database load
  • Switch to a sharded configuration, or scale reads using followers

Long-Running Jobs

Adding more dynos can’t help with large, monolithic HTTP requests, such as a report with a database query that takes 30 seconds, or a job to email out your newsletter to 20,000 subscribers. Try dividing the work first so that adding more dynos makes sense as they run jobs in parallel. See Worker Dynos, Background Jobs and Queueing for more info.

Threads and Requests

A single dyno can serve thousands of requests per second, but performance depends greatly on the language and framework you use. A single-threaded, non-concurrent web framework, like Rails 3 in its default configuration, can process one request at a time. For an app that takes 100ms on average to process each request, it translates to about 10 requests per second per dyno, which isn’t optimal.

We don’t recommend single-threaded back-ends for production applications because of their inefficient handling of concurrent requests. Choose a concurrent backend whenever developing and running a production service. Multi-threaded or event-driven environments like Java, Unicorn, EventMachine, and Node.js can handle many concurrent requests. Load testing your app is the only realistic way to determine request throughput.

Additional Reading

  • Dyno Scaling and Process Limits
  • Autoscaling Dynos
  • Dyno Tiers
  • Dyno Formation
  • Application Load Testing
  • Dyno CLI and API Commands

Keep reading

  • Dyno Management

Feedback

Log in to submit feedback.

Working with One-Off Dynos View Your App's Dynos

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices