(한달 전에 삽질했던 내용인데 이제 씀)
지난번에 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 구조로 짜게 됨.
이 해결책에 대해 찾아봤으나,
'서버의 메모리 사이즈를 늘려라'ㅎㅎㅎ 또는 '아직 방법을 못찾았다'이기에
시간도 너무 많이 쓰고 해서 포기하는걸로..
'개발 > Spring Batch' 카테고리의 다른 글
step을 loop 구조로 수행하기, step과 step간 파라미터 넘기기 (2) | 2016.06.22 |
---|---|
Spring Batch 파티셔닝(partitioning) 예제(Database range query) (0) | 2016.05.25 |
Spring Batch decision으로 step 결정하기 (1) | 2015.10.29 |
Spirng Batch 로 Batch Job 만들기 (2) (0) | 2012.08.17 |
Spirng Batch 로 Batch Job 만들기 (1) (0) | 2012.08.16 |