This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new 9d7c65b4d81 [fix](memory) Avoid frequently refresh cgroup memory info (#35083) (#35182) 9d7c65b4d81 is described below commit 9d7c65b4d8120c9170fd5c8342a6844da4fd169f Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Wed May 22 11:42:08 2024 +0800 [fix](memory) Avoid frequently refresh cgroup memory info (#35083) (#35182) pick #35083 --- be/src/util/mem_info.cpp | 23 +++++++++++++++++++---- be/src/util/mem_info.h | 2 ++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/be/src/util/mem_info.cpp b/be/src/util/mem_info.cpp index a2cb04049db..f01524bb7ea 100644 --- a/be/src/util/mem_info.cpp +++ b/be/src/util/mem_info.cpp @@ -59,6 +59,8 @@ bvar::PassiveStatus<int64_t> g_sys_mem_avail( bool MemInfo::_s_initialized = false; std::atomic<int64_t> MemInfo::_s_physical_mem = std::numeric_limits<int64_t>::max(); +int64_t MemInfo::_s_cgroup_mem_limit = std::numeric_limits<int64_t>::max(); +int64_t MemInfo::_s_cgroup_mem_limit_refresh_wait_times = 0; std::atomic<int64_t> MemInfo::_s_mem_limit = std::numeric_limits<int64_t>::max(); std::atomic<int64_t> MemInfo::_s_soft_mem_limit = std::numeric_limits<int64_t>::max(); @@ -395,10 +397,23 @@ void MemInfo::refresh_proc_meminfo() { int64_t physical_mem = -1; int64_t cgroup_mem_limit = -1; physical_mem = _mem_info_bytes["MemTotal"]; - Status status = CGroupUtil::find_cgroup_mem_limit(&cgroup_mem_limit); - if (status.ok() && cgroup_mem_limit > 0) { + if (_s_cgroup_mem_limit_refresh_wait_times >= 0) { + Status status = CGroupUtil::find_cgroup_mem_limit(&cgroup_mem_limit); + if (status.ok() && cgroup_mem_limit > 0) { + _s_cgroup_mem_limit = cgroup_mem_limit; + _s_cgroup_mem_limit_refresh_wait_times = + -1000; // wait 10s, 1000 * 100ms, avoid too frequently. + } else { + _s_cgroup_mem_limit = std::numeric_limits<int64_t>::max(); + _s_cgroup_mem_limit_refresh_wait_times = + -6000; // find cgroup failed, wait 60s, 6000 * 100ms. + } + } else { + _s_cgroup_mem_limit_refresh_wait_times++; + } + if (_s_cgroup_mem_limit > 0) { // In theory, always cgroup_mem_limit < physical_mem - physical_mem = std::min(physical_mem, cgroup_mem_limit); + physical_mem = std::min(physical_mem, _s_cgroup_mem_limit); } if (physical_mem <= 0) { @@ -438,7 +453,7 @@ void MemInfo::refresh_proc_meminfo() { if (_mem_info_bytes.find("MemAvailable") != _mem_info_bytes.end()) { mem_available = _mem_info_bytes["MemAvailable"]; } - status = CGroupUtil::find_cgroup_mem_usage(&cgroup_mem_usage); + auto status = CGroupUtil::find_cgroup_mem_usage(&cgroup_mem_usage); if (status.ok() && cgroup_mem_usage > 0 && cgroup_mem_limit > 0) { if (mem_available < 0) { mem_available = cgroup_mem_limit - cgroup_mem_usage; diff --git a/be/src/util/mem_info.h b/be/src/util/mem_info.h index 5606ebd45d6..59030130e01 100644 --- a/be/src/util/mem_info.h +++ b/be/src/util/mem_info.h @@ -197,6 +197,8 @@ public: private: static bool _s_initialized; static std::atomic<int64_t> _s_physical_mem; + static int64_t _s_cgroup_mem_limit; + static int64_t _s_cgroup_mem_limit_refresh_wait_times; static std::atomic<int64_t> _s_mem_limit; static std::atomic<int64_t> _s_soft_mem_limit; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org