Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
동기화 명령을 실행하여 EC2 인스턴스와 S3 버킷 간에 데이터를 전송하고 있지만 전송 속도가 느립니다. 이 문제를 해결하려면 어떻게 해야 하나요?
동기화 명령을 실행하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 Amazon Simple Storage Service(S3) 버킷 간에 데이터를 전송하고 있습니다. 그러나 전송이 느립니다.
간략한 설명
AWS Command Line Interface(AWS CLI)의 sync 명령은 LListObjectsV2, HeadObject, GetObject 및 PutObject API 호출을 포함하는 상위 수준의 명령입니다. 다음 섹션을 사용하여 전송 속도 저하의 원인을 확인할 수 있습니다.
해결 방법
사용 사례의 아키텍처 검토
네트워크 연결, 전송 속도 및 리소스 부하를 테스트하기 전에 전송 속도에 영향을 줄 수 있는 다음 아키텍처 요소를 고려하십시오.
- 어떤 Amazon EC2 인스턴스 유형을 사용 중입니까? 이 전송 사용 사례의 경우 처리량이 최소 10Gbps인 인스턴스를 사용하는 것이 가장 좋습니다.
- EC2 인스턴스와 S3 버킷이 동일한 AWS 리전에 있습니까? 인스턴스와 버킷을 동일한 리전에 배포하는 것이 가장 좋습니다. 또한 인스턴스가 배포된 VPC에 Amazon S3용 VPC 엔드포인트를 연결하는 것이 가장 좋습니다.
- 동일한 리전에 있는 인스턴스 및 버킷의 경우, AWS CLI가 Amazon S3 Transfer Acceleration 엔드포인트를 사용하도록 구성되어 있습니까? 리소스가 동일한 리전에 있는 경우 Transfer Acceleration 엔드포인트를 사용하지 않는 것이 가장 좋습니다.
- 전송하려는 소스 데이터 세트의 특성은 무엇입니까? 예를 들어, 많은 작은 파일을 전송합니까, 아니면 몇 개의 큰 파일을 Amazon S3로 전송합니까? AWS CLI를 사용하여 다양한 소스 데이터 세트를 Amazon S3로 전송하는 방법에 대한 자세한 내용은 Amazon S3 CLI 최대한 활용하기를 참조하십시오.
- 어떤 버전의 AWS CLI를 사용 중입니까? 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.
- AWS CLI의 구성은 무엇입니까?
모범 사례를 따른 후에도 여전히 전송 속도가 느린 경우 네트워크 연결, 전송 속도 및 리소스 부하를 확인하십시오.
네트워크 연결 확인
S3 버킷에서 dig 명령을 실행하고 쿼리 시간 필드에 반환된 쿼리 응답 시간을 검토합니다. 다음 예시에서 쿼리 시간은 0msec입니다.
Bash $ dig +nocomments +stats +nocmd awsexamplebucket.s3.amazonaws.com ;awsexamplebucket.s3.amazonaws.com. IN A awsexamplebucket.s3.amazonaws.com. 2400 IN CNAME s3-3-w.amazonaws.com. s3-3-w.amazonaws.com. 2 IN A 52.218.24.66 ;; Query time: 0 msec ;; SERVER: 172.31.0.2#53(172.31.0.2) ;; WHEN: Fri Dec 06 09:30:47 UTC 2019 ;; MSG SIZE rcvd: 87
도메인 이름 시스템(DNS) 확인 쿼리가 IP 주소를 반환하는 데 걸리는 응답 시간이 길면 성능에 영향을 줄 수 있습니다. 쿼리 응답 시간이 길어지면 인스턴스에 대한 DNS 서버를 변경해 보십시오. 다른 네트워크 연결 테스트로, 가상 스타일 호스트 이름과 버킷의 S3 리전 엔드포인트에 대해 TCP를 사용하여 traceroute 또는 mtr를 실행합니다. 다음 mtr 예시의 요청은 인스턴스의 VPC에 연결된 Amazon S3용 VPC 엔드포인트를 통해 라우팅됩니다.
Bash $ mtr -r --tcp --aslookup --port 443 -c50 awsexamplebucket.s3.eu-west-1.amazonaws.com Start: 2019-12-06T10:03:30+0000 HOST: ip-172-31-4-38.eu-west-1.co Loss% Snt Last Avg Best Wrst StDev 1. AS??? ??? 100.0 50 0.0 0.0 0.0 0.0 0.0 2. AS??? ??? 100.0 50 0.0 0.0 0.0 0.0 0.0 3. AS??? ??? 100.0 50 0.0 0.0 0.0 0.0 0.0 4. AS??? ??? 100.0 50 0.0 0.0 0.0 0.0 0.0 5. AS??? ??? 100.0 50 0.0 0.0 0.0 0.0 0.0 6. AS??? ??? 100.0 50 0.0 0.0 0.0 0.0 0.0 7. AS16509 s3-eu-west-1-r-w.am 62.0% 50 0.3 0.2 0.2 0.4 0.0
Amazon S3 업로드 및 다운로드 속도 테스트
1. 2GB의 콘텐츠가 포함된 테스트 파일 5개를 생성합니다.
Bash $ seq -w 1 5 | xargs -n1 -P 5 -I % dd if=/dev/urandom of=bigfile.% bs=1024k count=2048 $ ls -l total 10244 -rw-rw-r-- 1 ec2-user ec2-user 2097152 Nov 8 08:14 bigfile.1 -rw-rw-r-- 1 ec2-user ec2-user 2097152 Nov 8 08:14 bigfile.2 -rw-rw-r-- 1 ec2-user ec2-user 2097152 Nov 8 08:14 bigfile.3 -rw-rw-r-- 1 ec2-user ec2-user 2097152 Nov 8 08:14 bigfile.4 -rw-rw-r-- 1 ec2-user ec2-user 2097152 Nov 8 08:14 bigfile.5
2. AWS CLI를 사용하여 동기화 명령을 실행하여 5개의 테스트 파일을 업로드합니다. 전송 시간을 가져오려면 동기화 명령의 시작 부분에 time 명령(Linux 설명서에 나와 있음)을 삽입합니다.
참고: 동기화 명령이 진행되는 동안 처리 속도도 기록해 두십시오.
Bash $ time aws s3 sync . s3://awsexamplebucket/test_bigfiles/ --region eu-west-1 Completed 8.0 GiB/10.2 GiB (87.8MiB/s) with 3 file(s) remaining real 2m14.402s user 2m6.254s sys 2m22.314s
이 테스트 결과를 사용 사례의 실제 동기화 시간과 비교할 수 있는 기준선으로 사용할 수 있습니다.
동기화가 백그라운드 프로세스로 실행되는 동안 네트워크 및 리소스 부하 검토하기
1. 동기화 명령의 끝에 **&**를 추가하여 백그라운드에서 명령을 실행합니다.
참고: 스트림 연산자(>)를 추가하여 나중에 검토할 수 있는 텍스트 파일에 출력을 기록할 수도 있습니다.
Bash $ time aws s3 sync . s3://awsexamplebucket/test_bigfiles/ --region eu-west-1 \ > ~/upload.log & [1] 4262 $
2. 동기화 명령이 백그라운드에서 실행되는 동안 mpstat 명령(Linux 설명서에 있음)을 실행하여 CPU 사용량을 확인합니다. 다음 예제에서는 4개의 CPU가 사용 중이며 약 20%가 사용되고 있음을 보여줍니다.
Bash $ mpstat -P ALL 10 Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 21.21 0.00 23.12 0.00 0.00 2.91 0.00 0.00 0.00 52.77 Average: 0 21.82 0.00 21.71 0.00 0.00 3.52 0.00 0.00 0.00 52.95 Average: 1 21.32 0.00 23.76 0.00 0.00 2.66 0.00 0.00 0.00 52.26 Average: 2 20.73 0.00 22.76 0.00 0.00 2.64 0.00 0.00 0.00 53.88 Average: 3 21.03 0.00 24.07 0.00 0.00 2.87 0.00 0.00 0.00 52.03
이 경우 CPU가 병목 현상이 아닙니다. 사용률 비율이 90% 이상인 경우 추가 CPU가 있는 인스턴스를 실행해 보세요. top 명령을 실행하여 실행 중인 가장 높은 CPU 사용률을 검토할 수도 있습니다. 먼저 해당 프로세스를 중지한 다음 동기화 명령을 다시 실행해 보세요.
3. 동기화 명령이 백그라운드에서 실행되는 동안 lsof 명령(Linux 설명서 참조)을 실행합니다. 포트 443에서 Amazon S3에 얼마나 많은 TCP 연결이 열려 있는지 확인합니다.
참고: AWS CLI 구성 파일의 사용자 프로필에 대해 max_concurrent_requests가 20으로 설정되어 있으면 최대 20개의 설정된 TCP 연결이 표시될 것으로 예상됩니다.
Bash $ lsof -i tcp:443 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME aws 4311 ec2-user 3u IPv4 44652 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:33156->52.218.36.91:https (CLOSE_WAIT) aws 4311 ec2-user 4u IPv4 44654 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39240->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 5u IPv4 44655 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39242->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 6u IPv4 47528 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39244->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 7u IPv4 44656 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39246->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 8u IPv4 45671 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39248->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 13u IPv4 46367 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39254->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 14u IPv4 44657 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39252->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 15u IPv4 45673 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39250->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 32u IPv4 47530 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39258->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 33u IPv4 45676 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39256->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 34u IPv4 44660 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39266->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 35u IPv4 45678 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39260->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 36u IPv4 45679 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39262->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 37u IPv4 45680 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39268->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 38u IPv4 45681 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39264->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 39u IPv4 45683 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39272->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 40u IPv4 47533 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39270->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 41u IPv4 44662 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39276->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 42u IPv4 44661 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39274->52.216.162.179:https (ESTABLISHED) aws 4311 ec2-user 43u IPv4 44663 0t0 TCP ip-172-31-4-38.eu-west-1.compute.internal:39278->52.216.162.179:https (ESTABLISHED)
포트 443에 다른 TCP 연결이 표시되면 동기화 명령을 다시 실행하기 전에 해당 연결을 중지해 보십시오.
TCP 연결 수를 확인하려면 다음 명령을 실행합니다.
$ lsof -i tcp:443 | tail -n +2 | wc -l 21
4. 단일 동기화 프로세스가 최적화되면 여러 동기화 프로세스를 병렬로 실행할 수 있습니다. 이렇게 하면 높은 네트워크 대역폭을 사용할 수 있지만 네트워크 대역폭의 절반만 사용 중인 경우 단일 프로세스로 인해 업로드 속도가 느려지는 것을 방지할 수 있습니다. 병렬 동기화 프로세스를 실행할 때 원하는 처리량을 얻으려면 서로 다른 접두사를 대상으로 지정하십시오.
자세한 내용은 대량의 데이터를 Amazon S3에 업로드할 때 성능을 최적화하려면 어떻게 해야 합니까?를 참조하십시오.

관련 콘텐츠
- 질문됨 한 달 전lg...
- 질문됨 일 년 전lg...
- 질문됨 한 달 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 5달 전