(운영체제 계층 → JVM/런타임 → DB/외부 연동 → APM/로그 순으로 보통 갑니다.)
---
1. OS / 서버 레벨 모니터링 도구
✅ 리눅스 기본
top / htop
CPU 사용률, Load Average, 메모리, 각 프로세스 사용량 확인.
vmstat, iostat, sar
vmstat: CPU, 메모리, context switch
iostat: 디스크 I/O 병목 확인
sar: 시스템 리소스 히스토리 추적
free, df, du
free: 메모리 부족 여부
df/du: 디스크 풀 여부 → 스왑/로그 폭발로 인한 느려짐 진단
✅ 컨테이너/쿠버네티스
docker stats
컨테이너별 CPU/메모리 체크
kubectl top pod / node
K8s 환경에서 pod / node 리소스 확인
---
2. 애플리케이션 / JVM 레벨 도구 (Java 기준)
✅ JVM 모니터링
jstat : GC 발생 횟수, GC 시간 → Stop-The-World 때문에 느려지는 케이스 확인
jmap : 힙 덤프 떠서 메모리 누수, 특정 객체 폭증 확인
jstack : 스레드 덤프 → 어떤 스레드가 어디서 막혀 있는지, Deadlock 있는지 확인
jconsole, VisualVM : GUI로 힙, 스레드, GC, 클래스 로딩 등 실시간 모니터링
✅ 스레드/락 확인
스레드 덤프(jstack) 보고
DB 커넥션 풀 고갈
synchronized / 락 대기
외부 API 호출에서 timeout 대기
이런 거 바로 잡아낼 수 있음.
---
3. DB 레벨 도구
DB마다 다르지만 공통 개념은 비슷합니다.
슬로우 쿼리 로그(slow query log)
MySQL, MariaDB: long_query_time 이상 쿼리 기록
EXPLAIN / 실행 계획 도구
인덱스 안 타는 쿼리, 풀스캔, 조인 병목 확인
DB 모니터링 툴
Oracle: AWR, OEM
MSSQL: Activity Monitor, Query Store
PostgreSQL: pg_stat_activity, pg_stat_statements
락/대기 조회 쿼리
세션이 락 걸고 안 풀려서 전체가 느려지는 케이스 확인
---
4. APM(Application Performance Monitoring) / 관제
서비스 전체 흐름 기준으로 “어디서 느려지는지” 볼 때 쓰는 툴들.
APM 도구 예시
Pinpoint, Scouter (국내에서 많이 씀)
New Relic, Datadog, Dynatrace, AppDynamics 등
공통 기능
트랜잭션별 응답 시간 분포
URL별, 메소드별 성능
외부 API, DB 호출 시간 분해
에러율, TPS, Apdex 등
장점:
“사용자 요청 → WAS → DB/외부API” 전 구간을 한 눈에 볼 수 있어,
어디서 딱 병목인지 빨리 파악 가능.
---
5. 로그 / 트레이싱 도구
✅ 로그 수집 & 분석
ELK 스택 (Elasticsearch + Logstash + Kibana)
EFK (Fluentd/Fluent Bit + Elasticsearch + Kibana)
Graylog, Splunk 등
할 수 있는 것:
특정 시간대 에러 폭증 여부
응답 시간 로그(시간측정 로그 박아둔 경우) 기반 통계
특정 API만 느려졌는지, 전체가 느려졌는지 확인
✅ 분산 트레이싱
Jaeger, Zipkin, OpenTelemetry 기반 솔루션
마이크로서비스 구조에서, 각 서비스 구간별 지연 파악
---
6. 네트워크 / 인프라 계층 도구
ping, traceroute : 네트워크 지연, 회선 문제
netstat, ss : 포트/세션 상태, TIME_WAIT/ESTABLISHED 폭주 확인
iftop, nethogs : 누가 네트워크를 얼마나 쓰는지
NMS(Zabbix, Nagios, PRTG, Prometheus+Grafana)
서버, 네트워크 장비, DB, 애플리케이션까지 종합 모니터링
---
7. 실제 진단 순서 예시
시스템 느려졌다고 했을 때, 보통 이런 플로우로 갑니다:
1. OS 레벨
top/htop → CPU 100%? Load 이상? 메모리/스왑 터졌는지?
2. 애플리케이션/JVM
jstack/jstat → GC 폭발? 특정 스레드 Wait/Blocked?
3. DB
슬로우쿼리 / 락 / 세션 폭증 확인
4. APM / 로그
특정 API만 느린지 전체 트랜잭션 느린지
에러/타임아웃 패턴 확인
5. 네트워크
ping/iftop/NMS → 회선/대역폭 부족, 패킷로스 여부
---
한 줄 정리
> 시스템 전체가 느려질 때는
OS(top, vmstat) → JVM(jstat, jstack) → DB(slow query, 락) → APM(Pinpoint 등) → 로그/네트워크(ELK, NMS)
이런 계층별 도구 조합으로 진단한다고 보시면 됩니다.
---
혹시 회사 환경이
온프렘 리눅스 + WAS(Tomcat) + Maria/Oracle/Informix
모니터링은 Zabbix/Pinpoint/ELK 일부만 있음
이런 식이면, 실제로 “우리 스택 기준”으로 추천 도구 조합 + 우선순위 체크리스트도 따로 짜드릴게요.
'Developer > Spring & Backend' 카테고리의 다른 글
| 캐싱 전략에 대해서 설명해주세요. (0) | 2025.11.22 |
|---|---|
| 리액트 동시성 모드(Concurrent Mode)에 관해서 설명해주세요. (0) | 2025.11.22 |
| 동시성과 병렬성에 대해서 설명해주세요. (0) | 2025.11.20 |
| 리액트에서 컴포넌트가 불필요하게 리렌더링되는 상황을 방지하기 위한 방법을 설명해 주세요. (0) | 2025.11.20 |
| CORS(Cross-Origin Resource Sharing)는 무엇이며 왜 필요한가요? (0) | 2025.11.19 |
