개발/Spring Batch

Spring batch step loop 할 때 메모리 이슈

신매력 2016. 7. 22. 17:00

(한달 전에 삽질했던 내용인데 이제 씀)



지난번에 step을 loop 구조로 하는 것에 대한 포스팅을 했었다.

http://marobiana.tistory.com/133



여기에는 주의해야할 점이 있다.



싱글톤 bean이 아닌 bean을 Step 단위로 loop를 돌릴 경우,

Step이 수행될 때마다 새 bean이 생성되고,

다음 loop로 넘어가도, 이전 스텝에서 생긴 bean은 메모리 해제가 되지 않는다.


그 bean들은 계속 누적이되어 memory leak을 일으킨다.




쓰레드덤프를 떠본 것 까진 아니지만

일정한 속도로 여러번 batch를 수행시켰을 때 

같은 시간 경과 후 (2시간 30분) job이 죽었다.


로그를 보니 Out of Memory였다.




나의 경우 singleton bean으로 처리하지 못했던 이유는

jobParameter를 받아야했기 때문이다.

bean의 scope가 step이고 job은 아직 지원 안되는걸로 알아서..


그리고 구조가 좀 복잡하게 되어있고 파라미터를 보내는게 까다로워서

결국 오랫동안 매달려온 파티셔닝 + step loop를 포기하고 순수 batch 구조로 짜게 됨.



이 해결책에 대해 찾아봤으나,

'서버의 메모리 사이즈를 늘려라'ㅎㅎㅎ 또는 '아직 방법을 못찾았다'이기에

시간도 너무 많이 쓰고 해서 포기하는걸로..