문자열 생성으로 테스트

// -Xmx512m -Xms512m

@Slf4j
@RestController
public class AddStringController {

	@GetMapping("/add-string/run")
	public void run(@RequestParam final Integer millis) throws InterruptedException {
		final Thread thread = new Thread(new AddStringRunnable());
		thread.start();

		Thread.sleep(millis);
		thread.interrupt();
	}

	public static class AddStringRunnable implements Runnable {

		private final List<String> list = new ArrayList<>();

		public void run() {
			log.info("### AddString start");
			final byte[] array = new byte[7];
			try {
				while (true) {
					new Random().nextBytes(array);
					list.add(new String(array, StandardCharsets.UTF_8));
					Thread.sleep(0);
				}
			} catch (final InterruptedException e) {
				log.info("### AddString interrupt");
			}
		}
	}
}
  • OOM 발생

  • heap dump summary

    • String이 다수를 차지하고 있음을 확인.

  • Objects - GC roots

    • Retained가 압도적으로 높고 테스트를 위해 만든 클래스에서 발생함을 확인 가능.

기타

  • 더 완벽한 로그를 위해서는 heap dump가 아닌 thread dump를 떠야 합니다.

Last updated