主要观点:作者的 Mess With DNS 在过去 3 年左右常出现内存不足被 OOM 杀死的问题,起初未重视,上周开始影响使用后决定研究。过程中尝试了多种方法来减少内存使用,包括使用 SQLite、trie、优化数组等,最终节省了 70MB 内存,虽查找速度稍慢但内存使用更合理,且作者仍有继续探索的想法。
关键信息:
- 运行环境:在约 465MB 内存的 VM 上运行 Mess With DNS,各部分内存分配情况。
- 问题:备份脚本因系统内存不足被 OOM 杀死,导致备份可能损坏及需手动解锁。
尝试方法及结果:
- 使用 SQLite:虽解决初始内存目标但速度慢 500 倍,存在存储 IPv6 地址问题及难以使用双索引等。
- 使用 trie:使用更多内存且查找更慢。
- 优化数组:去重 Name 和 Country、使用 netip.Addr 替代 net.IP 等,节省 70MB 内存。
重要细节:
- 内存使用情况:Mess With DNS 加载的数据库中 IP 地址使用约 117MB 内存,原始文本文件仅 37MB。
- 各尝试的具体代码和细节:如 SQLite 的表结构、查询计划等,以及优化数组的结构体设计等。
- 其他相关信息:关于 ASN 存储大小的讨论、不同优化方法的尝试及他人的建议等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。