Battle of the Mallocators
a year ago
- #performance
- #memory-allocation
- #RocksDB
- 使用jemalloc或tcmalloc替代glibc malloc可避免RocksDB内存溢出(OOM),因为glibc会导致更高的常驻集大小(RSS)。
- RocksDB的内存分配模式(读取块时分配,淘汰时释放)会给内存分配器带来压力,导致使用glibc malloc时RSS增长远超预期。
- InnoDB避免了逐块分配/释放内存的操作,减轻了分配器压力,使RSS保持更可预测的状态。
- MyRocks的峰值RSS在使用jemalloc时最小(1.22倍缓冲池大小),tcmalloc稍大(1.31倍),而glibc malloc则显著更大(3.62倍)。
- 无论是InnoDB还是MyRocks,使用jemalloc和tcmalloc时的查询性能(QPS)都略优于glibc malloc。
- 使用jemalloc时虚拟内存大小(VSZ)可能更大,但这不一定表示存在问题(可能是地址空间的使用)。
- 基准测试环境:MySQL 8.0.40(InnoDB)和FB MySQL 8.0.32(MyRocks),部署在128G内存的Hetzner服务器上。
- 对于MyRocks,使用glibc malloc时50G缓冲池会导致OOM,而jemalloc/tcmalloc可正常处理100G缓冲池。