Beberapa sistem Linux menjadi sangat lambat ketika Redis memuat dataset besar

14

Saya menerima laporan dari pengguna Redis, dan saya tidak yakin harus menjawab apa karena saya bukan ahli di bidang Linux dan penjadwalnya, namun kami (sebagai proyek Redis) perlu memikirkan masalah seperti ini terutama di masa depan seperti dengan Redis Cluster kita akan memiliki banyak contoh Redis berjalan pada saat yang sama dalam satu kotak. Jadi saya meminta bantuan di sini.

Masalah:

  • Kernel: "Linux redis1 2.6.32-305-ec2 # 9-Ubuntu SMP Kamis 15 Apr 08:05:38 UTC 2010 x86_64 GNU / Linux"
  • banyak RAM gratis, tidak ada proses lain yang melakukan I / O signifikan.
  • Penting , berjalan pada instance besar EC2, bukan server nyata. Saya tidak pernah melihat hal seperti itu di lingkungan yang tidak tervirtualisasi. Mesin virtual EC2 adalah: " Mesin Virtual Memori Ekstra Besar Besar 17,1 GB, 6,5 ECU (2 inti virtual dengan masing-masing Unit Komputer 3,25 EC2), penyimpanan contoh lokal 420 GB, platform 64-bit" .

Pada dasarnya setelah Anda me-restart instance Redis yang besar, sistem akan menjadi sangat lambat sehingga Anda tidak bisa lagi mengetikkan shell. Ketika Redis memuat instance, ia menggunakan 100% CPU (memuat data secepat mungkin) dan membaca file dump.rdb secara berurutan. I / O tidak terlalu tinggi karena memuat terikat CPU, bukan terikat I / O.

Mengapa di bumi sebuah kotak dengan dua CPU dan banyak RAM, tidak ada swap pada disk, pada dasarnya harus berhenti bekerja dengan beban kerja ini?

Saya memiliki kesan ini ada hubungannya dengan fakta ini adalah contoh EC2, jadi terkait dengan teknologi virtualisasi yang digunakan, karena saya memuat setiap saat Redis 24 GB dataset dalam kotak saya tanpa masalah (bahkan dengan contoh Redis lainnya berjalan dengan beban tinggi).

Terima kasih atas petunjuknya!

Salvatore

Sunting : menambahkan beberapa umpan balik yang saya terima dari twitter:

from @ezmobius: @antirez hal pertama yang harus dilakukan adalah mencobanya dari / mnt atau drive ephemeral lokal untuk melihat apakah keruwetan EBS-nya, ke-2 adalah memastikan itu bukan "hukuman penalti pertama" (google it) dan jika kemudian Anda harus menemukan 0 di disk terlebih dahulu.

dari @dvirsky: @antirez Saya menjalankan banyak instance redis pada node ec2 yang persis seperti itu. Saya perhatikan beberapa perlambatan pada bgsave tetapi tidak pada fenomena ini.

antirez
sumber

Jawaban:

4

Output dari 'top' mungkin menghasilkan beberapa petunjuk. Ada bidang di dekat bagian kiri atas berlabel '% dicuri' yang mencerminkan jumlah perangkat keras yang dialihkan kepada tamu lain pada kotak fisik yang sama. Saya telah melihat jenis penurunan ini ketika hypervisor memutuskan untuk mengalokasikan lebih banyak CPU ke tamu lain, terutama ketika saya melakukan beberapa tugas intensif CPU yang sudah berjalan lama.

Tidak yakin apakah itu masalah Anda atau tidak, tetapi perlu diperiksa.

Kevin Smith
sumber
Terima kasih Kevin, ini sangat menarik dan saya sama sekali tidak menyadari hal ini.
antirez
2

Saya memiliki masalah yang sama pada instance EC2. Ini mungkin tidak terkait dengan Redis - itu terjadi ketika ada IO tinggi terjadi (misalnya ketika redis sedang memuat file dump).

Lihatlah utas ini di forum amazon: https://forums.aws.amazon.com/thread.jspa?messageID=215406

Saya telah bereksperimen dengan kernel / gambar yang berbeda dan sekarang ini berjalan dengan baik (pada kernel 2.6.21 lama).

Marek
sumber
Terima kasih mhdk, dugaan saya juga bahwa ini terkait dengan penjadwal virtualisasi + Linux. Bahkan dengan disk I / OI lambat tidak dapat melihat alasan mengapa proses lain akan memblokir jika mereka tidak menggunakan disk dan tidak memiliki halaman yang ditukar. Mencoba konfigurasi kernel / scheduler yang berbeda mungkin patut dicoba.
antirez
2

Anda harus memeriksa mencuri CPU ( xx.x%stdi sisi kanan garis cpu) yang topmenunjukkan ketika Anda mengalami beban 100% dan shell beku. Steal menunjukkan seberapa banyak siklus CPU Anda yang sebenarnya dicuri dari mesin Anda oleh hypervisor dan diberikan ke mesin lain. Pencurian CPU hanya relevan dalam lingkungan tervirtualisasi. Saya memiliki masalah persis dengan instance mikro dan yang pada dasarnya membuat instance saya tidak dapat digunakan selama sekitar 1 jam atau lebih (sampai tugas saya selesai ofc) jika melakukan tugas-tugas intensif CPU.

Anda dapat menemukan lebih banyak tentang topik ini dengan membaca posting ini di Greg's Ramblings . Meskipun jika Anda mengambil kata-kata Greg, ini harus terjadi hanya pada contoh mikro.

Shinnok
sumber