Compare commits

...

10 Commits

Author SHA1 Message Date
kirillyu
78d2569faa docs: add memory model diagram and dedupe best practices
Add a process memory model diagram with its excalidraw source to the Memory
shortage guide, normalize the memory signals to copy-pasteable MetricsQL, and
remove a duplicate Memory section in Best practices.

Signed-off-by: kirillyu <login40000@gmail.com>
2026-07-08 15:06:55 +02:00
hagen1778
04ce9e0378 address review comments
Signed-off-by: hagen1778 <roman@victoriametrics.com>
2026-07-08 11:22:38 +02:00
kirillyu
9f8d7dc72c docs: add memory shortage troubleshooting guide
Add a Memory shortage section to Troubleshooting: how to tell a real shortage from normal high memory use, the signals to watch on the dashboards, the cache-bound, heap-bound and I/O-bound patterns, and how to fix each. Add a Memory section to Best practices (GOMEMLIMIT, cache tuning, VPA, headroom) and link it from the slow data ingestion notes.
2026-07-08 10:11:31 +02:00
Kirill Yurkov
3625659d05 Update docs/victoriametrics/Troubleshooting.md
Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Signed-off-by: Kirill Yurkov <kirillyu@users.noreply.github.com>
2026-07-06 15:07:01 +03:00
Kirill Yurkov
42685a945b Update docs/victoriametrics/Troubleshooting.md
Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Signed-off-by: Kirill Yurkov <kirillyu@users.noreply.github.com>
2026-07-06 15:04:09 +03:00
Kirill Yurkov
1afb39b6fc Update docs/victoriametrics/Troubleshooting.md
Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Signed-off-by: Kirill Yurkov <kirillyu@users.noreply.github.com>
2026-07-06 15:03:38 +03:00
Kirill Yurkov
dceda4c272 Update docs/victoriametrics/Troubleshooting.md
Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Signed-off-by: Kirill Yurkov <kirillyu@users.noreply.github.com>
2026-07-06 14:44:47 +03:00
Kirill Yurkov
823d352921 Update docs/victoriametrics/Troubleshooting.md
Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Signed-off-by: Kirill Yurkov <kirillyu@users.noreply.github.com>
2026-07-06 14:44:34 +03:00
Kirill Yurkov
cd60caa955 Update docs/victoriametrics/Troubleshooting.md
Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Signed-off-by: Kirill Yurkov <kirillyu@users.noreply.github.com>
2026-07-06 14:44:11 +03:00
kirillyu
a1c3b4d267 Add Memory shortage troubleshooting section and Memory best practices
Memory accounting, signals, shortage patterns, out-of-memory detection, and fixes; plus a Memory section in Best practices.
2026-06-26 12:18:21 +02:00
5 changed files with 1109 additions and 28 deletions

View File

