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 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    죽는다는 것이 crash 라는 것이죠? 예외때문에 crash 가 발생하진 않습니다.

    많은 예외로 jvm 이 kill 된다면 버그라고 봐야 합니다.

    그리고 jvm 이 crach 발생하면 코어덤프나 hs_err_pid 를 생성합니다.

    그 파일을 분석해보면 원인을 알 수 있습니다.

    • 버그라면 VM 레벨에서의 버그겠죠? 편집요청빌런 2020.3.18 13:31
    • 네. 예외는 jvm 내에서는 정상적인 결과 입니다. 예외가 많이 발생한다고 jvm 이 crash 된다면 그건 버그입니다. 정영훈 2020.3.18 13:49

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)