886 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			886 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html lang="en">
 | 
						|
<head>
 | 
						|
    <script src="__javascript__/OOMAnalyser.js" defer="defer"></script>
 | 
						|
    <meta charset="UTF-8">
 | 
						|
    <title>OOM Analyser</title>
 | 
						|
 | 
						|
    <style>
 | 
						|
        /* Use BEM (Block__Element--Modifier) naming convention */
 | 
						|
 | 
						|
        .text--align-right {
 | 
						|
            text-align: right;
 | 
						|
        }
 | 
						|
 | 
						|
        .text__superscript {
 | 
						|
            vertical-align: super;
 | 
						|
            font-size: 0.83em;
 | 
						|
        }
 | 
						|
        .js-text--default-hide {
 | 
						|
            /* empty just used to hide elements in the default view */
 | 
						|
 | 
						|
        }
 | 
						|
        .js-text--default-show {
 | 
						|
            /* empty just used to show elements in the default view */
 | 
						|
        }
 | 
						|
 | 
						|
        .table__sub-section--bold {
 | 
						|
            font-weight: bold;
 | 
						|
            padding: 5px;
 | 
						|
        }
 | 
						|
 | 
						|
        a {
 | 
						|
            text-decoration: none;
 | 
						|
        }
 | 
						|
        a:hover, a:active {
 | 
						|
            text-decoration: underline;
 | 
						|
        }
 | 
						|
 | 
						|
        .a--small {
 | 
						|
            font-size: small;
 | 
						|
            font-weight: unset;
 | 
						|
            padding: unset;
 | 
						|
        }
 | 
						|
 | 
						|
        .a__footnote {
 | 
						|
            vertical-align: super;
 | 
						|
            font-size: 0.83em;
 | 
						|
        }
 | 
						|
 | 
						|
        .h2--no-newline {
 | 
						|
            /* Prevent a linebreak after headline to a place a link on the same line */
 | 
						|
            /* Place such headlines within a div container if the next element can be invisible */
 | 
						|
            display: inline-block;
 | 
						|
        }
 | 
						|
 | 
						|
        .mem-usage__svg {
 | 
						|
            display: block;
 | 
						|
            max-height: 200px;
 | 
						|
        }
 | 
						|
 | 
						|
        table {
 | 
						|
            border-collapse: collapse;
 | 
						|
            padding: 10px;
 | 
						|
            table-layout: fixed;
 | 
						|
            text-align: left;
 | 
						|
            width: 100%;
 | 
						|
        }
 | 
						|
 | 
						|
        .pstable__table--noborder {
 | 
						|
            border: none;
 | 
						|
            text-align: right;
 | 
						|
            background-color: unset;
 | 
						|
            table-layout: fixed;
 | 
						|
        }
 | 
						|
 | 
						|
        .pstable__table--noborder thead * {
 | 
						|
            font-weight: bold;
 | 
						|
            padding-right: unset;
 | 
						|
            padding-left: unset;
 | 
						|
            white-space: nowrap;
 | 
						|
            /* overwrite the generic th/td settings */
 | 
						|
            border: none;
 | 
						|
        }
 | 
						|
 | 
						|
        .pstable__table--noborder tbody * {
 | 
						|
            padding-left: 5px;
 | 
						|
            padding-right: 18px;
 | 
						|
            /* overwrite the generic th/td settings */
 | 
						|
            border: none;
 | 
						|
        }
 | 
						|
 | 
						|
        /* Align last both columns to left in the process table */
 | 
						|
        .pstable__table--noborder td:nth-of-type(9) {
 | 
						|
            text-align: left;
 | 
						|
        }
 | 
						|
        .pstable__table--noborder td:nth-of-type(10) {
 | 
						|
            text-align: left;
 | 
						|
        }
 | 
						|
 | 
						|
        .js-pstable__killedproc--bgcolor {
 | 
						|
            background-color: #FFD2D2;
 | 
						|
        }
 | 
						|
        .js-pstable__triggerproc--bgcolor {
 | 
						|
            background-color: #FEEFB3;
 | 
						|
        }
 | 
						|
 | 
						|
        .pstable__row-pid--width {
 | 
						|
            width: 8ch;
 | 
						|
        }
 | 
						|
        .pstable__row-numeric--width {
 | 
						|
            width: 10ch;
 | 
						|
        }
 | 
						|
        .pstable__row-pages--width {
 | 
						|
            width: 16ch;
 | 
						|
        }
 | 
						|
        .pstable__row-oom-score-adj--width {
 | 
						|
            width: 16ch;
 | 
						|
        }
 | 
						|
        .pstable__row-sort--width {
 | 
						|
            padding-left: unset;
 | 
						|
            padding-right: unset;
 | 
						|
            width: 10px;
 | 
						|
            display: inline-block;
 | 
						|
        }
 | 
						|
 | 
						|
        th {
 | 
						|
            font-weight: bold;
 | 
						|
            font-size: large;
 | 
						|
            padding: 5px;
 | 
						|
        }
 | 
						|
 | 
						|
        th, td {
 | 
						|
            border: 1px solid black;
 | 
						|
            word-wrap: break-word;
 | 
						|
        }
 | 
						|
 | 
						|
        .js-notify_box__msg--warning {
 | 
						|
            color: #9F6000;
 | 
						|
            background-color: #FEEFB3;
 | 
						|
        }
 | 
						|
        .js-notify_box__msg--error {
 | 
						|
            color: #D8000C;
 | 
						|
            background-color: #FFD2D2;
 | 
						|
        }
 | 
						|
        .js-text--display-none {
 | 
						|
            display: none;
 | 
						|
        }
 | 
						|
 | 
						|
        .license__text {
 | 
						|
            font-size: small;
 | 
						|
        }
 | 
						|
 | 
						|
        .notify_box {
 | 
						|
            width: 100%;
 | 
						|
        }
 | 
						|
 | 
						|
        .terminal {
 | 
						|
            font-family: monospace;
 | 
						|
            overflow: auto;
 | 
						|
        }
 | 
						|
 | 
						|
        .table-of-contents {
 | 
						|
            float: right;
 | 
						|
            width: 40%;
 | 
						|
            background: #eee;
 | 
						|
            font-size: 0.8em;
 | 
						|
            padding: 1em 2em;
 | 
						|
            margin: 0 0 0.5em 0.5em;
 | 
						|
        }
 | 
						|
        .table-of-contents ul {
 | 
						|
            padding: 0;
 | 
						|
        }
 | 
						|
        .table-of-contents li {
 | 
						|
            margin: 0 0 0.25em 0;
 | 
						|
        }
 | 
						|
    </style>
 | 
						|
    <script>
 | 
						|
