> For the complete documentation index, see [llms.txt](https://docs.north.cloud/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.north.cloud/docs/features/rightsize/ec2.md).

# EC2

Learn how Rightsize sizes your EC2 instances.

On AWS accounts, Rightsize sizes EC2 instances. It recommends a smaller or cheaper instance type, a larger one when an instance runs near capacity, or a stop for an idle instance.

## What Rightsize Recommends

For each EC2 instance, Rightsize recommends one of these:

* A smaller instance type in the same family.
* An instance type in a different family.
* A larger instance type.
* A stop. The saving for a stop is an estimate, based on the instance's cost in the month that the results cover. You continue to pay for any commitment that covers the instance, and for its attached EBS volumes.

Rightsize does not suggest a burstable instance type (t2, t3, t3a, or t4g) as a target.

## How Rightsize Sizes an Instance

Rightsize reads these CloudWatch metrics over the lookback window: CPU utilization, network in and out, EBS read and write bytes, and memory used.

Memory data comes from the CloudWatch agent. Without the agent, Rightsize can lower the vCPU count but never lowers memory. The panel then shows "Sized on CPU only. Install the CloudWatch agent to include memory."

### The Sizing Target

Rightsize measures CPU and memory at the **CPU percentile** setting, which is P99 by default. A candidate instance type fits when that measured usage, scaled to the candidate's vCPU and memory, stays at or below the target:

```
base target = 100% − headroom
target      = base target × max(volatility floor, 1 − volatility sensitivity × CoV)
```

CoV is the coefficient of variation of the usage: its standard deviation divided by its mean. A spiky workload has a higher CoV. A higher CoV lowers the target, so the recommended size has more spare capacity.

For example, with the Balanced defaults (CPU headroom 20%, volatility sensitivity 0.5, volatility floor 0.5) and a CoV of 0.4:

```
base target = 100% − 20% = 80%
target      = 80% × max(0.5, 1 − 0.5 × 0.4) = 80% × 0.8 = 64%
```

You can change the CPU percentile, the headroom, and the volatility values in [EC2 Settings](/docs/features/rightsize/ec2.md#ec2-settings), below.

Rightsize then recommends the cheapest instance type that fits. Every candidate must also pass the network and storage checks, and a candidate with fewer vCPUs must also pass the peak load check:

* **Peak load** - for a candidate with fewer vCPUs, the highest CPU utilization in the window, scaled to the candidate, stays below 95%.
* **Network** - the candidate's network capacity is at least twice the observed peak, in either direction.
* **Storage** - the candidate's EBS baseline is at least twice the observed peak of read and write traffic combined. Its EBS bandwidth is also at least that of the current type.

Rightsize runs the network and storage checks only when the metric data has periods shorter than one hour. When a check excludes a smaller type that would otherwise have been recommended, Rightsize adds a **Limited by** reason to the finding.

### Larger Instance Types

Rightsize recommends a larger instance type when daily average usage exceeds the base target on at least 25% of observed days. This must happen on at least two days. In such cases, the finding state is **Under provisioned**.

### Idle Instances and Stops

Rightsize recommends a stop for an instance only when all of these are true. The three thresholds are settings that you can change in [EC2 Settings](/docs/features/rightsize/ec2.md#ec2-settings), below.

* Average CPU stays at or below **Idle CPU ceiling**, which is 10% by default.
* CPU stays steady, with a CoV at or below **Idle volatility ceiling**, which is 0.35 by default.
* Network egress stays at or below 1 MB per sample at the CPU percentile, and no single network sample in either direction exceeds 25 MB.
* The highest CPU utilization, and memory use where measured, never passed **Stop safety peak**, which is 40% by default.

### Commitments

When a commitment covers an instance, the recommendation depends on the commitment:

* **Reserved Instances that do not allow a size change** - AWS allows a size change only on Linux/UNIX Reserved Instances with default tenancy. Reserved Instances for Windows, RHEL, SUSE, or SQL Server, and Reserved Instances with Dedicated tenancy, do not allow one. For these, Rightsize recommends no other instance type. It does the same when a commitment covers the instance and Rightsize cannot identify it. When this blocks a type that would otherwise have been recommended, Rightsize adds the reason **Review Reserved Instance coverage before resizing**.
* **Linux/UNIX Reserved Instances with default tenancy** - Rightsize can recommend a smaller type in the same family. When it does, Rightsize adds the same reason. A regional Reserved Instance applies its discount across all sizes in the family automatically. A zonal Reserved Instance needs a modification to cover the new size.
* **EC2 Instance Savings Plans** - The discount applies only within one instance family, so Rightsize keeps the recommendation in the current family. When this blocks a type in another family that would otherwise have been recommended, Rightsize adds the reason **Commitment limits sizing to this family**.
* **Compute Savings Plans** - The discount applies across families. Rightsize can recommend a type in another family only when it has the committed rate for every candidate type in the other families. Otherwise, it keeps the recommendation in the current family.

## Using the EC2 Tab

The summary metrics on the EC2 tab are Available Savings, Idle, Over provisioned, Under provisioned, Tagged, and Untagged. Available Savings on this tab excludes Auto Scaling groups. The cost chart includes them, and its tooltip reads "Includes Auto Scaling".

Click a row's **AI Suggestion** button to open the instance's panel:

* **Current State** - the instance name, and its instance type.
* **Noros Recommendation** - the recommended instance type, or **Stop instance**.
* **Monthly Savings** - the estimated saving. For an instance covered by a commitment, the card also shows "Estimated at your commitment's blended rate."
* **Findings** - the reasons behind the recommendation, as chips.

Below the panel sections, a chart shows the instance's utilization history. Choose CPU, Memory, Network egress, Network ingress, EBS read, or EBS write to change the metric.

## EC2 Settings

In **Settings**, open **Per-service overrides** and select **EC2 & Auto Scaling**. The same settings apply to Auto Scaling groups. An empty field uses the account default.

| Setting                     | What it controls                                                                                                                                                                                           | Balanced default |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| **CPU percentile**          | The usage percentile Rightsize sizes against. P99 excludes the highest 1 percent of readings.                                                                                                              | P99              |
| **CPU headroom**            | Spare CPU kept above CPU usage at the CPU percentile. A higher value gives a larger, safer size.                                                                                                           | 20%              |
| **Memory headroom**         | Spare memory kept above memory usage at the CPU percentile. A higher value gives a larger, safer size.                                                                                                     | 20%              |
| **Volatility sensitivity**  | How much variable usage lowers the sizing target. 0 does not lower it. 1 lowers it the most.                                                                                                               | 0.5              |
| **Volatility floor**        | The lowest value the target can be lowered to. 0.5 keeps at least half of the base target.                                                                                                                 | 0.5              |
| **Idle CPU ceiling**        | The average CPU at or below which an instance can count as idle.                                                                                                                                           | 10%              |
| **Idle volatility ceiling** | How steady CPU must be for an instance to count as idle. A lower value requires steadier CPU.                                                                                                              | 0.35             |
| **Stop safety peak**        | Rightsize never recommends a stop for an instance whose CPU or memory ever passed this.                                                                                                                    | 40%              |
| **Min savings percent**     | Rightsize does not recommend a smaller or cheaper type that saves less than this share of what the resource costs today. The resource shows as Optimized instead. Stops and larger types are not affected. | 5%               |

## EC2 Finding Reasons

Rightsize lists the reasons behind each finding. Check these before you act on a recommendation, to understand what it is based on.

| Reason                                                 | Meaning                                                                                                                                                                                                                |
| ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **CPU Overprovisioned / Underprovisioned**             | The finding is based on CPU usage.                                                                                                                                                                                     |
| **Memory Overprovisioned / Underprovisioned**          | The finding is based on memory usage.                                                                                                                                                                                  |
| **Volatile usage**                                     | CPU usage varies, so Rightsize lowered the sizing target.                                                                                                                                                              |
| **Limited by peak load**                               | A smaller size passed the CPU percentile test, but the highest peak in the window exceeds its capacity.                                                                                                                |
| **Limited by network throughput**                      | The recommended size is the smallest one with enough network capacity for the observed peak.                                                                                                                           |
| **Limited by storage throughput**                      | The recommended size is the smallest one with enough storage throughput for the observed peak. This check uses throughput only. It does not check IOPS.                                                                |
| **Limited by missing memory data / No memory metrics** | No memory agent is reporting data, so the recommendation is bounded by CPU alone. The resource's panel links to the install guide for the CloudWatch agent.                                                            |
| **Burst credits exhausted**                            | The current type is burstable (t2, t3, t3a, or t4g), and daily average usage exceeded the base target on at least 25% of observed days and on at least two days. This indicates that the instance needs a larger size. |
| **Idle**                                               | The instance shows no meaningful activity. Rightsize recommends a stop.                                                                                                                                                |
| **Commitment limits sizing to this family**            | Because of the covering commitment, Rightsize keeps the recommendation in the current family. See [Commitments](/docs/features/rightsize/ec2.md#commitments), above.                                                   |
| **Review Reserved Instance coverage before resizing**  | Resizing this resource would change what its Reserved Instance covers. See [Commitments](/docs/features/rightsize/ec2.md#commitments), above.                                                                          |
| **GPU not sized**                                      | The instance has GPU accelerators. Rightsize sizes on CPU, memory, and network, so it does not size GPU instances.                                                                                                     |
| **Spot capacity — not right-sized**                    | The instance runs on Spot capacity. Spot capacity is reclaimed and priced on different terms, so Rightsize does not size it.                                                                                           |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.north.cloud/docs/features/rightsize/ec2.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
