250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- execute
- 동적sql
- FetchType
- 낙관적락
- 다대일
- 스토어드 프로시저
- JPQL
- eager
- querydsl
- PS
- 힙
- shared lock
- 백트래킹
- dfs
- 일대다
- 스프링 폼
- 데코레이터
- 비관적락
- 연관관계
- 즉시로딩
- 연결리스트
- BOJ
- SQL프로그래밍
- fetch
- exclusive lock
- 유니크제약조건
- 이진탐색
- 다대다
- CHECK OPTION
- 지연로딩
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
그라파나 - 메트릭을 통한 문제 확인 예제 본문
728x90
# 실무에서 많이 발생하는 대표적인 문제
- CPU 사용량 초과
- JVM 메모리 사용량 초과
- 커넥션 풀 고갈
- 에러 로그 급증
# CPU에 부하를 주는 코드 추가
@Slf4j
@RestController
public class TrafficController {
@GetMapping("/cpu")
public String cpu(){
log.info("옛다 cpu 부하!!!!!");
long value = 0;
for (long i=0; i< 100000000000L; i++){
value++;
}
return "ok value = " + value;
}
}
# cpu 부하 주는 api 실행
# JVM 메모리 사용 누적하는 코드
private List<String> list = new ArrayList<>();
@GetMapping("/jvm")
public String jvm(){
log.info("jvm");
for (int i=0; i<1000000; i++){
list.add("엤다 메모리부하!!" + i);
}
return "ok";
}
- 스프링빈은 싱글톤으로 만들어지기 때문에 List 생성을 함수 밖에 둔다.
- /jvm 으로 요청하고, 계속 새로고침해서 계에에에속 요청해보자.
죽어버림
- 보통은 GC가 이걸 방지헤준다.
# 커넥션 풀 고갈
@Autowired
DataSource dataSource;
@GetMapping("/jdbc")
public String jdbc() throws SQLException{
log.info("jdbc");
Connection conn = dataSource.getConnection();
log.info("connection info={}", conn);
//conn.close(); // 커넥션을 닫지 않는다.
return "ok";
}
- 총 10번 API 요청을 해본다.
- 커넥션이 10번 이루어져 Active가 MAX를 쳤다.
- 여기서 한번 더 요청한다면,
- Active 커넥션이 커넥션 풀의 최대 숫자인 10개를 넘어가게 되면, 커넥션을 획득하기 위해 대기(Pending)하게 된다.
- 그래서 커넥션 획득 부분에서 대기하게 되고 결과적으로 HTTP 요청에 응답하지 못한다.
- DB 커넥션을 획득하기 위해 대기하던 톰캣 쓰레드가 30초 이상 DB커넥션을 획득하지 못하면 다음과 같은 예외가 발생하면서 커넥션 획득을 포기한다.
# 에러 로그 급증
- ERROR 레벨의 로그가 급증한다면 심각한 문제가 발생한 것으로 볼 수 있다.
@GetMapping("/error-log")
public String errorLog(){
log.error("error log");
return "error";
}
'모니터링' 카테고리의 다른 글
모니터링 도입기 (2) | 2023.12.21 |
---|---|
모니터링 환경 구성 (1) | 2023.12.21 |
모니터링 메트릭 활용 - 스프링부트에서의 예제 (1) | 2023.12.21 |
프로메테우스 & 그라파나 (0) | 2023.12.18 |
모니터링 툴 - 마이크로미터 (0) | 2023.12.18 |