Redis가 큰 데이터 세트를로드 할 때 일부 Linux 시스템이 매우 느려짐


14

Redis 사용자로부터 보고서를 받았는데 Linux 및 스케줄러 분야의 전문가가 아니기 때문에 무엇을 대답해야할지 잘 모르겠습니다. 그러나 Redis 프로젝트로서 특히 이런 종류의 문제를 파악해야합니다. 앞으로 Redis Cluster와 마찬가지로 많은 Redis 인스턴스가 단일 상자에 동시에 실행됩니다. 그래서 여기에 도움을 요청하고 있습니다.

문제:

  • 커널 : "Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP Thu Apr 15 08:05:38 UTC 2010 x86_64 GNU / Linux"
  • 충분한 여유 RAM, 중요한 I / O를 수행하는 다른 프로세스는 없습니다.
  • 실제 서버가 아닌 EC2 빅 인스턴스에서 실행하는 것이 중요 합니다. 가상화되지 않은 환경에서는 그런 것을 보지 못했습니다. EC2 인스턴스는 "고용량 메모리 초대형 인스턴스 17.1GB 메모리, 6.5 ECU (각각 3.25 EC2 컴퓨팅 유닛을 갖춘 2 개의 가상 코어), 420GB의 로컬 인스턴스 스토리지, 64 비트 플랫폼" 이었습니다.

기본적으로 큰 Redis 인스턴스를 다시 시작하면 시스템이 너무 느려져 더 이상 쉘에 입력 할 수 없습니다. Redis는 인스턴스를로드 할 때 100 %의 CPU를 사용하고 (가능한 빨리 데이터를로드 함) dump.rdb 파일을 순차적으로 읽습니다. 로드가 I / O 바운드가 아닌 CPU 바운드이므로 I / O는 특히 높지 않습니다.

지구상에서 두 개의 CPU와 충분한 RAM이 있고 디스크에 스왑 된 것이없는 상자가 기본적 으로이 작업로드로 작업을 중지 해야하는 이유는 무엇입니까?

나는 이것이 EC2 인스턴스라는 사실과 관련이 있다는 인상을 받았습니다. 따라서 Redis의 다른 인스턴스에서도 문제없이 Redis 24GB 데이터 세트 를 항상 상자에 로드 할 때 사용되는 가상화 기술과 관련이 있습니다. 높은 부하로 작동).

힌트 주셔서 감사합니다!

살바토레

편집 : 트위터에서받은 의견 추가 :

@ ezmobius에서 : @antirez 가장 먼저 할 일은 / mnt 또는 로컬 임시 드라이브에서 EBS 결함이 있는지 확인하는 것입니다. 두 번째는 "첫 번째 쓰기 패널티"(google it)가 아닌지 확인하는 것입니다. 먼저 디스크에서 0을 dd로 입력해야합니다.

@dvirsky : @antirez 정확히 같은 ec2 노드에서 많은 redis 인스턴스를 실행하고 있습니다. 나는 bgsave에서 약간의 둔화를 보았지만이 현상은 아닙니다.

답변:


4

'top'의 출력은 약간의 단서를 얻을 수 있습니다. 왼쪽 상단에 '% stolen'이라는 레이블이 붙은 필드가 있습니다.이 필드에는 동일한 물리적 상자에서 다른 게스트로 전환 된 하드웨어 CPU의 양이 반영됩니다. 하이퍼 바이저가 다른 게스트에 더 많은 CPU를 할당하기로 결정했을 때, 특히 장기적으로 CPU를 많이 사용하는 작업을 수행 할 때 이러한 종류의 속도 저하를 보았습니다.

그것이 당신의 문제인지 아닌지 확실하지 않지만 확인할 가치가 있습니다.


Kevin에게 감사합니다. 이것은 매우 흥미롭고 나는 이것을 전혀 몰랐습니다.
antirez

2

EC2 인스턴스에서 동일한 문제가 발생했습니다. 아마도 Redis와 관련이 없을 것입니다. IO가 계속 발생할 때 (예 : redis가 덤프 파일을로드 할 때) 발생합니다.

https://forums.aws.amazon.com/thread.jspa?messageID=215406 : 아마존 포럼 에서이 스레드를 살펴보십시오.

다른 커널 / 이미지를 실험했으며 이제 이전 2.6.21 커널에서 정상적으로 실행됩니다.


mhdk 덕분에, 이것은 가상화 + Linux 스케줄러와 관련이 있다고 생각합니다. 디스크 I / O가 느린 경우에도 다른 프로세스가 디스크를 사용하지 않고 스왑 된 페이지가없는 경우 다른 프로세스가 차단되는 이유를 알 수 없습니다. 다른 커널 / 스케줄러 구성을 시도하는 것은 실제로 시도해 볼 가치가 있습니다.
antirez

2

100 %로드와 고정 된 쉘이 발생할 때 표시 되는 CPU 도용 ( xx.x%stCPU 라인의 오른쪽에 있음)을 확인해야합니다 top. Steal은 하이퍼 바이저가 시스템에서 실제 CPU주기를 도난 당하여 다른 시스템에 제공 한 양을 나타냅니다. CPU 도용은 가상화 된 환경에서만 관련됩니다. 마이크로 인스턴스에 대한 정확한 문제가 있었고 CPU 집약적 인 작업을 수행하는 경우 기본적으로 약 1 시간 정도 (내 작업이 완료 될 때까지) 인스턴스를 사용할 수 없게 만들었습니다.

Greg 's Ramblings에 대한이 게시물을 읽으면 주제에 대한 자세한 내용을 볼 수 있습니다 . Greg의 말을 듣더라도 마이크로 인스턴스에서만 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.