diff options
author | 2024-11-15 18:32:18 +0000 | |
---|---|---|
committer | 2024-11-18 19:55:32 +0000 | |
commit | 6988272f77745b8cacdf58814ec609fbf47401cb (patch) | |
tree | d4a48e795cdc4898bf0fdedf78129c148281f7f1 | |
parent | 9712d1e47503db9a5bdcf72234949d36667aa25d (diff) |
Set the edit monitor memory threshold as a percentage
Instead of a fixed size of max memory allowed for the edit monitor, set
the threshold as a percentage of the total memory.
Test: atest daemon_manager_test
Bug: 365617369
Change-Id: I5e9ee20ae19f8f918e5a332ebd7ebe4d39ed61d8
-rw-r--r-- | tools/edit_monitor/daemon_manager.py | 13 | ||||
-rw-r--r-- | tools/edit_monitor/daemon_manager_test.py | 7 |
2 files changed, 16 insertions, 4 deletions
diff --git a/tools/edit_monitor/daemon_manager.py b/tools/edit_monitor/daemon_manager.py index ef2a30936e..c73603c488 100644 --- a/tools/edit_monitor/daemon_manager.py +++ b/tools/edit_monitor/daemon_manager.py @@ -33,7 +33,7 @@ from proto import edit_event_pb2 DEFAULT_PROCESS_TERMINATION_TIMEOUT_SECONDS = 5 DEFAULT_MONITOR_INTERVAL_SECONDS = 5 -DEFAULT_MEMORY_USAGE_THRESHOLD = 3 * 1024 # 3GB +DEFAULT_MEMORY_USAGE_THRESHOLD = 0.02 # 2% of total memory DEFAULT_CPU_USAGE_THRESHOLD = 200 DEFAULT_REBOOT_TIMEOUT_SECONDS = 60 * 60 * 24 BLOCK_SIGN_FILE = "edit_monitor_block_sign" @@ -70,6 +70,9 @@ class DaemonManager: self.max_memory_usage = 0 self.max_cpu_usage = 0 + self.total_memory_size = os.sysconf("SC_PAGE_SIZE") * os.sysconf( + "SC_PHYS_PAGES" + ) pid_file_dir = pathlib.Path(tempfile.gettempdir()).joinpath("edit_monitor") pid_file_dir.mkdir(parents=True, exist_ok=True) @@ -345,7 +348,13 @@ class DaemonManager: stat_data = f.readline().split() # RSS is the 24th field in /proc/[pid]/stat rss_pages = int(stat_data[23]) - return rss_pages * 4 / 1024 # Covert to MB + process_memory = rss_pages * 4 * 1024 # Convert to bytes + + return ( + process_memory / self.total_memory_size + if self.total_memory_size + else 0.0 + ) def _get_process_cpu_percent(self, pid: int, interval: int = 1) -> float: total_start_time = self._get_total_cpu_time(pid) diff --git a/tools/edit_monitor/daemon_manager_test.py b/tools/edit_monitor/daemon_manager_test.py index 12aaab3f80..e2b3f22424 100644 --- a/tools/edit_monitor/daemon_manager_test.py +++ b/tools/edit_monitor/daemon_manager_test.py @@ -204,16 +204,19 @@ class DaemonManagerTest(unittest.TestCase): def test_monitor_daemon_subprocess_killed_high_memory_usage(self): fake_cclient = FakeClearcutClient() + dm = daemon_manager.DaemonManager( TEST_BINARY_FILE, daemon_target=memory_consume_daemon_target, daemon_args=(2,), cclient=fake_cclient, ) + # set the fake total_memory_size + dm.total_memory_size = 100 * 1024 *1024 dm.start() - dm.monitor_daemon(interval=1, memory_threshold=2) + dm.monitor_daemon(interval=1) - self.assertTrue(dm.max_memory_usage >= 2) + self.assertTrue(dm.max_memory_usage >= 0.02) self.assert_no_subprocess_running() self._assert_error_event_logged( fake_cclient, |