- 실행 중인 프로세스에 속도가 느려지는 증상이 나타나면 가장 먼저 의심해봐야 할 시스템 지표에 어떤 것이 있는가?
- CPU 부하, 메모리 가용량, IO 처리량, 디스크 가용량, ...
- CPU 점유율과 부하(load) 중에서 어떤 것이 프로세스 실행에 부정적인 효과를 가져오는가?
- CPU 부하는 어떤 의미인가?
- CPU의 run queue에 대기하고 있는 프로세스의 갯수
- CPU 부하가 어떤 경우에, 왜 프로세스 실행에 부정적인 효과를 가져오는가?
- CPU가 감당할 수 있는 프로세스의 갯수보다 더 많은 작업이 대기하고 있을 때 문제가 되며, 실제 프로세스 실행보다 더 많은 시간이 필요하게 되어 프로세스 외부 요인에 의한 효과가 커지므로
- CPU 부하가 높을 때, Unix/Linux 서버 환경에서 어떤 시스템 도구를 통해 확인할 수 있는가?
- top, vmstat, sar, ...
- ps라는 답변이 나온다면, 어떻게 사용하면 CPU 부하를 확인할 수 있는지 재질문할 것. ps의 옵션을 이용하면 점유율을 확인할 수 있으나 부하를 확인하기는 어려움
- CPU 부하가 높을 때 어떻게 해결할 것인가?
- 불필요한 프로세스의 실행을 차단함
- CPU를 점유율이나 부하 측면에서 가장 많이 사용하는 프로세스, 또는 직접 개발한 소프트웨어의 프로세스를 확인하고 프로파일링을 수행함
- 메모리 가용량이 적으면 어떤 문제가 발생하는가?
- 메모리 부족으로 인해 예외가 발생할 수 있음
- Swap 사용으로 인해 thrashing이 발생하여 성능 저하가 크게 발생할 수 있음
- 메모리 가용량이 0이 되면 바로 프로세스가 메모리를 할당받지 못하고 시스템이 종료되는가?
- Swap 메모리를 사용하게 되어 성능이 저하될 수 있으나 바로 치명적인 문제가 생기는 것은 아님
- 시스템이 곧바로 중단된다는 답변이 나온다면, virtual memory에 대한 개념이 부족할 수 있으므로 추가 질문을 통해 메모리 아키텍쳐를 이해하고 있는지 확인할 것
- 메모리 가용량이 적을 때, Unix/Linux 서버 환경에서 어떤 시스템 도구를 통해 확인할 수 있는가?
- 메모리 가용량이 적다면 어떻게 해결할 것인가?
- 메모리를 가장 많이 사용하는 프로세스, 또는 직접 개발한 소프트웨어의 프로세스를 확인하고 메모리 최적화를 수행함
- 저장장치(HDD, SSD)로 인해 시스템에 문제가 발생한다면 어떤 두 가지 측면을 살펴봐야 하는가?
- IO 성능 지연(latency)
- 디스크 공간 부족
- IO 성능 지연이 발생하면 어떤 증상이 나타나는가?
- 서비스 응답 시간이 수십 ms 정도였던 것이 수백 ms나 수 초 단위로 늘어나면서 총체적으로 느려짐
- 서버에 직접 접속했을 때, shell이나 vi 등의 편집기에 키 입력이 확연히 느려짐
- CPU나 메모리로 인한 문제점과 어떻게 구분되는가?
- CPU나 메모리의 점유율(utilization)이 낮은데도 불구하고 성능이 저하됨
- 서비스 요청까지는 들어오지만 실제 처리가 느려짐
- IO 성능 지연을 확인하려면 어떤 시스템 도구를 통해 확인할 수 있는가?
- iostat, sar, pidstat, ...
- IO 성능 지표 중에서 어떤 것이 가장 중요한 값인가?
- IO wait
- CPU가 저장장치를 기다리는 것에 할당하는 시간 비율
- 1/(# of cores)보다 크다면 느린 상황임
- IO 성능 지연이 발생한다면 어떻게 해결할 것인가?
- 캐싱
- 불필요한 IO 작업을 최소화
- HW적으로 RAID 구성 변경 또는 SSD 도입
- 디스크 공간 부족이 발생하면 어떤 증상이 나타나는가?
- 디스크 공간 부족 예외가 발생함
- 데이터를 저장하는 로직이 정상적으로 수행되지 않음
- root 파티션이 가득 찬 경우, 서버에 로그인이 안 되거나 콘솔에 메시지가 출력됨. 시스템 기본 서비스들이 정상적으로 동작하지 않게 됨
- 로그 파일에 로그가 추가되지 않음
- 디스크 공간 부족을 확인하려면 어떤 시스템 도구를 통해 확인할 수 있는가?
- 디스크 공간 부족이 발생한다면 어떻게 해결할 것인가?
- 특정 프로그램의 각 함수 호출이 차지하는 CPU 시간이나 반복 실행횟수 등의 정보를 취합하여 최적화하는 작업을 무엇이라고 하는가?
- 프로파일링의 원리는?
- hardward interrupt / code instrumentation / OS hook / instruction set simulation / performance counter
- 함수 호출을 가로채서 시간을 측정
- 동적 프로그램 분석의 한 가지
- 시스템 프로파일링이란?
- (perf 등의 도구를 이용하여) 시스템에서 발생한 이벤트를 기록하여 리포트하는 것
- 애플리케이션 프로파일링이란?
- 애플리케이션이 실행 중에 사용하는 CPU 시간이나 메모리의 사용 패턴을 기록하여 리포트하는 것
- 애플리케이션 프로파일링 도구로 어떤 것을 사용할 수 있는가?
- gprof, perf, valgrind, Java Profiler, ...
- 실제 프로파일링에서 중요한 지표는?
- 함수의 단위 수행시간 * 함수의 호출 반복 횟수 = 누적 소요시간
- 메모리 누수 지점, 메모리 할당 및 반환 크기
- 특정 프로세스가 특정 함수 위치에서 처리가 느리다거나 반복적으로 호출되고 있다는 점이 의심될 때, 프로세스를 종료하지 않고 프로세스 내부 상태를 확인하려면 어떤 시스템 도구를 이용할 수 있는가?
- 특정 프로그램의 전체적인 시스템 콜의 발생 순서나 성공 여부를 확인하려면 어떤 시스템 도구를 이용할 수 있는가?