Pemanfaatan CPU 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 menunjukkan adanya masalah. Misalnya, beban kerja mungkin melebihi kapasitas instans Redis Open-Source Edition. Dalam kasus ini, Anda dapat mengatasi bottleneck sumber daya dengan menambahkan shard atau replika, atau dengan melakukan upgrade ke Tair (Enterprise Edition). Penggunaan yang tidak tepat, seperti menjalankan perintah intensif CPU atau mengakses hotkey atau large key, juga dapat menyebabkan lonjakan abnormal pada pemanfaatan CPU. Untuk memastikan stabilitas aplikasi, lakukan investigasi jika rata-rata pemanfaatan CPU melebihi 70% atau jika rata-rata pemanfaatan CPU tetap di atas 90% selama lima menit berturut-turut.
Penyebab pemanfaatan CPU tinggi
Perintah intensif CPU: Perintah-perintah ini, seperti
KEYS,HGETALL, atau penggunaanMGET,MSET,HMSET, danHMGETuntuk mengoperasikan banyak key sekaligus, memiliki kompleksitas waktu O(N) dengan N bernilai besar. Perintah dengan kompleksitas waktu lebih tinggi mengonsumsi lebih banyak sumber daya CPU, sehingga meningkatkan pemanfaatan CPU.Karena perintah dieksekusi pada satu thread, menjalankan perintah-perintah ini dapat memblokir instans, menyebabkan permintaan lain mengantre dan meningkatkan latensi aplikasi. Dalam kasus ekstrem, hal ini dapat menyebabkan timeout dan memicu cache avalanche, di mana traffic melewati lapisan cache dan langsung mengenai database backend Anda.
CatatanUntuk informasi lebih lanjut mengenai kompleksitas waktu setiap perintah, lihat Commands.
Hotkey: Ketika sejumlah kecil key menerima jumlah permintaan yang jauh lebih tinggi dibandingkan key lainnya, key tersebut menjadi hotkey. Hotkey dapat mengonsumsi sumber daya CPU yang signifikan dan meningkatkan latensi operasi lainnya. Dalam arsitektur kluster, jika hotkey terkonsentrasi pada beberapa node data, hal ini dapat menyebabkan ketimpangan pemanfaatan CPU (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 tinggi. Jika large key terkonsentrasi pada node data tertentu, hal ini dapat menyebabkan ketimpangan pemanfaatan CPU, serta ketimpangan penggunaan memori dan bandwidth.
Short-lived connection: Pembuatan dan pemutusan koneksi yang sering mengonsumsi sumber daya CPU yang signifikan untuk penanganan koneksi, bukan untuk pemrosesan data.
AOF: Persistensi Append-only file (AOF) diaktifkan secara default. Ketika sebuah instans berada di bawah beban berat, I/O disk dari proses AOF dapat meningkatkan pemanfaatan CPU dan latensi perintah.
Evicted key kedaluwarsa: Ketika sejumlah besar key kedaluwarsa secara bersamaan, Redis menghabiskan sumber daya CPU yang signifikan untuk membersihkan key kedaluwarsa tersebut, yang dapat menyebabkan lonjakan pemanfaatan CPU.
Untuk mengatasi skenario ini:
Periksa apakah penggunaan memori turun pada saat yang sama dengan lonjakan pemanfaatan CPU. Penurunan memori yang disertai kedaluwarsa massal key mengindikasikan bahwa penyebabnya adalah pembersihan key kedaluwarsa.
Jalankan perintah
INFOuntuk memeriksa apakah pencacahexpired_keysdanevicted_keysmeningkat secara signifikan pada waktu tersebut.Untuk informasi lebih lanjut, lihat dokumentasi tentang Apa kebijakan penggantian default dan tentang Cara membersihkan key kedaluwarsa.
Skema pemanfaatan CPU tinggi
Pemanfaatan CPU tinggi biasanya muncul dalam tiga skenario umum:
Selama periode waktu tertentu, pemanfaatan CPU tiba-tiba melonjak, kadang mencapai 100%. Untuk penyebab dan solusinya, lihat Lonjakan tiba-tiba pada pemanfaatan CPU.
Node data tertentu memiliki pemanfaatan CPU tinggi sementara node data lainnya memiliki pemanfaatan rendah. Untuk penyebab dan solusinya, lihat Ketimpangan pemanfaatan CPU di antara node data.
Node proxy tertentu memiliki pemanfaatan CPU tinggi sementara node proxy lainnya memiliki pemanfaatan rendah. Untuk penyebab dan solusinya, lihat Ketimpangan pemanfaatan CPU di antara node proxy.
Ambil 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 menginvestigasi dan menyelesaikan masalah tersebut.
Identifikasi dan nonaktifkan perintah intensif CPU
Prosedur
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik ketika pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
Gunakan alat berikut untuk mengidentifikasi perintah 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 yang ditentukan (20 ms secara default). Anda dapat menggunakannya untuk menemukan perintah intensif CPU yang berjalan lama.
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:
CatatanJika baik log lambat maupun log audit tidak menunjukkan adanya perintah yang mengonsumsi sumber daya tinggi, pemanfaatan CPU tinggi biasanya disebabkan oleh salah satu dari dua hal berikut. Pertama, volume besar perintah O(1) (seperti GET dan SET) yang menumpuk di bawah QPS tinggi — perintah ini dieksekusi lebih cepat daripada ambang batas log lambat (20 ms secara default) dan tidak tercatat, sehingga menonaktifkan perintah tidak membantu; alih-alih, sesuaikan arsitektur seperti dijelaskan di bawah untuk mendistribusikan tekanan permintaan. Kedua, koneksi short-lived yang sering dibuat, yang juga mengonsumsi CPU dan tidak muncul di log lambat; untuk troubleshooting dan optimasi, lihat bagian "Optimalkan untuk short-lived connection" dalam topik ini.
Ubah instans menjadi arsitektur Pemisahan baca/tulis untuk mengalihkan perintah atau aplikasi intensif CPU.
Ubah instans menjadi instans berbasis DRAM untuk memanfaatkan kemampuan multi-threaded-nya dan mengurangi pemanfaatan CPU.
CatatanUntuk petunjuk cara mengubah arsitektur dan jenis instans, lihat Ubah konfigurasi instans.
Optimalkan untuk short-lived connection
Prosedur
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik ketika 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 mengindikasikan adanya masalah dengan short-lived connection.
Solusi
Beralih dari short-lived connection ke persistent connection, misalnya dengan menggunakan connection pool seperti JedisPool. Untuk informasi lebih lanjut, lihat Gunakan klien untuk terhubung ke instans.
Ubah instans menjadi instans berbasis DRAM, yang dioptimalkan untuk short-lived connection.
Nonaktifkan AOF
AOF diaktifkan secara default. Di bawah beban berat, operasi AOF yang sering dapat berkontribusi terhadap pemanfaatan CPU tinggi.
Jika persyaratan bisnis Anda memungkinkan, pertimbangkan untuk menonaktifkan persistensi dan menjadwalkan cadangan data selama jam sepi untuk 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 memiliki 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 workload Anda. Untuk memastikan operasi yang stabil, kami merekomendasikan agar Anda meningkatkan 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 merekomendasikan agar 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.
Ketimpangan pemanfaatan CPU 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 menginvestigasi dan menyelesaikan masalah tersebut.
Atasi dan optimalkan hotkey
Prosedur
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik ketika 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. Hal 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 key.
Jika volume permintaan baca yang tinggi menyebabkan hotkey, pertimbangkan untuk mengubah instans menjadi arsitektur Pemisahan baca/tulis untuk 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 dapat menyebabkan pembacaan data kedaluwarsa. Oleh karena itu, arsitektur ini mungkin bukan solusi optimal untuk workload dengan tekanan baca dan tulis tinggi yang juga memerlukan konsistensi data kuat.
Identifikasi dan nonaktifkan perintah intensif CPU
Prosedur
Gunakan fitur pemantauan kinerja untuk mengidentifikasi rentang waktu spesifik ketika pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
Gunakan alat berikut untuk mengidentifikasi perintah 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 yang ditentukan (20 ms secara default). Anda dapat menggunakannya untuk menemukan perintah intensif CPU yang berjalan lama.
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 ketika pemanfaatan CPU tinggi. Untuk informasi lebih lanjut, lihat Lihat data pemantauan kinerja.
Pada halaman Cache Analysis, klik Analyze Now. Pilih node data dengan pemanfaatan CPU tinggi dan klik OK. Hal ini akan menampilkan large key yang ada selama periode pemanfaatan CPU tinggi.
Solusi
Berdasarkan kebutuhan bisnis Anda, pisahkan large key menjadi key yang lebih kecil untuk mendistribusikan beban permintaan.
Ketimpangan pemanfaatan CPU 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 menginvestigasi dan menyelesaikan masalah tersebut.
Prosedur
Pada tab Node Proxy di halaman Tren Kinerja, periksa apakah pemanfaatan koneksi seimbang di seluruh node. Untuk informasi lebih lanjut, lihat Tren Kinerja.
Solusi
Lakukan salah satu operasi berikut berdasarkan apakah pemanfaatan koneksi seimbang:
Jika pemanfaatan koneksi seimbang: Restart aplikasi klien Anda atau node proxy untuk menyeimbangkan kembali koneksi. Untuk merestart node proxy, lihat Restart atau rebuild node proxy.
Jika pemanfaatan koneksi 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.