본문 바로가기
  • 개발 로그를 기록하며,
    복습하고 깊이를 더해갑니다.
🌐OS/Linux

[Linux] 웹 서비스 성능 이슈 파악하고 개선하기

by inbeom 2025. 4. 17.
배포한 웹 서비스에서 성능 이슈가 발생했을 때 기본적으로 확인 하고 조치할 수 있는 내용이다.

 

 

 

💾 Disk / Memory / CPU 리소스 점검

확인 명령어 설명 조치 방법 
iostat -x 1 5 디스크 사용률 및 대기 시간 확인 (%util) %util 90% 이상이면 디스크 병목 → 로그 디렉토리 분리, SSD 교체 검토
vmstat 1 5 시스템 전체 리소스 사용 확인 (us, wa 등) wa가 높으면 디스크 병목, us가 높으면 CPU 과다 → 병목 코드, IO 집중 작업 분리
df -h 디스크 용량 확인 /var/log, /tmp 디렉토리 정리, 오래된 로그, 백업 파일 삭제 등
free -h 메모리 사용량 확인 swap 사용량이 많다면 서버 성능이 저하될 수 있다. 
불필요한 process 제거, memory 확장 검토
htop 또는 top 실시간 CPU, 메모리 사용률 확인 특정 프로세스 CPU/메모리 과다 사용 시 해당 애플리케이션 튜닝 또는 서버 리소스 증설 고려

 

 

🐘 PostgreSQL 세션 및 쿼리 상태 점검

확인 명령어 설명 조치 방법
SHOW idle_in_transaction_session_timeout; Idle 상태 세션의 대기 시간 설정 확인 기본값이 너무 크면 커넥션이 계속 유지됨 → SET idle_in_transaction_session_timeout TO '60s'; 설정 권장
SELECT pid, usename, state, query_start, query FROM pg_stat_activity WHERE state != 'idle'; 실행 중인 쿼리 및 상태 확인 오래 실행 중인 쿼리 분석 및 튜닝
필요시 SELECT pg_terminate_backend(<pid>);로 강제 종료

 

 

🔨 JVM 상태 및 Thread 점검

확인 명령어 설명 조치 방법
jstat -gcutil <PID> 1s 10 GC 사용률 및 빈도 확인 Old GC 비율이 높으면 -Xmx, -Xms 메모리 조정
G1GC 등으로 GC 정책 변경:
-XX:+UseG1GC
jstack <PID> 자바 스레드 상태 확인 BLOCKED, WAITING 상태 확인
데드락 발생 여부 확인, 병목 위치 분석
ps -eo nlwp | tail -n +2 | awk '{num_threads += $1} END {print num_threads}'  서버 전체 스레드 수 확인 너무 많다면 적절한 수준의 스레드풀 설정
ps -ef grep java 실행 중인 JVM PID 확인

 

 

🛜 Network / Connection 상태 점검

확인 명령어 설명 조치 방법
netstat -antp | grep ESTABLISHED 서버와 클라이언트 간 연결 상태 확인  
ulimit -n 열린 파일 최대 개수 확인 기본값 1024이면 부족 → /etc/security/limits.conf 또는 ulimit -n 65535 설정

 

 

📝 Application 로그 분석

확인 명령어 설명 조치 방법
tail -f /path/to/app.log 애플리케이션 로그 확인 오류 로그, 슬로우 응답 API 분석
타임스탬프 기준으로 느린 시점 파악
예외 로그 메시지 분석 API 실패 또는 느림의 근본 원인 파악 외부 API 호출 실패, 쿼리 병목, GC 또는 동시성 문제 파악

 

 

⚙️ Server 환경 및 설정 확인

확인 명령어 설명 조치 방법
java -XshowSettings:vm -version JVM 힙 설정 확인 -Xms, -Xmx 값이 서버 메모리에 비해 낮다면 조정 (예: -Xmx2g)
Tomcat 설정 (server.xml) maxThreads, connectionTimeout 등 트래픽에 맞춰 maxThreads 증가 (예: 200 → 500)

 

 

프로그램 및 환경 정보

WAS : Apache Tomcat

Framework : SpringMVC

Language : Java

Database : PostgreSQL, Elasticsearch

Server : Linux(CentOS)

728x90