function goBack() {
 | 
						|
    window.history.back();
 | 
						|
}
 | 
						|
    </script>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
 | 
						|
 | 
						|
<h1>Analyse and visualise Linux OOM output</h1>
 | 
						|
 | 
						|
<nav class="table-of-contents" id="table_of_contents" role="navigation">
 | 
						|
    <h2>On this page</h2>
 | 
						|
    <ul>
 | 
						|
    </ul>
 | 
						|
</nav>
 | 
						|
 | 
						|
<p>
 | 
						|
    OOMAnalyser is a small project to transform the OOM message of a Linux kernel into a more user-friendly format.
 | 
						|
</p>
 | 
						|
<p>
 | 
						|
    OOMAnalyser consists of a web page into whose input field the OOM message is copied. JavaScript code extracts
 | 
						|
    the data from it and displays the details. All processing takes place in the browser. No data is transferred
 | 
						|
    to external servers. This makes it possible to use a locally stored copy of the website for analysis.
 | 
						|
 | 
						|
    This project is written in <a href="https://www.python.org">Python</a> and uses
 | 
						|
    <a href="https://www.transcrypt.org/">Transcrypt</a> to translate Python code into JavaScript.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<div class="terminal notify_box js-text--default-hide js-text--display-none" id="notify_box"></div>
 | 
						|
 | 
						|
<div class="js-text--default-show" id="input">
 | 
						|
    <h2 id="step1">Step 1 - Enter your OOM message</h2>
 | 
						|
    <textarea autocomplete="off" cols="100" id="textarea_oom" onfocusin="OOMAnalyser.OOMDisplayInstance.empty_textarea_oom()" rows="20" title="OOM input field">Add your OOMhere</textarea>
 | 
						|
    <br/>
 | 
						|
    <button onclick="OOMAnalyser.OOMDisplayInstance.analyse_and_show()" title="Analyse the OOM from the input area and show it">Analyse</button>
 | 
						|
    <button onclick="OOMAnalyser.OOMDisplayInstance.reset_form()" title="Clean the input area">Reset</button>
 | 
						|
    <button onclick="OOMAnalyser.OOMDisplayInstance.copy_example_to_form()" title="Copy an example OOM into the input area">Insert example</button>
 | 
						|
