Jika Anda menerima peringatan penggunaan memori tinggi untuk instans Tair (Redis OSS-compatible) atau aplikasi Anda mengalami error out-of-memory (OOM), tetapi penggunaan memori yang ditampilkan di Pemantauan Kinerja tampak rendah, topik ini menjelaskan kemungkinan penyebab dan solusinya.
Gejala
Gejala 1:
Anda menerima peringatan memori instans yang menunjukkan bahwa penggunaan memori telah melebihi ambang batas (misalnya, nilai rata-rata >= 90% selama tiga pengukuran berturut-turut), tetapi halaman Performance Monitoring di konsol menunjukkan bahwa penggunaan memori secara keseluruhan rendah.
Gejala 2:
Aplikasi Anda mengembalikan error command not allowed when used memory > 'maxmemory', tetapi halaman Performance Monitoring menunjukkan bahwa memori secara keseluruhan tidak habis atau hanya sebuah node data saja yang memiliki penggunaan memori tinggi.
Penyebab
Ketidaksesuaian antara pemantauan dan peringatan
Ketidaksesuaian antara penggunaan memori di Performance Monitoring dan peringatan memori dapat terjadi jika Anda menggunakan cluster instance. Peringatan biasanya mencerminkan metrik dari satu data node tertentu, sedangkan Anda melihat metrik keseluruhan instans.
Periksa detail peringatan yang Anda terima. Jika peringatan tersebut berisi bidang nodeId = <Instance ID>-db-<Number>, ini menunjukkan bahwa hanya node data tertentu dengan ID <Instance ID>-db-<Number> yang telah melebihi ambang batas memori.
Ikuti langkah-langkah berikut untuk memastikan bahwa penggunaan memori node data tersebut sesuai dengan peringatan.
Masuk ke konsol dan buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans yang ingin Anda kelola berada. Lalu, temukan instans tersebut dan klik ID instans-nya.
-
Di panel navigasi sebelah kiri, klik Performance Monitoring.
-
Klik tab Data Node dan pilih node data yang sesuai dengan
<Instance ID>-db-<Number>. Periksa apakah penggunaan memorinya sesuai dengan nilai dalam peringatan. Anda dapat melihat grafik pemantauan untuk CPU Usage dan Memory Usage pada Data Node yang dipilih.
Kesenjangan memori di antara node data
Ketika satu atau beberapa node data dalam cluster instance memiliki penggunaan memori yang jauh lebih tinggi dibandingkan yang lain, hal ini menunjukkan adanya kesenjangan data (memory skew). Anda dapat menggunakan fitur instance diagnostics untuk memeriksa secara cepat apakah instans Anda mengalami masalah kesenjangan tersebut.
Apa yang menyebabkan kesenjangan memori
Penyebab utama kesenjangan memori adalah:
-
Kehadiran large keys.
Cluster instance menggunakan algoritma cyclic redundancy check (CRC) untuk menghitung slot tempat suatu kunci ditempatkan, lalu menuliskan datanya ke shard data yang sesuai.
Meskipun kunci-kunci tersebar merata di seluruh shard data, satu kunci yang menyimpan terlalu banyak data atau field yang terlalu besar dapat menjadi large key, sehingga menyebabkan kesenjangan memori.
-
Penggunaan hash tags.
Ketika hash tag digunakan, seperti pada
user:{1000}:name, instans melakukan perhitungan CRC terhadap string di dalam tanda kurung kurawal ({}). Kunci-kunci dengan hash tag yang sama akan dipetakan ke slot yang sama dan disimpan di shard data yang sama. Jika sejumlah besar kunci menggunakan hash tag yang sama, data akan terkonsentrasi di satu shard data, sehingga menyebabkan kesenjangan memori.
Solusi
Memeriksa dan memisahkan kunci besar
Temukan kunci besar
Gunakan fitur offline key analysis untuk menemukan large keys.
Untuk metode lain dalam menemukan large keys, lihat Large keys and hotkeys.
Memecah kunci besar
Sebagai contoh, pisahkan kunci HASH yang memiliki puluhan ribu anggota menjadi beberapa kunci HASH yang lebih kecil, masing-masing dengan jumlah anggota yang wajar. Dalam cluster instance, memisahkan large keys dapat membantu menyeimbangkan penggunaan memori di seluruh shard data secara signifikan.
Periksa penggunaan hash tag
Jika Anda menggunakan hash tag yang menyebabkan konsentrasi data, pertimbangkan untuk membaginya menjadi beberapa hash tag sesuai dengan logika aplikasi Anda. Hal ini membantu mendistribusikan data lebih merata di berbagai shard data.
Lakukan peningkatan spesifikasi instans
Peningkatan spesifikasi instans menambah kapasitas memori yang tersedia untuk setiap shard dan dapat menjadi solusi sementara untuk mengatasi kesenjangan memori. Untuk langkah-langkah detailnya, lihat Change instance configuration.
Sistem melakukan pemeriksaan awal (precheck) terhadap kesenjangan data saat mengubah spesifikasi instans. Jika tipe instans yang Anda pilih tidak mampu menangani masalah kesenjangan data tersebut, sistem akan menampilkan error. Pilih tipe instans dengan spesifikasi yang lebih tinggi dan coba lagi.
Setelah Anda meningkatkan spesifikasi instans, kesenjangan penggunaan memori mungkin berkurang. Namun, kesenjangan juga dapat terjadi pada sumber daya bandwidth dan CPU.