Amazon EC2 Linux 인스턴스 내의 성능 병목 문제를 해결하고 싶습니다. 이를 위해 EC2Rescue for Linux와 함께 사용할 수 있는 고급 도구는 무엇입니까?

최종 업데이트 날짜: 2020년 5월 8일

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스 내의 성능 병목 문제를 해결하고 싶습니다. 이를 위해 EC2Rescue for Linux와 함께 사용할 수 있는 도구는 무엇입니까?

간략한 설명

Amazon EC2 Linux 인스턴스의 성능 병목은 CPU 성능, 블록 I/O 성능 또는 네트워크 성능에서 발생할 수 있습니다. 성능 병목이 어디에서 일어나는지 확인하려면 eBPF(extended Berkeley Packet Filter)의 bcc 프레임워크를 사용하면서 EC2Rescue for Linux에서 제공되는 33개의 도구를 활용할 수 있습니다. eBPF는 큰 성능 오버헤드 없이 프로덕션 환경에서 효율적이고 안전하게 모니터링 도구를 실행합니다.

해결 방법

(숙련된 Linux 시스템 관리자)

운영 체제에 맞는 bcc 패키지를 설치합니다.

1.    SSH를 사용하여 인스턴스에 연결합니다.

2.    bcc 패키지를 설치합니다. Amazon Linux 외에 다른 배포에 대한 다운로드 및 설치 지침은 해당 배포에 대한 설명서를 참조하십시오. Amazon Linux 인스턴스의 경우 다음 명령을 사용합니다.

$ sudo yum install bcc

3.    bcc 도구는 운영 체제에 대한 PATH 변수에 있어야 EC2 Rescue for Linux가 이를 실행할 수 있습니다. 다음 명령을 사용하여 도구를 PATH 변수에 넣으십시오.

$ sudo -s
# export PATH=$PATH:/usr/share/bcc/tools/

4.    PATH 설정을 Linux 시스템에 영구적으로 추가하는 것이 좋습니다. 이 설정을 영구적으로 추가하는 단계는 각 Linux 배포에 따라 달라집니다. Amazon Linux의 경우 다음 명령을 사용합니다.

vi 편집기를 사용하여 ~/.bash_profile을 엽니다.

# vi ~/.bash_profile

PATH 변수에 /usr/share/bcc/tools를 추가합니다.

PATH=$PATH:$HOME/bin:/usr/share/bcc/tools

파일을 저장하고 vi 편집기를 종료합니다.

업데이트된 프로필을 제공합니다.

#source ~/.bash_profile

6.    EC2 Rescue for Linux 도구를 다운로드하여 설치한 다음, 인스턴스의 설치 디렉터리로 이동합니다.

EC2Rescue for Linux와 함께 사용하는 일반적인 bcc 기반 모듈은 다음과 같습니다.

CPU 성능 도구

bccsoftirqs.yaml - 이 모듈은 soft interrupt(IRQ)를 추적하는 softirqs 도구를 실행한 다음, 효율성을 위해 커널에 타이밍 통계를 저장합니다. 간격은 --period를 사용하여 입력하고 카운트는 --times 인수를 사용하여 입력합니다. 이 도구는 각 실행의 타임스탬프를 자동으로 인쇄합니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bccsoftirqs.yaml을 참조하십시오.

bccrunqlat.yaml - 이 프로그램은 각 작업이 CPU에서 실행될 차례를 기다린 시간을 표시합니다. 결과는 히스토그램으로 표시됩니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bccrunqlat.yaml을 참조하십시오.

# ./ec2rl run --only-modules=bccsoftirqs,bccrunqlat --period=5 --times=5

블록 I/O 성능 도구

bccbiolatency.yaml - 블록 디바이스 I/O를 추적하고 디스크 디바이스당 I/O 지연(시간) 분포를 기록합니다. 예를 들어 EC2 인스턴스에 연결된 인스턴스 스토어와 Amazon Elastic Block Store(Amazon EBS)가 여기에 해당합니다. 결과는 히스토그램으로 출력됩니다. 이 모듈은 특정 기간 실행되고 특정 횟수만큼 출력값을 수집합니다. 아래 예시에서 periodtimes 변수는 5로 설정됩니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bccbiolatency.yaml을 참조하십시오.

