OOMKilled with no application-level out-of-memory error usually means the runtime inside the container never learned about the container's memory limit. A JVM on an old base image, or a Node process with a manually set max-old-space-size copied from a bigger host, will size itself against total host memory and get killed by the kernel long before it thinks it is under pressure.
Several services were being OOMKilled multiple times per day with no heap dump and no application error — the kernel killed the process before the runtime could report anything. Some services ran a JVM on a base image predating reliable container awareness, and others ran Node with a heap ceiling set higher than the container's own limit. Raising the memory limits had been tried and simply moved the threshold.
Containerized JVM and Node services on Kubernetes, built from a mix of base images maintained by different teams.
AceMQ mapped each affected container's runtime memory configuration against its cgroup limit to identify which processes were unaware of the limit and which were simply misconfigured. Both classes were fixed at the image and manifest level rather than by raising limits until the killing stopped.
The recurring OOMKills were eliminated, and memory limits are now derived from measured usage plus headroom instead of being incremented after each incident.
Stopping recurring build agent and node outages caused by unpruned Docker build cache, dangling images, and orphaned volumes filling the filesystem.
Restructuring Dockerfiles and CI caching so builds reuse layers properly, cutting pipeline time and image size across a large service estate.
Whether you need architecture advisory, 24/7 support, or full managed services, AceMQ has the expertise to help.