(운영체제 계층 → 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 일부만 있음


이런 식이면, 실제로 “우리 스택 기준”으로 추천 도구 조합 + 우선순위 체크리스트도 따로 짜드릴게요.

LIST

+ Recent posts