Memory Limits

This documentation is for Dash Enterprise.
Dash Enterprise is the fastest way to write & deploy Dash apps and
Jupyter notebooks.
10% of the Fortune 500 uses Dash Enterprise to productionize AI and
data science apps. Find out if your company is using Dash Enterprise.

Dash Enterprise licenses have a memory limit. This limit represents the maximum amount of memory that total combined apps, workspaces, and services (managed Redis or Postgres databases) can consume.

Viewing licensed memory usage and editing memory limits are administrator actions and require the admin role.

Viewing Licensed Memory and Usage

To view the current memory usage of the total combined apps, workspaces, and services in Dash Enterprise, go to Platform and Users. The Memory Usage and Limits information displays the current usage in relation to your licensed memory limit.

<img>

In most cases, available memory is calculated using Licensed Memory, and Licensed Memory excludes memory reserved for the core system. If you use a different tool to monitor memory on the system, you’ll see different information for available or maximum memory.

If your organization has worked with us to choose a custom server size, or if you have temporarily scaled down your server, then the information displayed in Memory Usage and Limits, including Licensed Memory, is based on the actual memory of your server. In these cases, memory reserved for the core system is not factored into Licensed Memory, but is factored into Used and Available. It is normal for the Used and Available values to not add up to the displayed Licensed Memory.

Nearing and Reaching the Licensed Memory Limit

When memory usage reaches 80% of your licensed memory limit, a warning banner is displayed in the App Manager and scaling apps (including autoscaling) is disabled. We recommend pausing activity on Dash Enterprise until the memory usage is reduced or your licensed memory limit is increased. Contact us to increase your licensed memory limit.

When the licensed memory limit is reached, app developers are unable to initialize new apps, create new workspaces, or add new services.

Analyzing Memory Usage by Resource

To see the memory usage of a specific app, go to its App Info and select the Scale tab. The Memory Usage information displays the current memory usage for the app’s combined processes and workspace (memory usage for services is not shown).

<img>

To drill down further and see memory usage for each specific app, workspace, and service on Dash Enterprise, you can run kubectl commands against the Kubernetes cluster.

If you need to temporarily stop some memory-intensive apps, you can identify apps that are infrequently used by sorting them by Least Viewed or Least Recently Viewed. Note that due to a known issue, no view data is available for Django or Flask apps.

To view the memory usage of all apps and workspaces in the cluster:

kubectl top pods -n dash-apps

The output is similar to:

NAME                                                 CPU(cores)   MEMORY(bytes)
quarterly-results-----web-7dfcfhd5b7-l2xpw           9m           104Mi
sales-analysis-----web-78bf6cj6f5-tg8hs              9m           821Mi
workspace-quarterly-results-668c6b4167-h8cxp         3m           305Mi
workspace-sales-analysis-7498960d4c-6k4w2            3m           241Mi

The NAME column contains the names of the pods that are responsible for app processes and workspaces. Names in the format &lt;app-name&gt;-----&lt;process&gt;-&lt;ID&gt; represent app process pods, and those in the format workspace-&lt;app-name&gt;-&lt;ID&gt; represent workspace pods. Divide the number in the MEMORY(bytes) column by 1024 to obtain the current memory usage in GiB.

To view the memory usage of all services in the cluster:

kubectl top pods -n dash-services

The output is similar to:

NAME                           CPU(cores)   MEMORY(bytes)
postgres-quarterly-results-0   3m           112Mi
redis-sales-analysis-0         3m           111Mi

The NAME column contains the names of the pods that are responsible for the managed databases. Names in the format postgres-&lt;app-name&gt;-0 represent Postgres database pods, and those in the format redis-&lt;app-name&gt;-0 represent Redis database pods.
Divide the number in the MEMORY(bytes) column by 1024 to obtain the current memory usage in GiB.

You can use memory usage information to help inform decisions around memory limits.

Managing Memory Limits

To manage memory limits, you can:

When an app reaches its memory limit, it is stopped. When a workspace reaches its memory limit (usually because the development app is running), the development app is stopped and killed is printed in the workspace terminal.

Changing the Default Memory Limit

Changing the default memory limit has no effect on app processes and workspaces that have custom memory limits.

To change the default memory limit:

  1. In the App Manager, go to Platform and Users. Remember that you need the admin role to be able to access platform and user information.
  2. In Memory Usage and Limits, select Edit Memory Limits.
  3. In Default Limits (GiB)s, enter the new default limit.
  4. Select Save.

New apps and workspaces will inherit the updated default memory limit. To apply the updated default limit to an existing app process that doesn’t have a custom limit, restart the process from the Overview tab in the App Info. To apply the updated default limit to an existing workspace that doesn’t have a custom limit, restart or rebuild the workspace from the Workspace tab in the App Info.

Setting a Custom Memory Limit for an App Process, Workspace, or Service

It’s good practice to set limits that are appropriate for each resource. If your organization has deployed apps with a variety of memory usage levels and the default memory limit is not appropriate for all of them, consider setting custom memory limits.

You can set custom memory limits for app processes, workspaces, and services to a maximum of 24 GiB.

When Dash Enterprise is installed on a multi-node Kubernetes cluster, each node in the cluster typically has 32 GiB and approximately 8 GiB is reserved for the core system. If you set a resource’s memory limit to 24 GiB, this gives it the ability to consume all the available memory on the node that Kubernetes has scheduled it on. Similarly, when Dash Enterprise is installed on a single server, and that single server has 24 GiB or less memory, setting a resource’s memory limit to 24 GiB gives it the ability to consume it all. Keep this in mind when configuring custom memory limits.

If a process has multiple replicas, the custom memory limit applies to each replica. It is not shared between replicas.

When you save a custom memory limit, the resource is restarted. In the case of a service, both the service and the workspace (if one is attached) are restarted.

To set a custom memory limit on an app process, workspace, or service:

  1. In the App Manager, go to the App Info for the app whose process, workspace, or service you want to set a custom memory limit for.
  2. Go to the Scale tab.
  3. Find the process, workspace, or service whose memory limit you want to edit, and then select Edit Resources.
  4. In Memory Limit (GiB), enter the new custom memory limit.
  5. Select Save and Restart. The resource is restarted.