diff --git a/be/src/runtime/exec_env_init.cpp b/be/src/runtime/exec_env_init.cpp index 15cb4f578fe23f..38dedb344cff69 100644 --- a/be/src/runtime/exec_env_init.cpp +++ b/be/src/runtime/exec_env_init.cpp @@ -540,12 +540,21 @@ Status ExecEnv::_init_mem_env() { } else { fd_number = static_cast(l.rlim_cur); } - // SegmentLoader caches segments in rowset granularity. So the size of - // opened files will greater than segment_cache_capacity. - int64_t segment_cache_capacity = config::segment_cache_capacity; - int64_t segment_cache_fd_limit = fd_number / 100 * config::segment_cache_fd_percentage; - if (segment_cache_capacity < 0 || segment_cache_capacity > segment_cache_fd_limit) { - segment_cache_capacity = segment_cache_fd_limit; + + int64_t segment_cache_capacity = 0; + if (config::is_cloud_mode()) { + // when in cloud mode, segment cache hold no system FD + // thus the FD num limit makes no sense + // cloud mode use FDCache to control FD + segment_cache_capacity = UINT32_MAX; + } else { + // SegmentLoader caches segments in rowset granularity. So the size of + // opened files will greater than segment_cache_capacity. + segment_cache_capacity = config::segment_cache_capacity; + int64_t segment_cache_fd_limit = fd_number / 100 * config::segment_cache_fd_percentage; + if (segment_cache_capacity < 0 || segment_cache_capacity > segment_cache_fd_limit) { + segment_cache_capacity = segment_cache_fd_limit; + } } int64_t segment_cache_mem_limit =