</div>
 | 
						|
 | 
						|
<div class="js-text--default-hide js-text--display-none" id="analysis">
 | 
						|
 | 
						|
<h2 id="step2">Step 2 - Results</h2>
 | 
						|
 | 
						|
    <p>
 | 
						|
        Go back to
 | 
						|
        <a href="javascript:void(0);" onclick="OOMAnalyser.OOMDisplayInstance.reset_form()" title="Run a new analysis">"Step 1 - Enter your OOM message"</a>
 | 
						|
        to run a new analysis.
 | 
						|
    </p>
 | 
						|
 | 
						|
    <h3>Summary</h3>
 | 
						|
    <div id="explanation">
 | 
						|
        <p>
 | 
						|
            The process "<span class="trigger_proc_name"></span>" (PID <span class="trigger_proc_pid"></span>)
 | 
						|
            requested <span class="trigger_proc_requested_memory_pages_kb"></span>
 | 
						|
            (<span class="trigger_proc_requested_memory_pages"></span>) 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
 | 
						|
            "<span class="killed_proc_name"></span>" (PID <span class="killed_proc_pid"></span>) to satisfy the initial
 | 
						|
            memory request.
 | 
						|
        </p>
 | 
						|
        <p>
 | 
						|
            The terminated process uses <span class="killed_proc_rss_percent text--align-right"></span>
 | 
						|
            (<span class="killed_proc_total_rss_kb"></span>) resident memory and has an OOM score of
 | 
						|
            <span class="killed_proc_score"></span>.
 | 
						|
        </p>
 | 
						|
        <p>
 | 
						|
            The system has <span class="system_total_ram_kb"></span> physical memory and
 | 
						|
            <span class="swap_total_kb"></span> swap space. That's <span class="system_total_ramswap_kb"></span> total.
 | 
						|
            <span class="system_total_used_percent text--align-right"></span>
 | 
						|
            (<span class="system_total_ram_used_kb"></span> out of <span class="system_total_ram_kb"></span>) physical
 | 
						|
            memory and <span class="system_swap_used_percent text--align-right"></span>
 | 
						|
            (<span class="swap_used_kb"></span> out of <span class="swap_total_kb"></span>) swap space are in use.
 | 
						|
        </p>
 | 
						|
    </div>
 | 
						|
 | 
						|
    <h3>Details of analysis</h3>
 | 
						|
    <p>
 | 
						|
        The result of the analysis is displayed in three columns. The first column is used to name the property
 | 
						|
        including the original OOM identifier in brackets. The extracted information is displayed in the second column.
 | 
						|
        The last column contains further details and additional information.
 | 
						|
    </p>
 | 
						|
    <table>
 | 
						|
        <!--
 | 
						|
        <thead>
 | 
						|
        <tr>
 | 
						|
            <th scope="col"></th>
 | 
						|
            <th scope="col">Entry</th>
 | 
						|
            <th scope="col">Description</th>
 | 
						|
        </tr>
 | 
						|
        </thead>
 | 
						|
        -->
 | 
						|
        <tbody>
 | 
						|
 | 
						|
        <!-- Trigger process -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Trigger Process</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td class="text--align-right"><span class="trigger_proc_name"></span> (PID <span class="trigger_proc_pid"></span>)</td>
 | 
						|
            <td>This process requests memory and is triggering thereby the OOM situation.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Memory allocation flags<br>(gfp_mask)</td>
 | 
						|
            <td class="trigger_proc_gfp_mask text--align-right"></td>
 | 
						|
            <td>These flags are used to control the kernel internal memory allocation<br>
 | 
						|
                GFP stands for <code>__get_free_pages()</code>.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Node mask to show on which CPU Cores this process can run<br>(nodemask)</td>
 | 
						|
            <td class="trigger_proc_nodemask text--align-right"></td>
 | 
						|
            <td>Bit mask indicating the cores on which the process can run.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Requested memory<br>(order)</td>
 | 
						|
            <td class="text--align-right">
 | 
						|
                <span class="trigger_proc_requested_memory_pages"></span> (2<span class="trigger_proc_order text__superscript"></span>) pages /
 | 
						|
                <span class="trigger_proc_requested_memory_pages_kb"></span>
 | 
						|
            </td>
 | 
						|
            <td>The kernel specifies the requested number of pages as exponent of power of two.
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Adjust oom-killer score<br>(oom_score_adj)</td>
 | 
						|
            <td class="trigger_proc_oomscore text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                This value is added to the badness score before it's used to determine the process to be killed.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Killed Process -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th scope="row" colspan="3">Killed Process</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td class="text--align-right">
 | 
						|
                <span class="killed_proc_name"></span>
 | 
						|
                (PID <span class="killed_proc_pid"></span>)
 | 
						|
            </td>
 | 
						|
            <td>Process killed by Linux kernel to satisfy the memory request.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>OOM Score<br>(score)</td>
 | 
						|
            <td class="killed_proc_score text--align-right"></td>
 | 
						|
            <td>Programs with the highest OOM score are terminated first.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Virtual Memory <br> (total_vm) </td>
 | 
						|
            <td class="killed_proc_total_vm_kb text--align-right"></td>
 | 
						|
            <td>Virtual memory used by this process.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Total resident anonymous memory <br> (rss)</td>
 | 
						|
            <td class="killed_proc_total_rss_kb text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                All virtual process memory mapped into RAM. <br>
 | 
						|
                <code>TotalRSS = anon-rss + file-rss + shmem-rss</code>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Resident anonymous memory <br> (anon-rss)</td>
 | 
						|
            <td class="killed_proc_anon_rss_kb text--align-right"></td>
 | 
						|
            <td>Resident anonymous pages <br> Part of the virtual process memory mapped into RAM.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Resident file mapping memory <br> (file-rss)</td>
 | 
						|
            <td class="killed_proc_file_rss_kb text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Resident file mapping pages <br> Files which have been mapped into RAM (with
 | 
						|
                <a href="http://man7.org/linux/man-pages/man2/mmap.2.html">mmap(2).</a>)
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Resident shared memory <br> (shmem-rss)</td>
 | 
						|
            <td class="killed_proc_shmem_rss_kb text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Resident shared memory pages <br>
 | 
						|
                This may include System V shared memory and shared anonymous memory.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Memory Usage -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Memory Usage</th>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Graphs -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <td class="table__sub-section--bold" colspan="3" scope="row">Graphs</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>RAM Summary</td>
 | 
						|
            <td colspan="2"><div id="svg_ram"></div></td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Swap Summary</td>
 | 
						|
            <td colspan="2"><div id="svg_swap"></div></td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Swap Usage -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <td class="table__sub-section--bold" colspan="3" scope="row">Swap Usage</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Swap Total</td>
 | 
						|
            <td class="swap_total_kb text--align-right"></td>
 | 
						|
            <td>Total amount of swap space available.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Swap Free</td>
 | 
						|
            <td class="swap_free_kb text--align-right"></td>
 | 
						|
            <td>Amount of swap space that is currently unused.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Swap Cached</td>
 | 
						|
            <td class="swap_cache_kb text--align-right"></td>
 | 
						|
            <td>Memory that once was swapped out, is swapped back in
 | 
						|
                but still also is in the swap file.  (If memory pressure
 | 
						|
                is high, these pages don't need to be swapped out
 | 
						|
                again because they are already in the swap file.  This
 | 
						|
                saves I/O).
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Swap Used</td>
 | 
						|
            <td class="swap_used_kb text--align-right"></td>
 | 
						|
            <td>Amount of used swap space w/o cached swap <br>
 | 
						|
                (<code>SwapUsed = SwapTotal - SwapFree -SwapCache</code>)
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Page Usage -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <td class="table__sub-section--bold" colspan="3" scope="row">Memory Pages</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>RAM pages</td>
 | 
						|
            <td class="ram_pages text--align-right"></td>
 | 
						|
            <td>Total number of RAM pages</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>HighMem/MovableOnly</td>
 | 
						|
            <td class="highmem_pages text--align-right"></td>
 | 
						|
            <td>Number of pages in the High Memory Area or marked movable for Contiguous Memory Allocator (CMA).
 | 
						|
                <br>
 | 
						|
                HighMem pages are also counted in the total page number.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Reserved pages</td>
 | 
						|
            <td class="reserved_pages text--align-right"></td>
 | 
						|
            <td>Number of reserved pages</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>CMA reserved pages</td>
 | 
						|
            <td class="cma_pages text--align-right">0</td>
 | 
						|
            <td>Pages reserved for Contiguous Memory Allocator (CMA)</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Pagetable Cache</td>
 | 
						|
            <td class="pagetablecache_pages text--align-right">0</td>
 | 
						|
            <td>Number of pages in pagetable cache</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Number of pages with hardware errors</td>
 | 
						|
            <td class="hwpoisoned_pages text--align-right">0</td>
 | 
						|
            <td>Pages with uncorrectable memory errors</td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Memory Usage Details -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <td class="table__sub-section--bold" colspan="3" scope="row">Memory Usage Details</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Active anonymous memory <br> (active_anon)</td>
 | 
						|
            <td class="active_anon_pages text--align-right"></td>
 | 
						|
            <td>Recently used anonymous memory.<br>
 | 
						|
                These memory pages will usually not swapped out.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Inactive anonymous memory <br> (inactive_anon)</td>
 | 
						|
            <td class="inactive_anon_pages text--align-right"></td>
 | 
						|
            <td>Least recently used anonymous memory.<br>
 | 
						|
                These memory pages can be swapped out.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Isolated anonymous memory <br> (isolated_anon)</td>
 | 
						|
            <td class="isolated_anon_pages text--align-right"></td>
 | 
						|
            <td>Memory isolation is used to separate memory between different virtual machines.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Active Pagecache <br> (active_file)</td>
 | 
						|
            <td class="active_file_pages text--align-right"></td>
 | 
						|
            <td>Pagecache that has been used more recently and usually not reclaimed unless absolutely necessary.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Inactive Pagecache <br> (inactive_file)</td>
 | 
						|
            <td class="inactive_file_pages text--align-right"></td>
 | 
						|
            <td>Pagecache which has been less recently used. It can be reclaimed without huge performance impact.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Isolated Pagecache <br> (isolated_file)</td>
 | 
						|
            <td class="isolated_file_pages text--align-right"></td>
 | 
						|
            <td>Memory isolation is used to separate memory between different virtual machines.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Unevictable Pages <br> (unevictable)</td>
 | 
						|
            <td class="unevictable_pages text--align-right"></td>
 | 
						|
            <td>Unevictable memory. It can't be swapped out because the pages are owned by ramfs or protected by
 | 
						|
                <a href="http://man7.org/linux/man-pages/man3/mlock.5.html" target="_blank">mlock(3)</a> /
 | 
						|
                <a href="http://man7.org/linux/man-pages/man2/shmctl.2.html" target="_blank">shmctl(SHM_LOCK)</a>.
 | 
						|
                Unevictable pages are managed by kernels LRU framework.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Dirty Pages <br> (dirty)</td>
 | 
						|
            <td class="dirty_pages text--align-right"></td>
 | 
						|
            <td>Memory which is waiting to get written back to the disk.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Writeback <br> (writeback)</td>
 | 
						|
            <td class="writeback_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Memory which is actively being written back to the disk.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Unstable <br> (unstable)</td>
 | 
						|
            <td class="unstable_pages text--align-right"></td>
 | 
						|
            <td>Not yet committed to stable storage.</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Slab Reclaimable <br> (slab_reclaimable)</td>
 | 
						|
            <td class="slab_reclaimable_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Slab is a in-kernel data structures cache. Part of Slab, that might be reclaimed, such as caches.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
                <br>
 | 
						|
                Additional details are listed in
 | 
						|
                <a href="http://man7.org/linux/man-pages/man5/slabinfo.5.html" target="_blank">slabinfo(5)</a> also.
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Slab Unreclaimable <br> (slab_unreclaimable)</td>
 | 
						|
            <td class="slab_unreclaimable_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Part of Slab, that cannot be reclaimed on memory pressure.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Mapped <br> (mapped)</td>
 | 
						|
            <td class="mapped_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Files which have been mapped into memory (with
 | 
						|
                <a href="http://man7.org/linux/man-pages/man2/mmap.2.html">mmap(2)</a>), such as libraries.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Shared Memory <br> (shmem)</td>
 | 
						|
            <td class="shmem_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Amount of memory consumed in
 | 
						|
                <a href="http://man7.org/linux/man-pages/man5/tmpfs.5.html">tmpfs(5)</a>
 | 
						|
                filesystems.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Pagetables <br> (pagetables)</td>
 | 
						|
            <td class="pagetables_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Amount of memory dedicated to the lowest level of pagetables.
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Bounce <br> (bounce)</td>
 | 
						|
            <td class="bounce_pages text--align-right"></td>
 | 
						|
            <td>
 | 
						|
                Memory used for block device "bounce buffers".
 | 
						|
                <a class="a__footnote" href="#footnote-proc5">[1]</a>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>free <br> (free)</td>
 | 
						|
            <td class="free_pages text--align-right"></td>
 | 
						|
            <td></td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>free_pcp <br> (free_pcp)</td>
 | 
						|
            <td class="free_pcp_pages text--align-right"></td>
 | 
						|
            <td></td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>free_cma <br> (free_cma)</td>
 | 
						|
            <td class="free_cma_pages text--align-right"></td>
 | 
						|
            <td></td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Total Pagecache</td>
 | 
						|
            <td class="pagecache_total_pages text--align-right"></td>
 | 
						|
            <td></td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Operating System -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th scope="row" colspan="3">Operating System</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Kernel</td>
 | 
						|
            <td class="kernel_version text--align-right text--align-right"></td>
 | 
						|
            <td></td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Distribution</td>
 | 
						|
            <td class="dist text--align-right text--align-right"></td>
 | 
						|
            <td>Guessed from the kernel version</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Platform</td>
 | 
						|
            <td class="platform text--align-right text--align-right"></td>
 | 
						|
            <td>Guessed from the kernel version</td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td>Page size</td>
 | 
						|
            <td class="page_size_kb text--align-right"></td>
 | 
						|
            <td>Guessed</td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
 | 
						|
        <!-- Memory Chunks -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Memory Chunks</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td colspan="2" class="terminal">
 | 
						|
                <pre class="mem_node_info"></pre>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Process Table</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td class="terminal " colspan="2">
 | 
						|
                <table class="pstable__table--noborder">
 | 
						|
                    <thead>
 | 
						|
                        <tr>
 | 
						|
                            <td class="pstable__row-pid--width">pid
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_pid" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('pid')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-numeric--width">uid
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_uid" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('uid')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-numeric--width">tgid
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_tgid" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('tgid')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-pages--width">total_vm
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_total_vm_pages" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('total_vm_pages')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-pages--width">rss
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_rss_pages" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('rss_pages')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-pages--width">nr_ptes
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_nr_ptes_pages" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('nr_ptes_pages')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-pages--width">swapents
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_swapents_pages" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('swapents_pages')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td class="pstable__row-oom-score-adj--width">oom_score_adj
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_oom_score_adj" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('oom_score_adj')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td>name
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_name" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('name')"></a>
 | 
						|
                            </td>
 | 
						|
                            <td>notes
 | 
						|
                                <a class="pstable__row-sort--width" href="javascript:void(0);"
 | 
						|
                                   id="pstable_sort_notes" onclick="OOMAnalyser.OOMDisplayInstance.sort_pstable('notes')"></a>
 | 
						|
                            </td>
 | 
						|
                        </tr>
 | 
						|
                    </thead>
 | 
						|
                    <tbody id="process_table">
 | 
						|
                    </tbody>
 | 
						|
                </table>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Hardware Details -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Hardware Details</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td colspan="2" class="terminal">
 | 
						|
                <pre class="hardware_info"></pre>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Kernel Call Tree -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Kernel Call Trace</th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td colspan="2" class="terminal">
 | 
						|
                <pre class="call_trace"></pre>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
 | 
						|
        <!-- Initial OOM -->
 | 
						|
 | 
						|
        <tr>
 | 
						|
            <th colspan="3" scope="row">Entire OOM Message
 | 
						|
                <a class="a--small" href="javascript:void(0);" id="oom_toogle_msg" onclick="OOMAnalyser.OOMDisplayInstance.toggle_oom()" title="Click to show/hide full OOM message">(click to hide)</a>
 | 
						|
            </th>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
            <td></td>
 | 
						|
            <td colspan="2" class="terminal">
 | 
						|
                <pre id="oom"></pre>
 | 
						|
            </td>
 | 
						|
        </tr>
 | 
						|
        </tbody>
 | 
						|
    </table>
 | 
						|
 | 
						|
    <p>
 | 
						|
        Go back to
 | 
						|
        <a href="javascript:void(0);" onclick="OOMAnalyser.OOMDisplayInstance.reset_form()" title="Run a new analysis">"Step 1 - Enter your OOM message"</a>
 | 
						|
        to run a new analysis.
 | 
						|
    </p>
 | 
						|
 | 
						|
    <h2 id="h2-footnotes">Footnotes</h2>
 | 
						|
    <ol>
 | 
						|
        <li id="footnote-proc5"><cite><a href="http://man7.org/linux/man-pages/man5/proc.5.html" target="_blank">
 | 
						|
	proc(5) - process information pseudo-filesystem</a></cite> (<a href="#" onclick="goBack()">Go Back</a>)
 | 
						|
        </li>
 | 
						|
    </ol>
 | 
						|
