Pemanfaatan CPU yang tinggi pada instans Tair (atau Redis Open-Source Edition) dapat disebabkan oleh berbagai faktor. Hal ini mungkin merupakan perilaku yang diharapkan untuk aplikasi dengan konkurensi dan throughput tinggi, selama CPU tidak menjadi bottleneck. Namun, sering kali hal ini menandakan adanya masalah. Misalnya, beban kerja mungkin melebihi kapasitas instans Redis Open-Source Edition. Dalam kasus tersebut, Anda dapat mengatasi bottleneck sumber daya dengan menambahkan shard atau replika, atau melakukan upgrade ke Tair (Enterprise Edition). Penggunaan yang tidak tepat—seperti menjalankan perintah yang intensif CPU atau mengakses hotkey atau large key—juga dapat menyebabkan lonjakan abnormal pada pemanfaatan CPU. Untuk memastikan stabilitas aplikasi, periksa apakah rata-rata pemanfaatan CPU melebihi 70% atau jika rata-rata pemanfaatan CPU tetap di atas 90% selama lima menit berturut-turut.
Penyebab pemanfaatan CPU yang tinggi
-
CPU-intensive command: Perintah-perintah ini, seperti
KEYS,HGETALL, atau penggunaanMGET,MSET,HMSET, danHMGETuntuk mengoperasikan banyak kunci sekaligus, memiliki kompleksitas waktu O(N) dengan nilai N yang besar. Perintah dengan kompleksitas waktu lebih tinggi mengonsumsi lebih banyak sumber daya CPU, sehingga meningkatkan pemanfaatan CPU.Karena perintah dieksekusi pada single thread, menjalankan perintah-perintah ini dapat memblokir instans, menyebabkan permintaan lain mengantri dan meningkatkan latensi aplikasi. Dalam kasus ekstrem, hal ini dapat menyebabkan timeout dan memicu cache avalanche, di mana lalu lintas melewati lapisan cache dan langsung mengenai database backend Anda.
CatatanUntuk informasi lebih lanjut mengenai kompleksitas waktu setiap perintah, lihat Commands.
-
Hotkey: Ketika sejumlah kecil kunci menerima jumlah permintaan yang jauh lebih tinggi dibandingkan kunci lainnya, kunci tersebut menjadi hotkey. Hotkey dapat mengonsumsi sumber daya CPU secara signifikan dan meningkatkan latensi operasi lainnya. Dalam arsitektur kluster, jika hotkey terkonsentrasi pada beberapa node data, hal ini dapat menyebabkan CPU utilization skew, di mana pemanfaatan CPU pada node tersebut jauh lebih tinggi dibandingkan node lainnya.
-
Large key: Mengakses large key mengonsumsi lebih banyak memori, sumber daya CPU, dan lebar pita jaringan. Large key lebih rentan menjadi hotkey, yang berkontribusi terhadap pemanfaatan CPU yang tinggi. Jika large key terkonsentrasi pada node data tertentu, hal ini dapat menyebabkan CPU utilization skew serta skew pada penggunaan memori dan bandwidth.
-
Short-lived connection: Pembuatan dan pemutusan koneksi yang sering mengonsumsi sumber daya CPU secara signifikan untuk penanganan koneksi daripada pemrosesan data.
-
AOF: Persistensi Append-only file (AOF) diaktifkan secara default. Saat instans berada di bawah beban berat, I/O disk dari proses AOF dapat meningkatkan pemanfaatan CPU dan latensi perintah.
Skenario pemanfaatan CPU yang tinggi
Pemanfaatan CPU yang tinggi biasanya muncul dalam tiga skenario umum:
-
Selama periode waktu tertentu, pemanfaatan CPU tiba-tiba melonjak, kadang mencapai 100%. Untuk penyebab dan solusi, lihat Lonjakan tiba-tiba pada pemanfaatan CPU.
-
Node data tertentu memiliki pemanfaatan CPU yang tinggi sementara node data lainnya memiliki pemanfaatan rendah. Untuk penyebab dan solusi, lihat CPU utilization skew di antara node data.
-
Node proxy tertentu memiliki pemanfaatan CPU yang tinggi sementara node proxy lainnya memiliki pemanfaatan rendah. Untuk penyebab dan solusi, lihat CPU utilization skew di antara node proxy.
Ambil langkah-langkah yang sesuai untuk mengurangi pemanfaatan CPU berdasarkan skenario Anda.
Lonjakan tiba-tiba pada pemanfaatan CPU
Jika pemanfaatan CPU keseluruhan instans Anda melonjak, ikuti langkah-langkah berikut untuk menyelidiki dan menyelesaikan masalah tersebut.
Identifikasi dan nonaktifkan perintah yang intensif CPU
Prosedur
-
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik saat pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
-
Gunakan alat berikut untuk mengidentifikasi perintah yang intensif CPU:
-
Fitur latency insights mencatat latensi semua perintah dan event kustom. Anda dapat menggunakannya untuk menemukan perintah dengan latensi tinggi selama periode waktu tertentu pada node tertentu.
-
Fitur slow query log mencatat perintah yang melebihi waktu eksekusi tertentu (20 ms secara default). Anda dapat menggunakannya untuk menemukan perintah yang berjalan lama dan intensif CPU.
-
Solusi
-
Evaluasi dan nonaktifkan perintah berisiko tinggi dan intensif CPU, seperti
FLUSHALL,KEYS, danHGETALL. Untuk informasi lebih lanjut, lihat Nonaktifkan perintah berisiko tinggi. -
Opsi: Berdasarkan kebutuhan bisnis Anda, pertimbangkan penyesuaian instans berikut:
-
Ubah instans menjadi arsitektur Pemisahan baca/tulis untuk mengalihkan perintah atau aplikasi yang intensif CPU.
-
Ubah instans menjadi instans berbasis DRAM untuk memanfaatkan kemampuan multi-threaded-nya dan mengurangi pemanfaatan CPU.
CatatanUntuk petunjuk cara mengubah arsitektur dan tipe instans, lihat Ubah konfigurasi instans.
-
Optimalkan koneksi singkat
Prosedur
-
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik saat pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
-
Pada halaman pemantauan kinerja, periksa kombinasi pemanfaatan CPU tinggi, jumlah koneksi tinggi, dan queries per second (QPS) yang lebih rendah dari yang diharapkan. Pola ini menunjukkan adanya masalah dengan koneksi singkat.
Solusi
-
Beralih dari koneksi singkat ke koneksi persisten, misalnya dengan menggunakan connection pool seperti JedisPool. Untuk informasi lebih lanjut, lihat Gunakan klien untuk menghubungkan ke instans.
-
Ubah instans menjadi instans berbasis DRAM, yang dioptimalkan untuk koneksi singkat.
Nonaktifkan AOF
AOF diaktifkan secara default. Di bawah beban berat, operasi AOF yang sering dapat berkontribusi terhadap pemanfaatan CPU yang tinggi.
Jika kebutuhan bisnis Anda memungkinkan, pertimbangkan untuk menonaktifkan persistensi dan menjadwalkan pencadangan data selama jam sepi guna meminimalkan dampak.
Jika instans Anda adalah instans berbasis DRAM, Anda tidak dapat memulihkan data dari file AOF setelah menonaktifkan AOF. Artinya, fitur flashback data tidak tersedia. Anda hanya dapat memulihkan data dari set cadangan ke instans baru. Lakukan dengan hati-hati.
Evaluasi kapasitas layanan
Jika rata-rata pemanfaatan CPU tetap tinggi (di atas 70%) selama operasi normal setelah melakukan optimasi sebelumnya, instans Anda kemungkinan mengalami bottleneck kinerja.
Pertama, periksa pola akses abnormal, seperti perintah yang tidak biasa atau volume permintaan tinggi dari host aplikasi tertentu. Masalah ini harus ditangani di tingkat aplikasi. Jika semua akses sah, beban tinggi tersebut merupakan hasil normal dari beban kerja Anda. Untuk memastikan operasi yang stabil, kami menyarankan Anda melakukan upgrade spesifikasi instans atau beralih ke arsitektur kluster atau arsitektur Pemisahan baca/tulis. Untuk informasi lebih lanjut, lihat Ubah konfigurasi instans.
Untuk memastikan stabilitas bisnis, kami menyarankan Anda membeli instans pay-as-you-go untuk melakukan pengujian beban dan kompatibilitas sebelum melakukan upgrade pada instans produksi. Anda dapat melepas instans uji setelah menyelesaikan pengujian.
CPU utilization skew pada node data
Jika Anda menggunakan arsitektur kluster atau arsitektur Pemisahan baca/tulis, Anda mungkin mengamati bahwa beberapa node data memiliki pemanfaatan CPU tinggi sementara yang lain rendah. Ikuti langkah-langkah berikut untuk menyelidiki dan menyelesaikan masalah tersebut.
Pemecahan masalah dan optimasi hotkey
Prosedur
-
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik saat pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
-
Pada halaman riwayat Real-time Key Statistics, pilih node data dengan pemanfaatan CPU tinggi, tentukan rentang waktu dari Langkah 1, lalu klik Search. Ini akan menampilkan hotkey selama periode pemanfaatan CPU tinggi.
Solusi
-
Pisahkan hotkey berdasarkan logika bisnis Anda. Misalnya, tambahkan ID pengguna atau rentang waktu ke nama kunci.
-
Jika volume permintaan baca yang tinggi menyebabkan hotkey, pertimbangkan untuk mengubah instans menjadi arsitektur Pemisahan baca/tulis guna mengurangi tekanan baca pada setiap node data.
CatatanDalam skenario dengan volume permintaan sangat tinggi, arsitektur Pemisahan baca/tulis dapat menimbulkan latensi replikasi yang tidak dapat dihindari, yang berpotensi menyebabkan pembacaan data kedaluwarsa. Oleh karena itu, arsitektur ini mungkin bukan solusi optimal untuk beban kerja dengan tekanan baca dan tulis tinggi yang juga memerlukan konsistensi data kuat.
Identifikasi dan nonaktifkan perintah yang intensif CPU
Prosedur
-
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik saat pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
-
Gunakan alat berikut untuk mengidentifikasi perintah yang intensif CPU:
-
Fitur latency insights mencatat latensi semua perintah dan event kustom. Anda dapat menggunakannya untuk menemukan perintah dengan latensi tinggi selama periode waktu tertentu pada node tertentu.
-
Fitur slow query log mencatat perintah yang melebihi waktu eksekusi tertentu (20 ms secara default). Anda dapat menggunakannya untuk menemukan perintah yang berjalan lama dan intensif CPU.
-
Solusi
Evaluasi dan nonaktifkan perintah berisiko tinggi dan intensif CPU, seperti FLUSHALL, KEYS, dan HGETALL. Untuk informasi lebih lanjut, lihat Nonaktifkan perintah berisiko tinggi.
Memecahkan masalah dan mengoptimalkan kunci besar
Prosedur
-
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik saat pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
-
Pada halaman offline key analysis, klik Analyze Now. Pilih node data dengan pemanfaatan CPU tinggi lalu klik OK. Ini akan menampilkan large key yang ada selama periode pemanfaatan CPU tinggi.
Solusi
Berdasarkan kebutuhan bisnis Anda, pisahkan large key menjadi kunci-kunci yang lebih kecil untuk mendistribusikan beban permintaan.
CPU utilization skew pada node proxy
Jika Anda menggunakan arsitektur kluster atau arsitektur Pemisahan baca/tulis, Anda mungkin menemukan bahwa beberapa node proxy memiliki pemanfaatan CPU tinggi sementara yang lain rendah. Ikuti langkah-langkah berikut untuk menyelidiki dan menyelesaikan masalah tersebut.
Prosedur
Pada tab Proxy Node di halaman Performance Trends, periksa apakah connection utilization seimbang di seluruh node. Untuk informasi lebih lanjut, lihat Performance Trends.
Solusi
Lakukan salah satu operasi berikut berdasarkan apakah connection utilization seimbang:
-
Jika connection utilization seimbang: Restart aplikasi klien Anda atau node proxy untuk menyeimbangkan kembali koneksi. Untuk me-restart node proxy, lihat Restart or rebuild proxy nodes.
-
Jika connection utilization tidak seimbang: Ketidakseimbangan ini biasanya disebabkan oleh operasi pipeline atau batch berskala besar. Kurangi ukuran operasi ini, misalnya dengan membagi operasi batch besar menjadi beberapa operasi yang lebih kecil.