| 1 | ### Understand the alert |
| 2 | |
| 3 | This alarm calculates the system `load average` (CPU and I/O demand) over the period of fifteen minutes. If you receive this alarm, it means that your system is "overloaded." |
| 4 | |
| 5 | The alert gets raised into warning if the metric is 2 times the expected value and cleared if the value is 1.75 times the expected value. |
| 6 | |
| 7 | For further information on how our alerts are calculated, please have a look at our [Documentation](/src/health/REFERENCE.md#expressions). |
| 8 | |
| 9 | ### What does "load average" mean? |
| 10 | |
| 11 | The term `system load average` on a Linux machine, measures the **number of threads that are currently working and those waiting to work** (CPU, disk, uninterruptible locks). So simply stated: **System load average measures the number of threads that aren't idle.** |
| 12 | |
| 13 | ### What does "overloaded" mean? |
| 14 | |
| 15 | Let's look at a single core CPU system and think of its core count as car lanes on a bridge. A car represents a process in this example: |
| 16 | |
| 17 | - On a 0.5 load average, the traffic on the bridge is fine, it is at 50% of its capacity. |
| 18 | - If the load average is at 1, then the bridge is full, and it is utilized 100%. |
| 19 | - If the load average gets to 2 (remember we are on a single core machine), it means that there is one car lane that is passing the bridge. However, there is **another** full car lane that waits to pass the bridge. |
| 20 | |
| 21 | So this is how you can imagine CPU load, but keep in mind that `load average` counts also I/O demand, so there is an analogous example there. |
| 22 | |
| 23 | ### Troubleshoot the alert |
| 24 | |
| 25 | - Determine if the problem is CPU load or I/O load |
| 26 | |
| 27 | To get a report about your system statistics, use `vmstat` (or `vmstat 1`, to set a delay between updates in seconds): |
| 28 | |
| 29 | The `procs` column, shows: |
| 30 | r: The number of runnable processes (running or waiting for run time). |
| 31 | b: The number of processes blocked waiting for I/O to complete. |
| 32 | |
| 33 | - Check per-process CPU/disk usage to find the top consumers |
| 34 | |
| 35 | 1. To see the processes that are the main CPU consumers, use the task manager program `top` like this: |
| 36 | |
| 37 | ``` |
| 38 | top -o +%CPU -i |
| 39 | ``` |
| 40 | |
| 41 | 2. Use `iotop`: |
| 42 | `iotop` is a useful tool, similar to `top`, used to monitor Disk I/O usage, if you don't have it, then [install it](https://www.tecmint.com/iotop-monitor-linux-disk-io-activity-per-process/) |
| 43 | ``` |
| 44 | sudo iotop |
| 45 | ``` |
| 46 | |
| 47 | 3. Minimize the load by closing any unnecessary main consumer processes. We strongly advise you to double-check if the process you want to close is necessary. |
| 48 | |
| 49 | ### Useful resources |
| 50 | |
| 51 | 1. [UNIX Load Average Part 1: How It Works](https://www.helpsystems.com/resources/guides/unix-load-average-part-1-how-it-works) |
| 52 | 2. [UNIX Load Average Part 2: Not Your Average Average](https://www.helpsystems.com/resources/guides/unix-load-average-part-2-not-your-average-average) |
| 53 | 3. [Understanding Linux CPU Load](https://scoutapm.com/blog/understanding-load-averages) |
| 54 | 4. [Linux Load Averages: Solving the Mystery](https://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html) |
| 55 | 5. [Understanding Linux Process States](https://access.redhat.com/sites/default/files/attachments/processstates_20120831.pdf) |