Onnxruntime Java loading的内存溢出&持续增长问题
背景
业务服务内存持续增加,看了一大堆文章分析来分析去也搞明白。
尝试
用jstat,jmap gdb perf MAT等工具分析了jvm的情况,总结一句话堆内内存没问题。 问题出在了堆外内存上。
又从github onnxruntime的issue上找到了问题所在 https://github.com/microsoft/onnxruntime/issues?q=memory+leak。
问题原因
OnnxTensor和OrtSession.Result都需要Close的。 但是在我之前程序中忽略了这个问题,还以为git repo的example写的try-catch是个多余的,万万没想到这两个类居然都实现AutoCloseable了。
解决方法
- 创建tensor和那预测结果都用try(onnx相关代码放这){}
- 手动执行下close。
参考
- https://github.com/microsoft/onnxruntime/issues?q=memory+lea
- https://juejin.cn/post/6844903810398158862
- https://www.jianshu.com/p/d23e7197d3fa