diff --git a/deps/oblib/src/lib/utility/utility.h b/deps/oblib/src/lib/utility/utility.h index 6ffb187cf..6c6ed9ba0 100644 --- a/deps/oblib/src/lib/utility/utility.h +++ b/deps/oblib/src/lib/utility/utility.h @@ -498,12 +498,23 @@ inline int64_t get_cpu_id() // ethernet speed: byte / second. int get_ethernet_speed(const char *devname, int64_t &speed); int get_ethernet_speed(const ObString &devname, int64_t &speed); +inline int64_t get_cgroup_memory_limit() +{ + int64_t cgroup_memory_limit = INT64_MAX; + FILE *file = fopen("/sys/fs/cgroup/memory/memory.limit_in_bytes", "r"); + if (NULL != file) { + fscanf(file, "%ld", &cgroup_memory_limit); + fclose(file); + } + return cgroup_memory_limit; +} inline int64_t get_phy_mem_size() { static int64_t page_size = sysconf(_SC_PAGE_SIZE); static int64_t phys_pages = sysconf(_SC_PHYS_PAGES); - return page_size * phys_pages; + static int64_t cgroup_memory_limit = get_cgroup_memory_limit(); + return MIN(page_size * phys_pages, cgroup_memory_limit); } int64_t get_level1_dcache_size();