</div>
 | 
						|
 | 
						|
<h2 id="infos">Further Information</h2>
 | 
						|
<ol>
 | 
						|
    <li>
 | 
						|
        <a href="https://man7.org/">Linux man pages online</a>
 | 
						|
    </li>
 | 
						|
    <li>
 | 
						|
        <a href="https://utcc.utoronto.ca/~cks/space/blog/linux/DecodingPageAllocFailures">
 | 
						|
            Decoding the Linux kernel's page allocation failure messages
 | 
						|
        </a>
 | 
						|
    </li>
 | 
						|
    <li>
 | 
						|
        <a href="http://elearningmedium.com/linux-kernel-oom-log-analysis/">Linux Kernel OOM Log Analysis</a>
 | 
						|
    </li>
 | 
						|
    <li>
 | 
						|
        <a href="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git">Kernel Source code</a> with
 | 
						|
        <a href="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/mm/oom_kill.c"><code>mm/omm_kill.c</code></a>
 | 
						|
        as starting point at <a href="https://www.kernel.org">kernel.org</a>
 | 
						|
    </li>
 | 
						|
    <li>
 | 
						|
        A more comfortable kernel source code browser with
 | 
						|
        <a href="https://elixir.bootlin.com/linux/latest/source/mm/oom_kill.c"><code>mm/omm_kill.c</code></a> at
 | 
						|
        <a href="https://elixir.bootlin.com/">elixir.bootlin.com</a>
 | 
						|
    </li>
 | 
						|
</ol>
 | 
						|
 | 
						|
<div>
 | 
						|
    <h2 class="h2--no-newline" id="changes">Changelog</h2>
 | 
						|
    <a class="a--small" href="javascript:void(0);" onclick="OOMAnalyser.toggle('changelog')"
 | 
						|
       title="Show / hide news">(click to show / hide)</a>
 | 
						|
</div>
 | 
						|
 | 
						|
<div class="js-text--default-hide js-text--display-none" id="changelog">
 | 
						|
    <h3>Version 0.4.0 - 2020-XX-XX:</h3>
 | 
						|
 | 
						|
    <h4>General</h4>
 | 
						|
    <ol>
 | 
						|
        <li>Add a textual summary of the analysis</li>
 | 
						|
        <li>Fix calculation of requested memory in kBytes</li>
 | 
						|
        <li>Fix issue that prevents units from being copied</li>
 | 
						|
        <li>Show additional information in process table</li>
 | 
						|
        <li>Add sorting process table</li>
 | 
						|
        <li>...</li>
 | 
						|
    </ol>
 | 
						|
 | 
						|
    <h4>Note</h4>
 | 
						|
    See the
 | 
						|
    <a href="https://github.com/CarstenGrohmann/OOMAnalyser/compare/v0.3.0...master"
 | 
						|
       title="commit history">commit history</a>
 | 
						|
    of the repository for a full list of changes.
 | 
						|
 | 
						|
    <h3>Version 0.3.0 - 2019-11-24:</h3>
 | 
						|
 | 
						|
    <h4>General</h4>
 | 
						|
    <ol>
 | 
						|
        <li>Improve presentation</li>
 | 
						|
        <li>Separate analysis and visualisation code</li>
 | 
						|
        <li>Use CSS classes to control the visibility</li>
 | 
						|
        <li>Strip columns left to the message automatically</li>
 | 
						|
        <li>Lot if internal improvements and restructuring</li>
 | 
						|
        <li>Bug fixes</li>
 | 
						|
    </ol>
 | 
						|
<!--
 | 
						|
    <h4>Known issues</h4>
 | 
						|
    <ol>
 | 
						|
        <li>none</li>
 | 
						|
    </ol>
 | 
						|
-->
 | 
						|
    <h4>Note</h4>
 | 
						|
    See the
 | 
						|
    <a href="https://github.com/CarstenGrohmann/OOMAnalyser/compare/v0.2.0...v0.3.0"
 | 
						|
       title="commit history">commit history</a>
 | 
						|
    of the repository for a full list of changes.
 | 
						|
</div>
 | 
						|
 | 
						|
<div>
 | 
						|
    <h2 class="h2--no-newline" id="install">Local Installation</h2>
 | 
						|
    <a class="a--small" href="javascript:void(0);" onclick="OOMAnalyser.toggle('installation')"
 | 
						|
       title="Show / hide installation guide">(click to show / hide)</a>
 | 
						|
</div>
 | 
						|
 | 
						|
<div class="js-text--default-hide js-text--display-none" id="installation">
 | 
						|
    Installing OOMAnalyser is quite easy since OOMAnalyser consists only of two files, a
 | 
						|
    HTML file and a JavaScript file. Both can be stored locally to use OOMAnalyser
 | 
						|
    without an Internet connection.
 | 
						|
 | 
						|
    <h3>Installation steps</h3>
 | 
						|
    <ol>
 | 
						|
        <li>Create an own directory and add a <code>__javascript__</code> subdirectory</li>
 | 
						|
        <li>Download the <a download="OOMAnalyser.html" href="OOMAnalyser.html">HTML file</a> to the main directory and
 | 
						|
            the <a download="OOMAnalyser.js" href="__javascript__/OOMAnalyser.js">JavaScript file</a> to the
 | 
						|
            <code>__javascript__</code> subdirectory
 | 
						|
        </li>
 | 
						|
        <li>Open the file <code>OOMAnalyser.html</code> in your favourite browser.</li>
 | 
						|
    </ol>
 | 
						|
</div>
 | 
						|
 | 
						|
<hr/>
 | 
						|
 | 
						|
<div class="footer">
 | 
						|
    OOMAnalyser <span id="version"></span> |
 | 
						|
    Copyright (C) 2017-2020 Carsten Grohmann |
 | 
						|
    <a href="javascript:void(0);" onclick="OOMAnalyser.toggle('license')" title="Show / hide license text">License: MIT</a> |
 | 
						|
    <a href="https://github.com/CarstenGrohmann/OOMAnalyser" title="Source code on GitHub">Source Code on GitHub</a>
 | 
						|
</div>
 | 
						|
 | 
						|
<div class="license__text js-text--display-none" id="license">
 | 
						|
    <p>
 | 
						|
        Copyright (c) 2017-2020 Carsten Grohmann mail <add at here> carsten-grohmann.de
 | 
						|
    </p>
 | 
						|
    <p>
 | 
						|
        Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
						|
        this software and associated documentation files (the "Software"), to deal in
 | 
						|
        the Software without restriction, including without limitation the rights to
 | 
						|
        use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 | 
						|
        of the Software, and to permit persons to whom the Software is furnished to do
 | 
						|
        so, subject to the following conditions:
 | 
						|
    </p>
 | 
						|
    <p>
 | 
						|
        The above copyright notice and this permission notice shall be included in all
 | 
						|
        copies or substantial portions of the Software.
 | 
						|
    </p>
 | 
						|
    <p>
 | 
						|
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
						|
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
						|
        SOFTWARE.
 | 
						|
    </p>
 | 
						|
</div>
 | 
						|
 | 
						|
</body>
 | 
						|
</html>
 |