Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 중첩쿼리
- 남산타워뷰
- 7kyu
- VMware
- 파이썬
- 이클립스
- 서울복층에어비앤비
- 오류
- CentOS
- class파일바로보기
- 자바기초스터디
- Eclipse
- 멀티쓰레드프로그래밍
- Linux
- CentOS8
- 사용자변경
- Oralce
- 8kyu
- JavaScript
- java
- monthPicker
- SQL
- Python
- Codewars
- https
- 시즌1
- 주민번호마스킹
- 이것이리눅스다
- 서울에어비앤비
- 6kyu
Archives
- Today
- Total
보통사람
[오류] 톰캣 프로세스 여러개 뜨는 경우 본문
환경버전
개발툴 : 이클립스
Spring : 4.3.3
Quartz : 2.3.0
Tomcat : 8.5
서버 :CentOS
1. 오류
개발서버에서 톰캣 프로세스가 여러개가 뜨면서 메모리 너무 많이 잡아먹는 현상이 발생하였다.
netstate -tnlp 하면 8080포트는 하나만 나오고, ps -ef | grep tomcat 하면 여러개 나왔다.
2. 원인
검색을 하다가 아래의 글을 보고 quartz 스케쥴러의 문제라고 생각이 들었다.
톰캣 서버가 종료되어도 이미 실행된 job 스레드는 종료되지 않고 계속 남는다.
3. 해결
destroy-method 속성을 이용해서 SchedulerFactoryBean 클래스에 있는 destroy() 메소드를 추가해줬다.
<bean id="qcrmJobScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy">
<property name="triggers">
<list>
<ref bean="testJobTrigger" />
</list>
</property>
</bean>
하지만 모든 job을 종료시키는 destroy() 메소드는 빈 소멸시 자동으로 호출되는 것 같은데, 왜 실행되지 않았던걸까?
/**
* Shut down the Quartz scheduler on bean factory shutdown,
* stopping all scheduled jobs.
*/
@Override
public void destroy() throws SchedulerException {
if (this.scheduler != null) {
logger.info("Shutting down Quartz Scheduler");
this.scheduler.shutdown(this.waitForJobsToCompleteOnShutdown);
}
}
+ 추가(2023.10.13)
위 방법으로 적용 후에도 계속 발생하여 젠킨스 배포시 실행중인 톰캣 프로세스 모두 종료시키는 쉘 스크립트를 추가하였다.
#!/bin/bash
tomcat_pids=$(ps aux | grep tomcat | grep java | grep -v grep | awk '{print $2}')
if [ -n "$tomcat_pids" ]; then
for pid in $tomcat_pids; do
echo "PID: $pid"
kill -9 $pid
done
fi
참조
'오류' 카테고리의 다른 글
[오류] https 도메인인데 request.isSecure() return false인 경우 (0) | 2023.08.10 |
---|---|
[오류] 팝업 여러개 띄울때 화면 reload 발생 (0) | 2023.07.30 |
[오류] 자동으로 도메인에 https가 붙는 경우 (0) | 2023.07.30 |