728x90
반응형
apache 라이브러리 중 Executor가 있다.
Shell이나 cmd 커맨드를 수행하기 위해 사용하는 외부 라이브러리인데 개발환경에서는 잘 되던 코드가 사내 임시 배포를 위해 portable로 export 하여 동작하던 중 문제가 발생하였다.
로그에 에러가 기록되지않아 겨우 문제의 지점을 찾았다.
DefaultExecutor executor = new DefaultExecutor();
executor.setWatchdog(new ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT)); // 문제의 원인
혹시 다른 사람은 잘 동작한다고 할 수도 있는데 나는 저 executor로 임베디드 파이썬을 수행시켰다.
watchdog은 프로세스가 일정시간동안 동작하지 않을 경우 destory를 하기 위해 사용하는 것으로 알고있다. 근데 그 부분에서 에러도 없이 문제가 발생하였다. catch문으로 걸리지도 않았다.
정말 혹시나 하는 마음으로 파라미터 부분에서 객체를 만들지 않고 외부 변수를 만든 후 넣었더니 정상 동작을 하였다.
DefaultExecutor executor = new DefaultExecutor();
ExecuteWatchdog watchdog = new Watchdog(ExecuteWatchdog.INFINITE_TIMEOUT);
executor.setWatchdog(watchdog); // 정상 동작
이유를 잘 모르겠다. 아마 예측해보면 개발환경에서 동작하는 방식과 외부로 export하여 릴리즈 되어 사용될 때 jvm에서 레퍼런스 카운터의 측정이 잘못되었거나 하지 않을까 예상을 하고 있다.
혹시 아신다면 댓글로 부탁드립니다.
728x90
반응형
'JAVA' 카테고리의 다른 글
내 자바 코드 스타일 바꿔보기, 근데 함수형을 곁들인 - filter (0) | 2022.05.07 |
---|---|
자바 조금 더 잘 사용해보자 (1) (0) | 2022.03.03 |
자바 인터뷰 질문 - 심화(1) (0) | 2021.07.16 |
자바 인터뷰 질문 - 기본기 (2) (0) | 2021.07.03 |
자바 인터뷰 질문 - 기본기 (1) (0) | 2021.06.17 |