@@ -411,6 +411,28 @@ void CGroupMemoryController::setMemoryControllerPath(CString memoryControllerPat
411411 m_cgroupMemoryMemswLimitInBytesFile = getCgroupFile (" memory" , memoryControllerPath, CString (" memory.memsw.limit_in_bytes" ));
412412 m_cgroupMemoryLimitInBytesFile = getCgroupFile (" memory" , memoryControllerPath, CString (" memory.limit_in_bytes" ));
413413 m_cgroupMemoryUsageInBytesFile = getCgroupFile (" memory" , memoryControllerPath, CString (" memory.usage_in_bytes" ));
414+
415+ // when ran within (e.g. docker) container, it's possible that <controller_path> will be specified in /proc/self/cgroup
416+ // and yet the paths like /sys/fs/cgroup/memory/<controller_path>/ will be unavailable
417+ // therefore it's worth falling back to default files so that memory pressure monitor would still work as expected in such cases
418+ const bool shouldFallbackToEmptyPath = isActive ()
419+ && m_cgroupMemoryControllerPath != " /"
420+ && !m_cgroupV2MemoryCurrentFile
421+ && !m_cgroupV2MemoryMemswMaxFile
422+ && !m_cgroupV2MemoryMaxFile
423+ && !m_cgroupV2MemoryHighFile
424+ && !m_cgroupMemoryMemswLimitInBytesFile
425+ && !m_cgroupMemoryLimitInBytesFile
426+ && !m_cgroupMemoryUsageInBytesFile;
427+ if (shouldFallbackToEmptyPath) {
428+ m_cgroupV2MemoryCurrentFile = getCgroupFile (" /" , " " , CString (" memory.current" ));
429+ m_cgroupV2MemoryMemswMaxFile = getCgroupFile (" /" , " " , CString (" memory.memsw.max" ));
430+ m_cgroupV2MemoryMaxFile = getCgroupFile (" /" , " " , CString (" memory.max" ));
431+ m_cgroupV2MemoryHighFile = getCgroupFile (" /" , " " , CString (" memory.high" ));
432+ m_cgroupMemoryMemswLimitInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.memsw.limit_in_bytes" ));
433+ m_cgroupMemoryLimitInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.limit_in_bytes" ));
434+ m_cgroupMemoryUsageInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.usage_in_bytes" ));
435+ }
414436}
415437
416438void CGroupMemoryController::disposeMemoryController ()
0 commit comments