스케쥴러 가끔씩 멈추는 현상
- 작성자 :
- 임*미
- 작성일 :
- 2014-07-31 09:30:19
- 조회수 :
- 1,212
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
스케쥴러를 01시부터 ~22시55분까지 5분마다 실행합니다.
이전에 하루에 한번씩 돌렸을때는 스케쥴러가 멈춘적이 없는데 5분마다 돌리면서 5일에 한번씩 멈춥니다.
한번 실행시 하는 행위는 기껐해야 10개 이내의 데이터를 디비 조회 후 파일로 만들고 디비 update하는 정도입니다.
개발에서 테스트시 1분마다 100개 이상의 데이터를 몇시간동안 돌렸을때도 딱히 문제가 없었는데
운영 반영하고 스케쥴러가 멈추는 이유를 잘 모르겟습니다.
XML 파일
<bean id="accNumTransJobDetailFactoryBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="accNumTransService" />
<property name="targetMethod" value="sendAccNumFile" />
<property name="concurrent" value="false" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="accNumTransJobDetailFactoryBean" />
<property name="cronExpression" value="0 0/5 1-22 * * ?" /> <!-- 01:00 ~ 22:55분까지 5분단위로 실행-->
</bean>
스케쥴러 멈췄을때 WAS(제우스) thread dump/db lock 상태 확인했는데... 별다른 문제점은 확인 못했습니다.
1. 스케쥴러 멈출경우 was를 재기동해야되는데 스케쥴러 서비스만 재시작 할 수 있는 방법이 있을까요?
2. 스케쥴러가 실행하고 있는데 중복으로 스케쥴러가 실행될 수 있는건가요? 그렇다면 스케쥴러가 실행중인지 아닌지 체크할 수 있는 방법은 있을까요?
이전에 하루에 한번씩 돌렸을때는 스케쥴러가 멈춘적이 없는데 5분마다 돌리면서 5일에 한번씩 멈춥니다.
한번 실행시 하는 행위는 기껐해야 10개 이내의 데이터를 디비 조회 후 파일로 만들고 디비 update하는 정도입니다.
개발에서 테스트시 1분마다 100개 이상의 데이터를 몇시간동안 돌렸을때도 딱히 문제가 없었는데
운영 반영하고 스케쥴러가 멈추는 이유를 잘 모르겟습니다.
XML 파일
<bean id="accNumTransJobDetailFactoryBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="accNumTransService" />
<property name="targetMethod" value="sendAccNumFile" />
<property name="concurrent" value="false" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="accNumTransJobDetailFactoryBean" />
<property name="cronExpression" value="0 0/5 1-22 * * ?" /> <!-- 01:00 ~ 22:55분까지 5분단위로 실행-->
</bean>
스케쥴러 멈췄을때 WAS(제우스) thread dump/db lock 상태 확인했는데... 별다른 문제점은 확인 못했습니다.
1. 스케쥴러 멈출경우 was를 재기동해야되는데 스케쥴러 서비스만 재시작 할 수 있는 방법이 있을까요?
2. 스케쥴러가 실행하고 있는데 중복으로 스케쥴러가 실행될 수 있는건가요? 그렇다면 스케쥴러가 실행중인지 아닌지 체크할 수 있는 방법은 있을까요?
A
안녕하세요. 임영미님.
Quartz 스케줄러 자체가 start(), shutdown() 메소드를 지원하지만, shutdown의 경우 thread나 관련 resources를 해제되기 때문에 재시작이 어려운 것 같습니다.
DB lock 상태에서 thread dump를 보시면 해당 스케줄러와 관련된 온라인 request가 요청 중인 것이 파악되신다면 해당 서비스에 대하여 트랜잭션 통제(isolation 속성을 높임, ex: ISOLATION_READ_COMMITED 또는 ISOLATION_REPEATABLE_READ 등)하시는 설정을 추가하시면 되실 것 같습니다.
해당 부분은 다음 가이드 참조
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management
중복의 경우는 지정하신 속성 중에 concurrent 속성이 false로 되어 있기 때문에 중복 호출되지는 않습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
Quartz 스케줄러 자체가 start(), shutdown() 메소드를 지원하지만, shutdown의 경우 thread나 관련 resources를 해제되기 때문에 재시작이 어려운 것 같습니다.
DB lock 상태에서 thread dump를 보시면 해당 스케줄러와 관련된 온라인 request가 요청 중인 것이 파악되신다면 해당 서비스에 대하여 트랜잭션 통제(isolation 속성을 높임, ex: ISOLATION_READ_COMMITED 또는 ISOLATION_REPEATABLE_READ 등)하시는 설정을 추가하시면 되실 것 같습니다.
해당 부분은 다음 가이드 참조
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management
중복의 경우는 지정하신 속성 중에 concurrent 속성이 false로 되어 있기 때문에 중복 호출되지는 않습니다.
그럼, 즐거운 하루되십시오.
감사합니다.