提问人:Logan 提问时间:4/15/2023 更新时间:4/28/2023 访问量:287
有可用内存时 tcmalloc 分配失败
tcmalloc allocation failures when there is free memory
问:
我在 Ubuntu 20 上使用 libtcmalloc_minimal.so.4.5.3。我在表单的日志中看到了很多分配失败: src/central_freelist.cc:333] tcmalloc:分配失败 8192
但是,根据免费,系统上有 290GB 的可用内存,程序在开始报告错误时仅使用 90GB。
服务器将“tcmalloc.max_total_thread_cache_bytes”属性设置为等于系统上的内存量,所以我认为这不是问题所在。cgroup 将其限制为系统内存的 95%。我是否遗漏了其他可能限制它的东西?
该应用程序是一个 apache 节俭服务器,如果这很重要的话,它运行了大约 32K 个线程。
我希望该程序在出现分配错误之前使用系统上接近 95% 的可用内存,我对可能发生的事情感到困惑。谁能帮忙?
答:
0赞
Logan
4/28/2023
#1
事实证明,tcmalloc 对其线程缓存的大小有硬编码限制,如果您尝试将max_total_thread_cache_bytes设置为超过 1G,它将默默地忽略您。我进入并更改了 thread_cache.cc 函数set_overall_thread_cache_size中的此限制并重新编译,现在一切似乎都可以了。
评论