| Demonstrations of oomkill, the Linux eBPF/bcc version. | |
| oomkill is a simple program that traces the Linux out-of-memory (OOM) killer, | |
| and shows basic details on one line per OOM kill: | |
| # ./oomkill | |
| Tracing oom_kill_process()... Ctrl-C to end. | |
| 21:03:39 Triggered by PID 3297 ("ntpd"), OOM kill of PID 22516 ("perl"), 3850642 pages, loadavg: 0.99 0.39 0.30 3/282 22724 | |
| 21:03:48 Triggered by PID 22517 ("perl"), OOM kill of PID 22517 ("perl"), 3850642 pages, loadavg: 0.99 0.41 0.30 2/282 22932 | |
| The first line shows that PID 22516, with process name "perl", was OOM killed | |
| when it reached 3850642 pages (usually 4 Kbytes per page). This OOM kill | |
| happened to be triggered by PID 3297, process name "ntpd", doing some memory | |
| allocation. | |
| The system log (dmesg) shows pages of details and system context about an OOM | |
| kill. What it currently lacks, however, is context on how the system had been | |
| changing over time. I've seen OOM kills where I wanted to know if the system | |
| was at steady state at the time, or if there had been a recent increase in | |
| workload that triggered the OOM event. oomkill provides some context: at the | |
| end of the line is the load average information from /proc/loadavg. For both | |
| of the oomkills here, we can see that the system was getting busier at the | |
| time (a higher 1 minute "average" of 0.99, compared to the 15 minute "average" | |
| of 0.30). | |
| oomkill can also be the basis of other tools and customizations. For example, | |
| you can edit it to include other task_struct details from the target PID at | |
| the time of the OOM kill. | |
| The following commands can be used to test this program, and invoke a memory | |
| consuming process that exhausts system memory and is OOM killed: | |
| sysctl -w vm.overcommit_memory=1 # always overcommit | |
| perl -e 'while (1) { $a .= "A" x 1024; }' # eat all memory | |
| WARNING: This exhausts system memory after disabling some overcommit checks. | |
| Only test in a lab environment. |