我正在查看我的一个守护程序出现的一个问题,该问题非常消耗内存。看起来某些部分永远不会释放内存,即使当我使该守护程序完全退出时,也没有泄漏。
我想看看在守护程序运行时添加了哪些缓冲区并保留了这些缓冲区。由于我已经使用-fsanitizer=address
命令行选项进行了编译,因此我可以想象我可以使用某些可以做到这一点的函数吗?
我以为我看到了“libasan”,但找不到任何有关它的文档。有没有这样的东西?如果有,该文档在哪里?
最佳答案
无法转储Asan内存分配统计信息。使用最新的Asan版本,您可以通过运行export ASAN_OPTIONS=detect_leaks=1
来检查内存泄漏,但是我认为这不是造成问题的原因。
您的问题可能是由Asan隔离所引起的-Asan不会立即释放free
上的内存来报告使用后使用错误。默认隔离区大小为256M,您可以通过export ASAN_OPTIONS=quarantine_size_mb=16
对其进行控制。
顺便说一句,请注意,不建议使用-fsanitize=address
编译SW的生产版本(Asan用于错误检测,而非预防)。