bccext4slower.yaml - ext4slower 도구를 사용하여 출력값을 수집합니다. ext4slower는 기본 임계값 10ms보다 느린 모든 ext4 읽기, 쓰기, 열기, fsync를 추적합니다. 이 모듈은 특정 기간 실행되고 특정 횟수만큼 출력값을 수집합니다. 아래 예시에서 periodtimes 변수는 5로 설정됩니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bccext4slower.yaml을 참조하십시오.

XFS 파일 시스템의 bccext4slower.yaml과 유사하게 bccxfsslower 모듈을 사용할 수 있습니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bccxfsslower.yaml을 참조하십시오.

bccfileslower.yaml - 기본 임계값 10ms보다 느린 파일 기반 동기식 읽기 및 쓰기를 추적하는 fileslower를 사용하여 출력값을 수집합니다. 이 모듈은 특정 기간 실행된 다음, 특정 횟수만큼 출력값을 수집합니다. 아래 예시에서 periodtimes 변수는 5로 설정됩니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bccfileslower.yaml을 참조하십시오.

# ./ec2rl run --only-modules=bccbiolatency,bccext4slower,bccfileslower --period=5 --times=5

네트워크 성능 도구

bcctcpconnlat.yaml - 활성 TCP 연결을 실행하는 커널 함수를 추적합니다(예: connect() syscall 사용). 결과는 연결에 대한 지연(시간)으로 표시됩니다. 지연 시간은 로컬에서 측정되는데, 즉 특정 기간에 SYN에서 응답 패킷으로 전송된 시간을 의미합니다. TCP 연결 지연은 연결을 설정하는 데 걸린 시간을 나타냅니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bcctcpconnlat.yaml을 참조하십시오.

bcctcptop.yaml - 화면을 지우지 않고 특정 기간 및 시간 동안 호스트 및 포트당 TCP 연결 처리량을 표시합니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bcctcptop.yaml을 참조하십시오.

bcctcplife.yaml - 추적 중에 열리고 닫히는 TCP 세션을 요약합니다. 자세한 내용은 GitHub 웹 사이트의 EC2Rescue for Linux - bcctcplife.yaml을 참조하십시오.

# ./ec2rl run --only-modules=bcctcpconnlat,bcctcptop,bcctcplife --period=5 --times=5

출력 예시

이 모듈들을 실행한 결과는 하나 이상의 모듈이 인스턴스에서 1회 실행된 후에 /var/tmp/ec2rl 디렉터리에 들어갑니다.

다음 예시는 period 파라미터를 5로 설정하고 times 파라미터를 2로 설정한 bcctcptop 모듈의 출력값입니다.

# ./ec2rl run --only-modules=bcctcptop --period=5 --times=2
# cat /var/tmp/ec2rl/2020-04-20T21_50_01.177374/mod_out/run/bcctcptop.log 
I will collect tcptop output from this alami box 2 times.
Tracing... Output every 5 secs. Hit Ctrl-C to end
21:50:17 loadavg: 0.74 0.33 0.17 5/244 4285
PID    COMM         LADDR                 RADDR                  RX_KB  TX_KB
3989   sshd         172.31.22.238:22      72.21.196.67:26601         0      9
21:50:22 loadavg: 0.84 0.36 0.18 4/244 4285
PID    COMM         LADDR                 RADDR                  RX_KB  TX_KB
3989   sshd         172.31.22.238:22      72.21.196.67:26601         0     11
2731   amazon-ssm-a 172.31.22.238:54348   52.94.225.236:443          5      4
2938   amazon-ssm-a 172.31.22.238:58878   52.119.197.249:443         0      0

다음 명령을 사용하여 AWS Support에 결과를 업로드할 수 있습니다.

# ./ec2rl upload --upload-directory=/var/tmp/ec2rl/2020-04-20T21_50_01.177374 --support-url="URLProvidedByAWSSupport"

참고: 앞의 명령에서 인용 부호는 필수입니다. sudo와 함께 도구를 실행하는 경우 sudo를 사용하여 결과를 업로드하십시오. Amazon Simple Storage Service(Amazon S3)의 사전 서명 URL을 사용하여 결과를 업로드하는 방법에 대한 자세한 내용을 확인하려면 help upload 명령을 실행하십시오.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?