Spring Batch任务结束后GC自动回收失效问题求助
Spring Batch任务完成后GC异常问题
原本GC会按预期定期回收对象,但在第一个Spring Batch任务执行完成后,出现以下异常现象:
- 内存占用意外增长至预期值的10倍;
- GC停止自动执行,但通过命令
jcmd <jar应用名称>.jar GC.run可以手动触发GC并成功释放内存。
我原本以为是内存泄漏导致对象无法被回收,但手动触发GC能正常释放内存这一点让我困惑:既然GC有能力回收这些对象,为什么在应用内存不足时却不自动执行?
另外,任务中使用了Apache POI库的PoiItemReader类读取Excel文件。
我初步怀疑问题可能和以下因素有关:
- Java应用的启动命令参数配置;
- Apache POI库一次性读取整个Excel文件,没有采用分批读取的方式,违背了批处理的设计原则。
如果有人对此问题有排查思路或解决方案,欢迎留言讨论。
应用以容器化方式运行,镜像构建使用的Dockerfile内容如下:
FROM registry.access.redhat.com/ubi8/openjdk-11:latest COPY build/libs/*.jar /app/app.jar WORKDIR /app/ CMD ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75", "-jar", "app.jar"]
内容的提问来源于stack exchange,提问作者Tural Ahmadov
相关产品推荐
相关产品推荐

