How to find out exactly which process was killed by OOM killer?

Abstract: Identify the specific process and PID terminated by the Linux OOM killer using dmesg or journalctl logs.

Created: 2026-10-21 by
To identify the process terminated by the Out-Of-Memory (OOM) killer in Linux, you must examine kernel logs for specific messages indicating memory pressure. The primary method involves using the dmesg command to search for lines containing "Out of memory" or "oom_kill". Additionally, checking the system journal with journalctl provides a comprehensive view of events surrounding the crash, allowing you to pinpoint the exact application and its process ID that consumed excessive resources.

Understanding the OOM Killer Mechanism

The Linux kernel includes a safety mechanism known as the OOM killer. When the system runs out of available physical RAM and swap space, the kernel cannot allocate memory for new requests. To prevent the entire system from hanging indefinitely, the kernel invokes the OOM killer to select one or more processes to terminate. This action frees up memory pages, allowing the system to continue operating, albeit potentially with reduced functionality if critical services are killed.

Identifying which process was chosen is crucial for troubleshooting. It helps administrators determine if an application has a memory leak, if the server specifications are insufficient for the workload, or if there is a configuration issue leading to uncontrolled resource consumption. Without this information, diagnosing sudden service interruptions can be nearly impossible.

Using dmesg to Locate OOM Events

The most direct way to find evidence of an OOM kill is through the kernel ring buffer, accessible via the dmesg utility. This command displays messages generated by the kernel, including hardware events, driver states, and memory management decisions. You should filter these logs specifically for OOM-related entries.

dmesg | grep -i "out of memory"

This command will return lines similar to the following:

[12345.678901] Out of memory: Killed process 12345 (myapp) total-vm:2048000kB, anon-rss:1024000kB, file-rss:0kB, shmem-rss:0kB

In this output, several key pieces of information are provided. The number 12345 represents the Process ID (PID). The name myapp identifies the executable that was running. The memory statistics provide context on how much virtual memory (total-vm) and resident set size (anon-rss) the process was holding at the time of termination. This data is essential for understanding the scale of the memory abuse.

Checking the System Journal

On modern Linux distributions using systemd, detailed logs are stored in the journal. While dmesg shows kernel messages, the journal captures broader system events, which can help correlate the OOM kill with other activities. Use the following command to search for OOM events in the journal:

journalctl -k | grep -i "oom"

The -k flag restricts the output to kernel messages only, mirroring the functionality of dmesg. If you need to see user-space logs alongside kernel messages, remove the -k flag but ensure your grep pattern is broad enough to catch related warnings. Sometimes, the application itself may log errors just before it is killed, providing additional clues about what it was doing when it ran out of memory.

Analyzing Memory Statistics

Once you have identified the PID and the process name, analyzing the memory statistics from the log entry is the next step. The total-vm value indicates the total virtual address space mapped by the process. A very high total-vm might suggest the application is allocating large buffers or mapping files into memory. The anon-rss (Anonymous Resident Set Size) is often more telling, as it represents the actual physical memory used by the process that cannot be swapped out easily or shared with other processes.

If you suspect a specific process is prone to leaks, you can monitor its memory usage over time using tools like htop or by writing a script that periodically checks the /proc/[pid]/status file. This proactive monitoring can help you detect memory growth patterns before they trigger the OOM killer. For related troubleshooting techniques involving system stability, you might also want to review how to handle connection errors, such as those found in Troubleshooting kex_exchange_identification Error in Linux SSH Connection, which can sometimes mask underlying resource issues.

Preventing Future OOM Kills

After identifying the culprit, the goal is to prevent recurrence. This may involve optimizing the application's code, increasing system RAM, or configuring cgroups to limit the memory usage of specific services. Linux allows you to set memory limits using systemd units or Docker containers. By setting MemoryLimit or memory.limit_in_bytes, you ensure that a single misbehaving process does not consume all available memory, thereby protecting the rest of the system.

Another strategy is to tune the kernel's OOM behavior. The vm.overcommit_memory sysctl parameter controls how the kernel handles memory allocation requests. Setting this to 2 enables strict overcommit accounting, which can prevent allocations that would likely fail later, though it requires careful tuning to avoid breaking legitimate applications. Understanding these settings is part of a robust Linux administration workflow, similar to managing file systems as described in How to Shrink Sparse Files in Linux After Copying Them Without the -S Operator.

Frequently Asked Questions

Can I recover a process killed by the OOM killer?

No, once the OOM killer terminates a process, the memory it occupied is reclaimed by the kernel, and the process state is destroyed. You cannot restore the process to its previous state. You must restart the application manually or rely on a service manager like systemd to automatically restart it if configured to do so.

Why doesn't dmesg show any OOM messages?

If dmesg does not show OOM messages, it is possible that the system did not actually run out of memory in a way that triggered the killer. Alternatively, the logs may have been rotated or cleared since the event occurred. Check the age of your logs using dmesg --time-format or look at the journal timestamp to ensure you are searching within the correct timeframe.

What is the difference between OOM kill and a segmentation fault?

An OOM kill is initiated by the kernel when the system lacks free memory, resulting in a clean termination signal (SIGKILL) sent to the process. A segmentation fault is typically caused by the application accessing invalid memory addresses due to programming errors, generating a SIGSEGV signal. The former is a system-level resource exhaustion issue, while the latter is usually an application-level bug.

How can I limit memory usage for a specific service?

You can limit memory usage by editing the service unit file in systemd. Add the MemoryMax directive followed by the desired limit (e.g., MemoryMax=512M). After saving the file, reload the daemon with systemctl daemon-reload and restart the service. This ensures the service is killed if it exceeds the limit, preventing it from affecting other services.

Is it safe to increase swap space to avoid OOM kills?

Increasing swap space can delay OOM kills by providing more virtual memory, but it does not solve the underlying memory shortage. Excessive swapping leads to severe performance degradation because disk I/O is much slower than RAM. It is generally better to fix the memory leak or add physical RAM rather than relying on swap as a permanent solution.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More