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.
sumber
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).
sumber
Anda harus memeriksa mencuri CPU (
xx.x%st
di sisi kanan garis cpu) yangtop
menunjukkan 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.
sumber