caught exception이 연속으로 발생할 때 VM이 죽을 수도 있나요?
조회수 478회
어림잡아 초당 5회 정도 발생하는 caught exception 때문에 VM이 죽을 수도 있나요?
caught exception이니까 try-catch로 커버된 코드고, catch에서 하는 일이라곤 에러 레벨로 로깅 하는 것 뿐인데요. 이것 때문에 VM이 죽는다는 어떤 분의 주장이 있는데, 과연 그게 가능한 건지 의문입니다.
로깅 자체의 문제: 파일을 생성할 수 없거나, 저장공간이 부족하거나 하는 등의 이유는 배제하고 말입니다.
아주 단순하게 코드를 요약해서:
import org.joda.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class VMStressTest {
private static final Logger logger = LoggerFactory.getLogger(VMStressTest.class);
public static LocalDateTime current = LocalDateTime.now();
public static void main(String[] args) {
LocalDateTime begin = LocalDateTime.now();
LocalDateTime end = begin.plusMinutes(1);
Runner runner = new Runner();
while (current.isBefore(end)) {
refresh();
try {
runner.ticktack(current.getSecondOfMinute());
} catch (Exception e) {
logger.error(e.getMessage(), e);
// logger.debug("에러 났네?");
}
}
logger.info("끗");
}
private static void refresh() {
current = LocalDateTime.now();
}
private static class Runner {
private static final Logger logger = LoggerFactory.getLogger(VMStressTest.Runner.class);
private int prevSec;
public void ticktack(int currentSec) {
if (currentSec != prevSec) {
this.prevSec = currentSec;
logger.debug("{}", currentSec);
} else {
int nan = 1 / 0; // = throw new ArithmeticException();
}
}
}
}
대충 이런 모양새일텐데 아무리 봐도, 실제로 돌려봐도 그렇고 VM이 죽을 껀덕지가 없단 말이죠?
제가 간과하는게 있는걸까요?
1 답변
-
죽는다는 것이 crash 라는 것이죠? 예외때문에 crash 가 발생하진 않습니다.
많은 예외로 jvm 이 kill 된다면 버그라고 봐야 합니다.
그리고 jvm 이 crach 발생하면 코어덤프나 hs_err_pid 를 생성합니다.
그 파일을 분석해보면 원인을 알 수 있습니다.
댓글 입력