在 Mess With DNS 中使用更少的内存来查找 IP 地址

主要观点:作者的 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 存储大小的讨论、不同优化方法的尝试及他人的建议等。
阅读 16
0 条评论