From 13afe5247ba1601b8a8b0bdbeaa9b3640cd334ec Mon Sep 17 00:00:00 2001 From: Carsten Grohmann Date: Wed, 8 Jan 2020 20:59:20 +0100 Subject: [PATCH] Rollback changed interpretation of last OOM line This is a logical rollback because I was wrong about the interpretation of this line. --- OOMAnalyser.html | 92 ++++++++++++++++++++++++++++++------------------ OOMAnalyser.py | 24 +++++++------ 2 files changed, 71 insertions(+), 45 deletions(-) diff --git a/OOMAnalyser.html b/OOMAnalyser.html index 8946efd..41ba468 100644 --- a/OOMAnalyser.html +++ b/OOMAnalyser.html @@ -212,32 +212,24 @@ function goBack() { The process "" (PID ) requested () memory. - The system couldn't satisfy this request and started the OOM killer to free memory. The OOM killer calculates a score for each process and terminates the process with the highest score "" (PID ) to satisfy the initial memory request.

- The terminated process uses + The terminated process uses () resident memory and has an OOM score of . +

- The system has physical memory and + The system has physical memory and swap space. That's total. +
+ out of physical + memory and out of swap space + are in use.

-

Details of analysis

@@ -315,26 +307,64 @@ r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(? Virtual Memory
(total_vm) - + Virtual memory used by this process. - Resident anonymous memory
(rss) + Resident anonymous memory
(rss) Part of the virtual process memory mapped into RAM. - - - Memory Usage Graphs + Total resident anonymous memory
(rss) + + + All virtual process memory mapped into RAM.
+ TotalRSS = anon-rss + file-rss + shmem-rss + - RAM Summary + Resident anonymous memory
(anon-rss) + + Resident anonymous pages
Part of the virtual process memory mapped into RAM. + + + Resident file mapping memory
(file-rss) + + + Resident file mapping pages
Files which have been mapped into RAM (with + mmap(2).) + + + + Resident shared memory
(shmem-rss) + + + Resident shared memory pages
+ This may include System V shared memory and shared anonymous memory. + + + + + + + Memory Usage + + + + + + Graphs + + + + + RAM Summary
- Swap Summary + Swap Summary
@@ -349,8 +379,7 @@ r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(? RAM pages - Total number of RAM pages - + Total number of RAM pages HighMem/MovableOnly @@ -363,26 +392,22 @@ r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(? Reserved pages - Number of reserved pages - + Number of reserved pages CMA reserved pages 0 - Pages reserved for Contiguous Memory Allocator (CMA) - + Pages reserved for Contiguous Memory Allocator (CMA) Pagetable Cache 0 - Number of pages in pagetable cache - + Number of pages in pagetable cache Number of pages with hardware errors 0 - Pages with uncorrectable memory errors - + Pages with uncorrectable memory errors @@ -393,7 +418,7 @@ r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(? - Active anonymous memory
(active_anon) + Active anonymous memory
(active_anon) Recently used anonymous memory.
These memory pages will usually not swapped out. @@ -700,7 +725,6 @@ r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(?

General

  1. Add a textual summary of the analysis
  2. -
  3. Fix interpretation of the last OOM line
  4. Fix calculation of requested memory in kBytes
  5. ...
diff --git a/OOMAnalyser.py b/OOMAnalyser.py index 1b0ee78..76db5e6 100644 --- a/OOMAnalyser.py +++ b/OOMAnalyser.py @@ -353,8 +353,8 @@ class OOMAnalyser(object): ) REC_KILLED_PROCESS = re.compile( - r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(?P\d+)kB, ' - r'file-rss:(?P\d+)kB, shmem-rss:(?P\d+)kB.*', + r'^Killed process \d+ \(.*\) total-vm:(?P\d+)kB, anon-rss:(?P\d+)kB, ' + r'file-rss:(?P\d+)kB, shmem-rss:(?P\d+)kB.*', re.MULTILINE) lines = [] @@ -606,7 +606,7 @@ class OOMAnalyser(object): def _calc_trigger_process_values(self): """Calculate all values related with the trigger process""" self.results['trigger_proc_requested_memory_pages'] = 2 ** self.results['trigger_proc_order'] - self.results['trigger_proc_requested_memory_pages_kb'] = self.results['trigger_proc_requested_memory_pages'] *\ + self.results['trigger_proc_requested_memory_pages_kb'] = self.results['trigger_proc_requested_memory_pages'] * \ self.results['page_size_kb'] # process gfp_mask if self.results['trigger_proc_gfp_flags'] != '': # None has been is converted to '' @@ -625,11 +625,13 @@ class OOMAnalyser(object): def _calc_killed_process_values(self): """Calculate all values related with the killed process""" - self.results['killed_proc_rss_kb'] = self.results['_processes'][self.results['killed_proc_pid']]['rss'] - self.results['killed_proc_vm_kb'] = self.results['_processes'][self.results['killed_proc_pid']]['total_vm'] + self.results['killed_proc_total_rss_kb'] = self.results['killed_proc_anon_rss_kb'] + \ + self.results['killed_proc_file_rss_kb'] + \ + self.results['killed_proc_shmem_rss_kb'] + self.results['killed_proc_rss_percent'] = int(100 * - self.results['killed_proc_rss_kb'] / - self.results['system_total_ram_kb']) + self.results['killed_proc_total_rss_kb'] / + int(self.results['system_total_ram_kb'])) def _calc_swap_values(self): """Calculate all swap related values""" @@ -649,10 +651,10 @@ class OOMAnalyser(object): # calculate remaining explanation values self.results['system_total_ram_kb'] = self.results['ram_pages'] * self.results['page_size_kb'] self.results['system_total_ramswap_kb'] = self.results['system_total_ram_kb'] + self.results['swap_total_kb'] - self.results['system_total_ram_used_kb'] = self.results['system_total_vm_kb'] + \ - self.results['system_anon_rss_kb'] + \ - self.results['system_file_rss_kb'] + \ - self.results['system_shmem_rss_kb'] + total_rss_pages = 0 + for pid in self.results['_processes'].keys(): + total_rss_pages += self.results['_processes'][pid]['rss'] + self.results['system_total_ram_used_kb'] = total_rss_pages * self.results['page_size_kb'] def _determinate_platform_and_distribution(self): """Determinate platform and distribution"""