@@ -16,9 +16,35 @@ aliases:
---
## Install Recommendation
It is recommended to run the latest available release of VictoriaMetrics from [this page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/latest), since it contains all the bugfixes and enhancements.
It is recommended to run the latest available release of VictoriaMetrics from [this page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/latest), as it includes all bug fixes and enhancements.
There is no need to tune VictoriaMetrics because it uses reasonable defaults for command-line flags. These flags are automatically adjusted for the available CPU and RAM resources. There is no need in Operating System tuning because VictoriaMetrics is optimized for default OS settings. The only option is to increase the limit on the [number of open files in the OS](https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a), so VictoriaMetrics could accept more incoming connections and could keep open more data files.
There is no need to tune VictoriaMetrics, as it uses reasonable defaults for its command-line flags. These flags are automatically adjusted for the available CPU and RAM resources. There is no need for operating system tuning because VictoriaMetrics is optimized for default OS settings. The only option is to increase the limit on the [number of open files in the OS](https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a), so VictoriaMetrics could accept more incoming connections and could keep open more data files. VictoriaMetrics is tested and developed to run efficiently on these defaults, which fit the majority of workloads. Change a setting only when the docs explicitly instruct you to, including when and why.
## Memory
VictoriaMetrics components detect the available memory at startup as the smaller of the host RAM and the cgroup memory limit.
To keep them stable:
1. Do not set `GOMEMLIMIT`. Set the container/cgroup memory limit, and VictoriaMetrics automatically
sizes its memory-aware limits from it. All VictoriaMetrics components have their own GC settings,
which are recommended.
1. Do not hand-tune cache sizes with `-storage.cacheSize*` flags; rely on the defaults.
If a component needs larger caches, move it to a host with more memory.
See [Cache tuning](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#cache-tuning).
1. Do not autoscale `vmstorage` with the Vertical Pod Autoscaler (VPA) or the Horizontal Pod Autoscaler (HPA).
VPA: cache sizes are derived from the memory limit, read only once at startup.
Modes that recreate the pod (`Recreate`, `Auto`) reset the caches and force a cold start,
causing slow inserts and query latency spikes. In-place resizing is not picked up at runtime,
so `vmstorage` keeps the budget and `vm_available_memory_bytes` initialized at startup, which also skews the dashboards.
Set fixed memory requests and limits for `vmstorage` rather than autoscaling.
HPA: `vmstorage` is stateful. Adding nodes sends new series to them while existing data stays where it is.
Removing nodes makes the data on them unavailable to queries and can cause data loss without replication.
Frequent scaling keeps changing the routing and can degrade the cluster.
1. Leave headroom for the OS page cache and workload spikes -
see [capacity planning](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#capacity-planning).
## Swap

View File

@@ -416,7 +416,7 @@ The cache size depends on the available memory for VictoriaMetrics in the host s
then VictoriaMetrics needs to read and unpack the information from disk on every incoming sample for time series missing in the cache.
This operation is much slower than the cache lookup, so such an insert is named a `slow insert`.
A high percentage of slow inserts on the [official dashboard for VictoriaMetrics](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#monitoring) indicates
a memory shortage for the current number of [active time series](#what-is-an-active-time-series). Such a condition usually leads
a [memory shortage](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#memory-shortage) for the current number of [active time series](#what-is-an-active-time-series). Such a condition usually leads
to a significant slowdown for data ingestion and to significantly increased disk IO and CPU usage.
The solution is to add more memory or to reduce the number of [active time series](#what-is-an-active-time-series).

View File

@@ -188,7 +188,7 @@ If you see unexpected or unreliable query results from VictoriaMetrics, then try
These are the most common reasons for slow data ingestion in VictoriaMetrics:
1. Memory shortage for the given amounts of [active time series](https://docs.victoriametrics.com/victoriametrics/faq/#what-is-an-active-time-series).
1. [Memory shortage](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#memory-shortage) for the given amounts of [active time series](https://docs.victoriametrics.com/victoriametrics/faq/#what-is-an-active-time-series).
VictoriaMetrics (or `vmstorage` in the cluster version of VictoriaMetrics) maintains an in-memory cache `storage/tsid`
for a quick search for internal series IDs for each incoming metric. VictoriaMetrics automatically determines the maximum
@@ -352,35 +352,142 @@ These are the solutions that exist for improving the performance of slow queries
See also [this article](https://valyala.medium.com/how-to-optimize-promql-and-metricsql-queries-85a1b75bf986),
which explains how to identify and optimize slow queries.
## Out of memory errors
## Memory shortage
The following are the most common sources of out-of-memory (aka OOM) crashes in VictoriaMetrics:
High memory utilization alone does not indicate a shortage.
A VictoriaMetrics component can operate normally under high memory utilization,
but it is recommended to keep [at least 50% of free memory for stability](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#capacity-planning).
A shortage means there is not enough memory for the workload.
It is different from high utilization and from memory pressure (the kernel's reclaim activity, shown by [PSI](https://docs.kernel.org/accounting/psi.html)).
Use the [signals](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#memory-signals) and [patterns](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#memory-shortage-patterns) below to tell them apart,
and [how to fix](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#how-to-fix-memory-issues) to resolve it.
1. Improper command-line flag values. Inspect command-line flags passed to VictoriaMetrics components.
If you don't clearly understand the purpose or the effect of some flags, remove them
from the list of flags passed to VictoriaMetrics components. Improper command-line flag values
may lead to increased memory and CPU usage. Increased memory usage increases the risk of OOM crashes.
VictoriaMetrics is optimized to run with default flag values (e.g., when they aren't explicitly set).
VictoriaMetrics components detect the available memory at startup as the smaller of the host RAM and the cgroup memory limit,
and expose it as `vm_available_memory_bytes`. The actual usage is `process_resident_memory_bytes` (RSS):
For example, it isn't recommended to change cache sizes in VictoriaMetrics, as this frequently leads to OOM exceptions.
[These docs](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#cache-tuning) refer to command-line flags that aren't
recommended to tune. If you see that VictoriaMetrics needs to increase some cache sizes for the current workload,
then it is better to migrate to a host with more memory instead of trying to tune cache sizes manually.
![VictoriaMetrics process memory model](troubleshooting-memory-model.webp)
1. Unexpected heavy queries. The query is considered heavy if it needs to select and process millions of unique time series.
Such a query may cause an OOM exception, as VictoriaMetrics needs to keep some per-series data in memory.
VictoriaMetrics provides [various settings](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#resource-usage-limits)
that can help limit resource usage.
For more context, see [How to optimize PromQL and MetricsQL queries](https://valyala.medium.com/how-to-optimize-promql-and-metricsql-queries-85a1b75bf986).
VictoriaMetrics also provides [query tracer](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#query-tracing)
to help identify the source of heavy queries. Slow queries can be logged with additional details via [Query execution stats](https://docs.victoriametrics.com/victoriametrics/query-stats/).
RSS is the sum of anonymous memory (`process_resident_memory_anon_bytes`, not reclaimable) and the
file-backed OS page cache for the on-disk [data](https://docs.victoriametrics.com/victoriametrics/#storage)
and [indexdb](https://docs.victoriametrics.com/victoriametrics/#indexdb)
(`process_resident_memory_file_bytes`, reclaimable). Anonymous memory holds the VM caches
(`vm_cache_size_bytes`), the internal buffers, and the Go runtime memory: the Go heap
(`go_memstats_heap_inuse_bytes`), goroutine stacks, and runtime overhead.
1. Lack of free memory for processing workload spikes. If VictoriaMetrics components use almost all the available memory
under the current workload, then it is recommended to migrate to a host with larger amounts of memory.
This would protect from possible OOM crashes on workload spikes. It is recommended to have at least 50%
of free memory to gracefully handle possible workload spikes.
See [capacity planning for single-node VictoriaMetrics](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#capacity-planning)
and [capacity planning for the cluster version of VictoriaMetrics](https://docs.victoriametrics.com/victoriametrics/cluster-victoriametrics/#capacity-planning).
`-memory.allowedPercent` (default 60%) or `-memory.allowedBytes` is a soft limit that sizes the VM caches
and internal buffers (the buffers are resident in the Go heap). It does not bound the rest of the Go
runtime memory or the OS page cache. The container or cgroup limit is the hard limit: if RSS reaches it,
the process is [OOM-killed](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#out-of-memory-errors).
The Go heap grows with the current workload (queries, ingestion, merges) outside the soft limit, so a
heavy load can push RSS to the hard limit and trigger an OOM kill even while the VM caches stay within the
soft limit.
Before tuning and troubleshooting memory issues,
see [Best practices](https://docs.victoriametrics.com/victoriametrics/bestpractices/#memory)
for memory configuration guidance. Be sure that `GOMEMLIMIT` is not set,
and that the [VPA](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) is not used for `vmstorage` pods.
### Memory signals
> See [how to monitor VictoriaMetrics](https://docs.victoriametrics.com/victoriametrics/#monitoring) to set up scraping and the Grafana dashboards that show these signals.
The following metrics and MetricsQL expressions describe how a component uses memory.
None of them means a shortage on its own; read them together in [Memory shortage patterns](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#memory-shortage-patterns).
- `process_resident_memory_anon_bytes / vm_available_memory_bytes` - a share of available memory occupied by the process (VM caches, internal buffers, Go runtime memory). The OS can't reclaim this memory under memory pressure.
- `process_resident_memory_file_bytes` - the OS page cache for the component's on-disk data,
currently resident for the process. The OS can reclaim it under memory pressure.
- `rate(process_pressure_memory_waiting_seconds_total[5m])`, `rate(process_pressure_memory_stalled_seconds_total[5m])` -
[PSI](https://docs.kernel.org/accounting/psi.html): amount of time tasks were stalled waiting for memory reclaim.
Populated only on Linux hosts with PSI support.
- `vm_cache_size_bytes / vm_cache_size_max_bytes` (per `type`, e.g., `storage/tsid`) -
how full each in-process cache is.
- `rate(vm_slow_row_inserts_total[5m]) / rate(vm_rows_added_to_storage_total[5m])` -
share of ingested rows that missed the `storage/tsid` cache ([slow inserts](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#slow-data-ingestion)).
- `sum(increase(vm_new_timeseries_created_total[24h])) / sum(vm_cache_entries{type="storage/hour_metric_ids"})` -
the [churn rate](https://docs.victoriametrics.com/victoriametrics/faq/#what-is-high-churn-rate):
new series created over a day relative to the
[active time series](https://docs.victoriametrics.com/victoriametrics/faq/#what-is-an-active-time-series).
- `rate(process_major_pagefaults_total[5m])` - pages read from disk (page-cache misses, refaults, or swap-in).
- `go_memstats_heap_inuse_bytes` and `rate(go_gc_cpu_seconds_total[5m])` - the Go heap working set and the CPU cost of garbage collection.
### Out of memory errors
An out-of-memory (OOM) kill is the strongest sign of a memory shortage, but the process cannot report it:
the process is already dead. Detect the kill from outside the process:
- Kubernetes: a container restart with reason `OOMKilled` in the pod events (`kubectl describe pod`).
- Linux hosts: the kernel OOM killer log in `dmesg` or `journalctl`, with the `oom_score` for the killed process.
- Container runtime logs record the same kill from the runtime side.
To prevent recurrence, resolve the underlying shortage (see [How to fix memory issues](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#how-to-fix-memory-issues)).
### Memory shortage patterns
There are three patterns of memory shortage:
1. **The cache cannot hold the active series (cache-bound shortage).** The `storage/tsid` cache is full:
`vm_cache_size_bytes{type="storage/tsid"}` is close to `vm_cache_size_max_bytes{type="storage/tsid"}`, and slow inserts stay high.
Slow inserts come from `storage/tsid` cache misses: either series not seen before (`vm_new_timeseries_created_total`),
or series pushed out of the overutilized cache due to insufficient memory. Slow inserts normally rise during `vmstorage`
restarts or rerouting. But if they stay above 5% for a long time and are not explained by
`increase(vm_new_timeseries_created_total[24h])`, the cache is too small to hold the current active series.
See the detailed explanation in the [Slow data ingestion](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#slow-data-ingestion) section.
1. **The Go heap exceeds its budget (heap-bound shortage).** `go_memstats_heap_inuse_bytes` climbs well above its stable baseline.
Check it together with the non-cache part of anonymous memory:
`process_resident_memory_anon_bytes` minus the component's `vm_cache_size_bytes`.
There is no fixed normal value, so compare against the component's own stable history.
A `process_resident_memory_anon_bytes / vm_available_memory_bytes` ratio that keeps rising leaves little headroom
and may lead to an [OOM kill](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#out-of-memory-errors).
A single heavy query can spike the heap on its own: if it has to select and process millions of unique time series,
VictoriaMetrics keeps some per-series data in memory while the query runs.
See how to [find expensive and slow queries](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#slow-queries), and prevent them with [resource usage limits](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#resource-usage-limits).
If heap growth correlates with query or ingestion load, it is workload-driven.
If the heap grows regardless of load, suspect a memory leak, collect a heap profile, and [file a bug report](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/new).
1. **The OS page cache is too small (I/O-bound shortage).** The main signal is a consistently high
`rate(process_major_pagefaults_total[5m])`: the component's data and `indexdb` no longer fit the page cache,
so it reads them from disk, which is orders of magnitude slower. `process_resident_memory_file_bytes` drops as the OS
evicts these file pages. Swap causes the same symptoms, so keep it disabled on `vmstorage` and
single-node hosts (see [Swap](https://docs.victoriametrics.com/victoriametrics/bestpractices/#swap)).
If you run multiple `vmstorage` instances on one physical host, make sure it has enough CPU, memory, and disk
resources for all of them. Otherwise they compete for the OS page cache and evict each other's file pages,
which increases page faults.
Add memory according to
[capacity planning](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#capacity-planning).
PSI is an additional confirmation signal: a rising `process_pressure_memory_*_seconds_total` value indicates that the kernel is reclaiming memory for the cgroup.
Where PSI is unavailable, rely on the per-pattern signals above.
### How to fix memory issues
If the shortage persists after you distinguish it from normal high memory utilization, use the approaches below to resolve it:
- Reduce the number of [active time series](https://docs.victoriametrics.com/victoriametrics/faq/#what-is-an-active-time-series)
or the [churn rate](https://docs.victoriametrics.com/victoriametrics/faq/#what-is-high-churn-rate) -
see [Slow data ingestion](https://docs.victoriametrics.com/victoriametrics/troubleshooting/#slow-data-ingestion), or drop metrics that [are not used](https://docs.victoriametrics.com/victoriametrics/#track-ingested-metrics-usage).
- Add more memory by scaling vertically, or spread the load by scaling horizontally - see capacity planning for
[single-node VictoriaMetrics](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#capacity-planning)
and the [cluster version](https://docs.victoriametrics.com/victoriametrics/cluster-victoriametrics/#capacity-planning).
Spare memory also absorbs workload spikes that would otherwise OOM a component running near its limit.
For `vmstorage`, more memory also means faster processing, as its caches and the OS page cache keep a higher hit rate.
- Remove command-line flags whose impact you do not clearly understand. Improper flags can raise
memory usage and lead to OOM crashes. In particular, do not change
[cache sizes](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#cache-tuning);
add more memory instead.
- Set [resource usage limits](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#resource-usage-limits) to protect components.
- Investigate Go heap growth or a suspected memory leak - collect a memory profile using the profiling guide for
[single-node VictoriaMetrics](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#profiling)
or [cluster components](https://docs.victoriametrics.com/victoriametrics/cluster-victoriametrics/#profiling), and share it with the VictoriaMetrics team in Slack or a GitHub issue.
## Cluster instability

View File

@@ -0,0 +1,948 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://app.excalidraw.com",
"elements": [
{
"id": "gE7eRrzHKJVYOu7Srtybs",
"type": "rectangle",
"x": -163.47385198772463,
"y": 540.369968908377,
"width": 782.8634758116641,
"height": 171.15951889813914,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a0",
"roundness": {
"type": 3
},
"seed": 1280535870,
"version": 214,
"versionNonce": 1640997630,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "LysRJI4FX4OSdBgOPxMKY"
}
],
"updated": 1783442859923,
"link": null,
"locked": false
},
{
"id": "LysRJI4FX4OSdBgOPxMKY",
"type": "text",
"x": 47.52600115248242,
"y": 608.4497283574466,
"width": 360.86376953125,
"height": 35,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a1",
"roundness": null,
"seed": 1278154110,
"version": 38,
"versionNonce": 514757602,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "VM caches + internal buffers",
"fontSize": 28,
"fontFamily": 6,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "gE7eRrzHKJVYOu7Srtybs",
"originalText": "VM caches + internal buffers",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "k5G5EHKMKva6iRRP-3tK7",
"type": "rectangle",
"x": 621.2849434849941,
"y": 539.881292192172,
"width": 299.40922598417467,
"height": 171.15951889813914,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#a5d8ff",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a2",
"roundness": {
"type": 3
},
"seed": 1525396926,
"version": 464,
"versionNonce": 1478398782,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "W3GZiwsiykanubVAVQGjM"
}
],
"updated": 1783442859923,
"link": null,
"locked": false
},
{
"id": "W3GZiwsiykanubVAVQGjM",
"type": "text",
"x": 644.4436351513978,
"y": 607.9610516412416,
"width": 253.0918426513672,
"height": 35,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a3",
"roundness": null,
"seed": 1638551038,
"version": 41,
"versionNonce": 758499234,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "Go runtime memory",
"fontSize": 28,
"fontFamily": 6,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "k5G5EHKMKva6iRRP-3tK7",
"originalText": "Go runtime memory",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "RIu4buNdwW-8MVGgzSYaE",
"type": "rectangle",
"x": 923.8417205589703,
"y": 539.1782838421005,
"width": 299.40922598417467,
"height": 171.15951889813914,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a4",
"roundness": {
"type": 3
},
"seed": 2104221246,
"version": 542,
"versionNonce": 1067809662,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "zELibyMprF20jtw8yMrtq"
}
],
"updated": 1783442859923,
"link": null,
"locked": false
},
{
"id": "zELibyMprF20jtw8yMrtq",
"type": "text",
"x": 979.4663698669756,
"y": 607.2580432911701,
"width": 188.15992736816406,
"height": 35,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a5",
"roundness": null,
"seed": 51471998,
"version": 18,
"versionNonce": 337675106,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "OS page cache",
"fontSize": 28,
"fontFamily": 6,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "RIu4buNdwW-8MVGgzSYaE",
"originalText": "OS page cache",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "6jU11nsXriOCfFMQ_j7YY",
"type": "line",
"x": -162.54265312138705,
"y": 887.8956079037217,
"width": 1385.3645050956875,
"height": 0,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a6",
"roundness": {
"type": 2
},
"seed": 56354494,
"version": 461,
"versionNonce": 514153406,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
1385.3645050956875,
0
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "K9cTXATtGS0DZZdf69Ure",
"type": "line",
"x": -156.8961480808266,
"y": 876.0287620657799,
"width": 10.85916238259415,
"height": 18.80862097429815,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a7",
"roundness": {
"type": 2
},
"seed": 1324113662,
"version": 265,
"versionNonce": 230541090,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-10.85916238259415,
18.80862097429815
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "B2OK9gphCmGW3BneAjkbI",
"type": "line",
"x": 1229.5442720602532,
"y": 877.7719523706813,
"width": 10.85916238259415,
"height": 18.80862097429815,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a8",
"roundness": {
"type": 2
},
"seed": 2051264318,
"version": 441,
"versionNonce": 188691454,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-10.85916238259415,
18.80862097429815
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "jYa3O7mS7cWIjvu4pjMuS",
"type": "line",
"x": -163.88961832269524,
"y": 671.6240989826837,
"width": 0,
"height": 213.43898741022974,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a9",
"roundness": {
"type": 2
},
"seed": 1640183678,
"version": 210,
"versionNonce": 847024866,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0,
213.43898741022974
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "ic30xQf9-j-IQEtg1Kp1O",
"type": "line",
"x": 1223.948068956157,
"y": 659.0439286598893,
"width": 0,
"height": 233.26224141158696,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aA",
"roundness": {
"type": 2
},
"seed": 766220222,
"version": 300,
"versionNonce": 796132414,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0,
233.26224141158696
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "TW2aQyuT_cKD_xBrGLen9",
"type": "text",
"x": 412.1688574163163,
"y": 888.7306180954494,
"width": 256.4417724609375,
"height": 31.2197119326315,
"angle": 0,
"strokeColor": "#1971c2",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aB",
"roundness": null,
"seed": 1444802558,
"version": 374,
"versionNonce": 887875234,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "process memory (RSS)",
"fontSize": 24.9757695461052,
"fontFamily": 6,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "process memory (RSS)",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "h8UBeW_fArdqLvaRjQobM",
"type": "line",
"x": 620.6765429290772,
"y": 470.77517820268815,
"width": 0,
"height": 219.46008625300556,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aC",
"roundness": {
"type": 2
},
"seed": 656097342,
"version": 289,
"versionNonce": 1294257278,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0,
219.46008625300556
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "3qZXc_pQkdMEgsBaThziu",
"type": "text",
"x": 507.1037123883507,
"y": 421.18570175339744,
"width": 227.9797821044922,
"height": 50,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aD",
"roundness": null,
"seed": 1149536382,
"version": 384,
"versionNonce": 498778722,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "-memory.allowedPercent\n(soft limit)",
"fontSize": 20,
"fontFamily": 6,
"textAlign": "center",
"verticalAlign": "top",
"containerId": null,
"originalText": "-memory.allowedPercent\n(soft limit)",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "Hi7iidf6BoXJ98-r-sj3I",
"type": "line",
"x": 1224.4955901639914,
"y": 465.8381062849784,
"width": 0,
"height": 202.3349938273417,
"angle": 0,
"strokeColor": "#e03131",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aE",
"roundness": {
"type": 2
},
"seed": 773507262,
"version": 631,
"versionNonce": 1108511934,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0,
202.3349938273417
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "692h6dalmjz7G8FSjAEQT",
"type": "text",
"x": 1167.7131990389935,
"y": 411.7137324719191,
"width": 107.39987182617188,
"height": 50,
"angle": 0,
"strokeColor": "#e03131",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aF",
"roundness": null,
"seed": 1132396798,
"version": 811,
"versionNonce": 129508898,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "cgroup limit\n(hard limit)",
"fontSize": 20,
"fontFamily": 6,
"textAlign": "center",
"verticalAlign": "top",
"containerId": null,
"originalText": "cgroup limit\n(hard limit)",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "tHvwMEEFm7MJGVgdwy8gn",
"type": "line",
"x": 930.5005823799256,
"y": 783.5717649435331,
"width": 13.270698013777292,
"height": 20.43301545409895,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aG",
"roundness": {
"type": 2
},
"seed": 1211248958,
"version": 256,
"versionNonce": 199116030,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-13.270698013777292,
20.43301545409895
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "apuC9Pwp4ZTeuanLgQyCh",
"type": "line",
"x": -163.36058677881192,
"y": 793.2328019694993,
"width": 1088.6063290056318,
"height": 0,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aH",
"roundness": {
"type": 2
},
"seed": 1737841022,
"version": 716,
"versionNonce": 1540559330,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
1088.6063290056318,
0
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "V3vacGErewazR8KScqrIT",
"type": "line",
"x": -158.1061579032248,
"y": 780.6611090271371,
"width": 11.663815396337668,
"height": 18.503271895048556,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aI",
"roundness": {
"type": 2
},
"seed": 954825150,
"version": 174,
"versionNonce": 1275655486,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-11.663815396337668,
18.503271895048556
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "9aQH3lK5BiGz2gV7qkepu",
"type": "line",
"x": 921.9336045950895,
"y": 646.8568558754249,
"width": 0,
"height": 145.2485718741998,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aJ",
"roundness": {
"type": 2
},
"seed": 1129288190,
"version": 456,
"versionNonce": 219841954,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0,
145.2485718741998
]
],
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": null,
"polygon": false
},
{
"id": "-3RcU5qhVn25KaC3oGSXa",
"type": "text",
"x": 79.52314943771307,
"y": 797.1446138471675,
"width": 299.0943298339844,
"height": 26.72192502192206,
"angle": 0,
"strokeColor": "#f08c00",
"backgroundColor": "#b2f2bb",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aK",
"roundness": null,
"seed": 29925950,
"version": 588,
"versionNonce": 1274256766,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "app memory (anonymous RSS)",
"fontSize": 21.377540017537648,
"fontFamily": 6,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "app memory (anonymous RSS)",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "9dmutxb-BYuPKY3YLMBNz",
"type": "text",
"x": 662.5139177451729,
"y": 644.800242828762,
"width": 223.23182678222656,
"height": 20,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aL",
"roundness": null,
"seed": 1731570302,
"version": 186,
"versionNonce": 1421705570,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "heap, stacks, runtime overhead",
"fontSize": 16,
"fontFamily": 6,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "heap, stacks, runtime overhead",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "qtsDTx3wDE0zqGPW-FGzi",
"type": "text",
"x": 1007.4327570911646,
"y": 645.9681210468601,
"width": 115.35987854003906,
"height": 20,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffec99",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aM",
"roundness": null,
"seed": 1649912510,
"version": 305,
"versionNonce": 14630334,
"isDeleted": false,
"boundElements": [],
"updated": 1783442859923,
"link": null,
"locked": false,
"text": "file-backed RSS",
"fontSize": 16,
"fontFamily": 6,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "file-backed RSS",
"autoResize": true,
"lineHeight": 1.25
}
],
"appState": {
"gridSize": 20,
"gridStep": 5,
"gridModeEnabled": false,
"viewBackgroundColor": "#ffffff",
"lockedMultiSelections": {}
},
"files": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB