diff --git a/OOMAnalyser.html b/OOMAnalyser.html index 03c1325..3e97fac 100644 --- a/OOMAnalyser.html +++ b/OOMAnalyser.html @@ -919,6 +919,18 @@ window.onerror = function (msg, url, lineNo, columnNo, errorObj) { + + + + Memory Watermarks + + + + +

+            
+        
+
         
             Process Table
         
@@ -1074,6 +1086,7 @@ window.onerror = function (msg, url, lineNo, columnNo, errorObj) {
         
  • Add analysis why the memory request failed
  • Add check for heavy memory fragmentation
  • Summary of the analysis revised
  • +
  • Show memory watermarks together will all details
  • ...
  • diff --git a/OOMAnalyser.py b/OOMAnalyser.py index 11e853c..95973d0 100644 --- a/OOMAnalyser.py +++ b/OOMAnalyser.py @@ -304,6 +304,10 @@ class BaseKernelConfig: r"(?P(^Node \d+ ((DMA|DMA32|Normal):|(hugepages)).+(\n|$))+)", False, ), + "Memory watermarks": ( + r"(?P(^(Node \d+ (DMA|DMA32|Normal) free:|lowmem_reserve\[\]:).+(\n|$))+)", + False, + ), "Page cache": ( r"^(?P\d+) total pagecache pages.*$", True, diff --git a/test.py b/test.py index f9c112e..d589577 100755 --- a/test.py +++ b/test.py @@ -294,7 +294,19 @@ class TestInBrowser(TestBase): self.assertEqual( mem_node_info.text[-80:], "Node 1 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB", - "Unexpected memory chunks", + "Unexpected memory information about hugepages", + ) + + mem_watermarks = self.driver.find_element(By.CLASS_NAME, "mem_watermarks") + self.assertEqual( + mem_watermarks.text[:51], + "Node 0 DMA free:15872kB min:40kB low:48kB high:60kB", + "Unexpected memory watermarks", + ) + self.assertEqual( + mem_watermarks.text[-25:], + "lowmem_reserve[]: 0 0 0 0", + "Unexpected lowmem_reserve values", ) head = self.driver.find_element(By.ID, "pstable_header") @@ -374,7 +386,19 @@ class TestInBrowser(TestBase): self.assertEqual( mem_node_info.text[-80:], "Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB", - "Unexpected memory chunks", + "Unexpected memory information about hugepages", + ) + + mem_watermarks = self.driver.find_element(By.CLASS_NAME, "mem_watermarks") + self.assertEqual( + mem_watermarks.text[:54], + "Node 0 DMA free:15036kB min:352kB low:440kB high:528kB", + "Unexpected memory watermarks", + ) + self.assertEqual( + mem_watermarks.text[-27:], + "lowmem_reserve[]: 0 0 0 0 0", + "Unexpected lowmem_reserve values", ) head = self.driver.find_element(By.ID, "pstable_header")