Skip to content

Configuration

oom-oracle daemon

Watches this node and serves the results. Intended to run as a DaemonSet.

Flag Default Purpose
--detector auto auto, ebpf, or poller. auto falls back; ebpf fails loudly instead
--cgroup-root /sys/fs/cgroup Path to the cgroup hierarchy
--proc-root /proc Path to the proc filesystem
--cgroup-prefix / Limit watching to one cgroup subtree
--listen :9090 HTTP API address
--sample-interval 1s How often memory is sampled
--poll-interval 500ms How often the poller checks for kills
--history 60 Memory samples retained per container
--retain 256 Reports retained in memory
--include-non-kubernetes false Also report kills outside the kubepods tree
--kubernetes auto Pod-name resolution: auto, on, off
--node-name $NODE_NAME Node whose pods to watch
--kubeconfig in-cluster Credentials to use instead of the in-cluster ones
--log-level info debug, info, warn, error
--log-format text text or json

Choosing intervals

--sample-interval sets the resolution of the trajectory. A container that allocates faster than one interval will not show a climb, which is why peakBytes is read from the kernel's memory.peak rather than from the samples: it stays honest when the curve has no shape.

--history multiplied by --sample-interval is how far back a report can see. The defaults give sixty seconds. Raising history costs memory per tracked container, and the daemon ships with a 128Mi limit.

--poll-interval matters only to the polling detector. Shortening it narrows but never closes the window in which a torn-down cgroup hides a kill. See Detectors.

Scoping what is watched

--cgroup-prefix limits sampling to one subtree, normally /kubepods.slice. Narrowing it reduces work on a node running much besides Kubernetes.

--include-non-kubernetes keeps kills from cgroups outside the kubepods tree. It is off by default: the probes see every kill on the node, and attributing a host service crash to a pod is worse than missing it.

oom-oracle inspect [pod]

Renders post-mortems from a running daemon. With no argument, every recorded kill is listed newest first. The pod argument accepts a bare name or pod/<name>.

Flag Default Purpose
--daemon http://127.0.0.1:9090 Base URL of the daemon to query
-n, --namespace Filter by namespace
-c, --container Filter by container name
--limit all Maximum reports to render, newest first
-o, --output text text or json

oom-oracle watch

The live dashboard. Reads the same HTTP API as inspect and needs no privileges of its own. See Dashboard.

Flag Default Purpose
--daemon http://127.0.0.1:9090 Base URL of the daemon to watch
--interval 2s How often to refresh. Floored at 500ms

The floor is not arbitrary. Each refresh is two requests against a daemon on a node that is, by the time anyone is watching this, probably under memory pressure, and the daemon samples once a second, so anything faster re-renders the same numbers.

oom-oracle version

Build metadata, as text or json.

Environment

Variable Used for
NODE_NAME The default for --node-name, normally set from the downward API