| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- LPOS
- 핀포인트
- 월급루팡 일지
- 애자일 싫타
- fake jwt
- nGinder
- 오블완
- formik
- 았
- R2DBC Paging
- 티스토리챌린지
- 노드간 통신
- ㅉ때
- save/update
- 플루터
- OIDC
- RedirectService
- Armeria
- hbase 저장공간 설정
- 7879
- 개발 어렵당.ㅠ
- 논블록킹 성능
- reids
- intellij
- pinpoint 2.5.3
- pinpoint
- jsonMarshaller
- UnsupportedOperationException
- Loki 로그
- Ingress Controller Fake
- Today
- Total
대머리개발자
지연(delay) 포인트를 찾기는.. 하늘의 별딱. 본문
10시 정기배치 시간이 되면 어김없이 1-2곳의 end-point가 지연이 발생한다.
또한 지연이 발생하는 end-point가 그때그때 달라진다.
확실히 어디선가 블록킹이 발생한다는 것인데...찾기가 여간.......

"집킨 + 엘라스틱"을 이용해 시간대별 응답값을 히트맵으로 그려 놓은 차트이다.
10시에 "하나 혹은 두개"의 응답이 5초이상으로 로깅된다... 하악하악
해당 시간대를 클릭해서..호출되는 path를 파이 차트로 그려놓았다.

겸사겸사.. 해당 end-point를 다 다시 정리했다.
그럼에도 문제는 해결되지 않았다.
기존 리소스를 리팩토링를 했다는 것에 만족.....
결론은 해당 endpoint가 문제가 아니라... 해당 endpoint가 실행할 때 어디선가...블락킹이 발생한다는 것이다.
처음으로 돌아가서 다시 다시 생각해 보자.
1. 정기 배치는 결제 모듈에서 진행한다.
2. 결제 모듈의 트리거는 내 모듈에서 진행한다. <-- 이것을 놓쳤다.. 자체적으로 배치를 돌린다고 생각했다.
결제모듈의 배치가 5초 소요된다... 근데 문제는 결제 모듈을 실행하는 트리거가 나한테 있었다.
@Scheduled(cron = "0 0 10,16 * * ?")
fun payScheduler() {
if(Props.PROFILE == "prod" || Props.PROFILE == "dev") {
ServiceUtils.getBatchHistoryService().save("pay")
.doOnNext{
val httpRequest = HttpRequest(freePass = true)
httpRequest.requestPost(Props.CLASS_URL + "/admin/payment",....
}.subscribe()
}
}
doOnNext 블록은 subscribe() 호출로 인해 실행된다... "블로킹 I/O가 발생하면" 이 호출은 응답이 올 때까지 해당 스레드를 막아버린다. ㅠㅠㅠㅠㅠ
내부 결제 모듈을 호출하는 코드가 5초가 소요되니..... 5초동안.. 문제가 발생했던것이다.
두 가지 방법이 있다.
1. webclient로 교체
val webClient = WebClient.of(Props.CLASS_URL)
val headers = RequestHeaders.of(
HttpMethod.POST, "/admin/payment",
HttpHeaderNames.AUTHORIZATION, "Bearer " + Props.FREE_PASS
)
webClient.execute(headers).aggregate()
2. doOnNext 블록을 fromCallabe 처리
Mono.fromCallable {
...
}
딱 1주일 걸렸따. ㅋㅋㅋㅋ아오!!
모든 것이 좋았다.
'개발이야기' 카테고리의 다른 글
| 데이터 설계.. 개똥 철학 (0) | 2025.10.27 |
|---|---|
| 수집된 zipkin 데이터를 이해해보자. (0) | 2025.09.23 |
| 리팩토링 - 객체 주입에 대한.. (2) | 2025.08.14 |
| 아르메리 모니터링(2) (6) | 2025.08.12 |
| 아르메리 모니터링(1) (1) | 2025.08.06 |