2. 텍스트
프로세스 이해
▸이유: CPU 사용률을 높이는 코드를 찾아 개선하기 위해
▸프로세스 이해에 필요한 기본 지식
▸수행중인 코드: 어떤 함수를 수행하고 있는가?
▸통신/파일 상태: 통신으로 연계된 서버는 어디고, 어떤 파일
을 열고 있는가?
▸통신/파일 간 동작: 연계 서버 또는 파일에 입출력이 얼마나
자주 그리고 오래 이뤄지는가?
3. 텍스트
프로세스 모니터링 방법
구분 유닉스 리눅스 윈도우
스택 jstack, pstack jstack, pstack
jstack, procexp,
processhacker
통신/파일 상태 pfiles, lsof
/proc/[pid]/fd,
lsof
procexp,
processhacker
, topview
통신/파일 동작 truss, tusc strace procmon
6. 텍스트
스택 정보를 이용한 성능 분석
▸스택은 성능저하 요인을 유추할 수 있는 정보 제공
▸일정 시간 간격으로 수십에서 수백번 스택 정보를 수집해 분
석하면 성능 분석을 위한 기초 자료가 됨
7. 텍스트
스택 대기 분석
▸대기: 특정 이유로 코드 수행이 멈춰있는 상태로 성능 저하를
발생시키는 원인 중 하나
▸Queue wait: thread pool 등 자원 부족
▸Lock: 공유 자원 사용 대기
▸정상적으로 작업이 진행되지 못하고 대기하는 비율이 얼마나
높은가?
8. 텍스트
LOCK 대기
▸jstack에서 lock 식별(Oracle JVM)
▸locked: lock을 잡은 상태
- locked <0x00000007407830e8>
▸waiting to lock: 다른 쓰레드가 잡은 락이 풀리기를 기다리는
상태
- waiting to lock <0x00000007407830e8>
▸주소가 동일하면 동일한 lock에 대해 대기
▸개선 방법: 대기시간을 줄임, Lock 구간을 최소화, Lock을 세분
화해서 경합을 완화
12. 텍스트
SOCKET 읽기 대기
▸Socket에서 다른 서버나 프로세스에서 처리가 끝나기를 기다
리는 상태
▸문제 상황
▸다른 서버나 프로세스 처리 시간이 오래 걸리는 경우
=> 해당 프로세스나 서버 처리시간 개선
▸인터페이스 호출이 빈번하게 일어나는 경우
=> 반복수행 제거, SQL 통합, 집합처리
13. 텍스트
SLEEP 대기
▸프로세스가 sleep 상태에서 대기하는 것
▸비동기 입출력 대기
▸Nonblocking 입출력에서 수신 대기
▸수행조건 만족 대기
▸자원 추가 할당, 대기 파라메터 조정 등으로 해결
14. 텍스트
교착상태
▸서로다른 두개 이상의 프로세스가 상대 프로세스가 점유하고
있는 자원을 기다리는 무한 대기상태
▸java에서는 stackdump에서 자동으로 인식(못하는 경우도 있
음)
16. 텍스트
STACK 성능 분석
▸각 Stack 수행이 차지하는 비중 분석
▸A서비스 응답 5초, 그 중 B쿼리 수행 시간이 4초
=> B 쿼리를 최적화 시켜야 함
17. 텍스트
STACK 분석 중점 항목
▸Lock 분석
▸Lock으로 대기하는 스레드가 존재하는가?
▸전체 스레드 가운데 Lock을 대기중인 비율이 얼마나 되는
가?
▸최상위 Stack 분석
▸내부 수행 중인 것과 응답대기(소켓 읽기 상태) 중인 비율은
어떤가?
▸비정상적으로 실행 비율이 높은 내부 수행 코드 유형이 있
는가?
(문자열처리, 로깅, 계산, 파일처리 등)
18. 텍스트
STACK 분석 중점 항목
▸SQL 유형 분석
▸SQL 중 어떤 것들의 비중이 높은가?
▸솔루션 유형 분석
▸프레임워크, 룰 엔진, APM 도구, 암호화 등 시스템에 적용
된 솔루션 단위의 수행 비중은 어떤가?
▸업무 유형 분석
▸서비스 요청 단위로 업무의 비중은 어떤것이 높은가?
19. 텍스트
프로세스 스택 분석 도구
▸책에는 저자가 만든 도구를 소개하고 있는데 ….
▸jvisualvm 을 사용하면 됩니다….
▸스택 수집, 분석, 프로파일링 다 됩니다….