Selenium Java无限循环银行自动化程序内存泄漏原因及排查咨询
NetBeans Profiler完全能帮你定位内存泄漏问题
直接给你实操步骤和针对性排查方向:
一、用NetBeans Profiler排查的具体流程
- 启动NetBeans加载你的项目,点击工具栏的Profile按钮,选择「Profile Project」,在配置窗口里勾选Memory Profiling模式。
- 开启内存分配记录:在配置界面勾选「Record object allocations and garbage collections」,确保能追踪对象的创建与回收全链路。
- 运行程序复现场景:完成银行登录流程,触发
baslaActionPerformed里的轮询线程,让程序运行1-2小时(不用等崩溃,只要内存有持续上升趋势就行)。 - 捕获内存快照:每隔一段时间(比如30分钟)点击Profiler界面的Take Snapshot,保存当前内存状态。
- 分析快照定位泄漏:
- 看Dominators视图:找出占用内存最高且未被GC回收的对象类型——比如Selenium WebDriver相关实例、Google Sheets API的请求/响应对象、轮询中生成的支付记录对象。
- 查Allocation Call Tree:定位到持续创建对象但未回收的方法,重点看
baslaActionPerformed里的轮询逻辑,是不是每次循环都新生成了未复用的实例。 - 对比多份快照:观察哪些对象的数量在持续增长,这类对象就是泄漏的核心嫌疑。
二、结合你的业务场景的重点排查点
- Chrome/WebDriver相关:你打开了3个Chrome标签,大概率用了Selenium。要检查每次轮询后有没有清理WebElement引用、有没有复用WebDriver实例?会不会是轮询中重复创建了驱动相关对象但未销毁?
- Google Sheets操作:写入Sheet时是不是每次都新建了SheetsService或请求实例,没有复用?请求的响应对象有没有被正确释放?
- 轮询线程的循环逻辑:无限循环里是不是每次都创建了新的集合、字符串等对象,且被全局静态变量/持久引用持有,导致GC无法回收?
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

