ProjectDiscovery Nuclei 作为 YAML 模板驱动的开源漏洞扫描器,在作为 SDK 嵌入长期运行的微服务或持续扫描任务时,会遇到内存膨胀和 Goroutine 泄漏问题。开发者 ThryLox 调查并提交了 PR #7508,修复了 Issue #7503 中描述的三个主要泄漏点。
泄漏原因包括:HTTP-to-HTTPS 端口跟踪器使用无界 sync.Map 导致无限增长;全局协议状态中的每主机速率限制器 Goroutine 在引擎关闭后未被清理;编译后的模板缓存(parsedTemplatesCache 和 compiledTemplatesCache)在引擎实例间保留,无清除机制。
解决方案为:将 HTTP-to-HTTPS 端口跟踪器替换为有界的可过期 LRU 缓存(上限 4096 条目,24 小时 TTL);在
protocolstate.Close() 中释放速率限制器并清除跟踪器;在 NucleiEngine.Close() 中添加线程安全的 Purge() 方法清除模板缓存。验证表明修复后引擎关闭不再积累内存。GitHub
#开发者 #工具 #Nuclei #Go #漏洞扫描 #内存泄漏 #Goroutine #ProjectDiscovery #SDK #性能优化
📢 频道:@DevToolboxHub
