@@ -418,6 +418,30 @@ void CGroupMemoryController::setMemoryControllerPath(CString memoryControllerPat
418418 m_cgroupMemoryMemswUsageInBytesFile = getCgroupFile (" memory" , memoryControllerPath, CString (" memory.memsw.usage_in_bytes" ));
419419 m_cgroupMemoryLimitInBytesFile = getCgroupFile (" memory" , memoryControllerPath, CString (" memory.limit_in_bytes" ));
420420 m_cgroupMemoryUsageInBytesFile = getCgroupFile (" memory" , memoryControllerPath, CString (" memory.usage_in_bytes" ));
421+
422+ // when ran within (e.g. docker) container, it's possible that <controller_path> will be specified in /proc/self/cgroup
423+ // and yet the paths like /sys/fs/cgroup/memory/<controller_path>/ will be unavailable
424+ // therefore it's worth falling back to default files so that memory pressure monitor would still work as expected in such cases
425+ const bool shouldFallbackToEmptyPath = isActive ()
426+ && m_cgroupMemoryControllerPath != " /"
427+ && !m_cgroupV2MemoryCurrentFile
428+ && !m_cgroupV2MemoryMemswMaxFile
429+ && !m_cgroupV2MemoryMaxFile
430+ && !m_cgroupV2MemoryHighFile
431+ && !m_cgroupMemoryMemswLimitInBytesFile
432+ && !m_cgroupMemoryMemswUsageInBytesFile
433+ && !m_cgroupMemoryLimitInBytesFile
434+ && !m_cgroupMemoryUsageInBytesFile;
435+ if (shouldFallbackToEmptyPath) {
436+ m_cgroupV2MemoryCurrentFile = getCgroupFile (" /" , " " , CString (" memory.current" ));
437+ m_cgroupV2MemoryMemswMaxFile = getCgroupFile (" /" , " " , CString (" memory.memsw.max" ));
438+ m_cgroupV2MemoryMaxFile = getCgroupFile (" /" , " " , CString (" memory.max" ));
439+ m_cgroupV2MemoryHighFile = getCgroupFile (" /" , " " , CString (" memory.high" ));
440+ m_cgroupMemoryMemswLimitInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.memsw.limit_in_bytes" ));
441+ m_cgroupMemoryMemswUsageInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.memsw.usage_in_bytes" ));
442+ m_cgroupMemoryLimitInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.limit_in_bytes" ));
443+ m_cgroupMemoryUsageInBytesFile = getCgroupFile (" memory" , " " , CString (" memory.usage_in_bytes" ));
444+ }
421445}
422446
423447void CGroupMemoryController::disposeMemoryController ()
0 commit comments