본문 바로가기
728x90

TroubleShooting6

Java ForkJoinPool의 함정: OutOfMemoryError 장애 분석기 32코어 서버에서 초당 10건의 요청만으로 32,000개의 스레드가 생성되어 서버가 다운된 이유를 추적한 기록TL;DR증상: OutOfMemoryError: unable to create native thread 발생으로 서버 다운트래픽: 최대 10 TPS (초당 10건 요청)원인: 요청마다 new ForkJoinPool(32)을 생성하고 shutdown()을 호출하지 않아 스레드가 무한 누적1. 장애 발생어느 날 아침, 금칙어 필터링 서버에서 다음과 같은 에러가 발생하며 프로세스가 죽었습니다.java.lang.OutOfMemoryError: unable to create native thread:possibly out of memory or process/resource limits reached .. 2026. 1. 31.
자바 Stream peek()이 skip된다? 개요운영 업무를 처리하는 도중, 특정 api 호출 시 성공 응답을 받지만 실제 데이터를 확인해 보면 관련 데이터의 변화가 없다는 문의가 들어왔다. 실제로 로그를 확인해 보니 성공 응답이 리턴되었고, 서비스 로그 상 예외 로그도 발견되지 않았다. 이번 포스트에서는 해당 이슈를 트래킹 하는 과정과 그 과정에서 알게 된 자바 stream의 peek()에 대해 정리해 본다. 원인 파악로그 확인우선 api를 호출한 프로세스의 로그와 응답한 프로세스의 로그를 함께 확인해 보았다. 해당 기능은 기능이 정상 수행되면 변경된 데이터의 수를 리턴해주는데, api 호출 프로세스에서는 해당 데이터를 정상적으로 수신했다. 또한 응답 프로세스에서도 요청 인입 시에 기록되는 로그를 확인할 수 있었고, 예외 로그 또한 찍히지 않았다.. 2025. 7. 15.
[Tomcat] FileCountLimitExceededException 이슈 수정 개요회사 업무 중 자바 레거시 버전을 사용하는 서비스의 버전을 업그레이드하는 작업이 있었다. 자바 버전을 올리며 스프링 부트, 톰캣, 아파치 등의 버전도 함께 업그레이드하게 되었는데 그중 톰캣에서 발생한 이슈에 대해 정리한다. 로컬에서 어플리케이션을 구동하여 임베디드 톰캣으로 테스트했을 때는 이상이 없던 multipart 업로드 기능이 개발서버의 톰캣을 통해 구동해서 테스트 하기만 하면 아래와 같은 예외를 던졌다.동일한 버전의 코드로 어플리케이션을 빌드했기 때문에 원인은 임베디드 톰캣 - 설치된 톰캣간의 버전 차이로 추측했고, 그 부분을 중심으로 원인 파악을 해보았다. 원인 파악기능 점검우선 이슈가 어느 기능에 한정되는지를 먼저 정확히 해야 할 필요가 있었다. 이슈가 발생한 기능은 여러 텍스트 입력 값과.. 2025. 6. 28.
왜 ParallelStream을 써도 느릴까? - 자료구조의 중요성 개요담당하고 있는 회사 서비스에는 요청 처리가 지연될 시 알람을 받도록 되어 있는데 아래와 같은 지연 알림을 받게 되어 원인을 파악해 보고, 개선한 과정을 정리하려 한다. 1차 원인 파악지연 관련 정보우선 지연이 발생한 기능이 무엇인지, 어느 정도로 지연이 발생했는지를 정리하면 아래와 같다.기능: 문자 발송 시, 내가 수신자에 번호를 포함하여 발송하더라도 자동으로 필터링할 수신 거부 번호를 저장하는 기능기능 제약 사항: 한 번에 총 5만건 까지 저장이 가능하며, 저장 내용은 휴대폰 번호 - 메모 쌍으로 구성되어 있음지연 정보: 1시간동안 동일 경로 지연 약 10건 이상 발생지연 기능 로직 분석위 내용을 토대로 해당 시간대 발송을 요청했던 사용자의 로그를 파악해보았고, 해당 사용자가 호출한 기능의 구성을 .. 2025. 5. 11.