Memori yang tidak mencukupi di Tair (Redis OSS-compatible) dapat menyebabkan masalah seperti kunci yang sering dihapus paksa, waktu respons meningkat, dan jumlah permintaan per detik (QPS) yang tidak stabil. Masalah ini dapat mengganggu beban kerja Anda. Jika sebuah instans kehabisan memori atau jika Anda menerima peringatan memori untuk instans tersebut, Anda dapat merujuk pada topik ini untuk menentukan apakah penggunaan memori secara konsisten tinggi, tiba-tiba meningkat, atau terjadi distorsi penggunaan memori. Anda juga dapat menyelesaikan masalah dengan menggunakan strategi seperti membagi kunci besar, menetapkan kebijakan kedaluwarsa, dan meningkatkan spesifikasi.
Gejala penggunaan memori tinggi
Penggunaan memori tinggi dapat muncul dalam tiga skenario berikut:
Penggunaan memori terus tinggi untuk jangka waktu lama. Jika penggunaan memori melebihi 95%, segera tanggapi.
Penggunaan memori secara konsisten rendah tetapi tiba-tiba melonjak ke level tinggi, bahkan mencapai 100%.
Penggunaan memori keseluruhan dari instans rendah, tetapi penggunaan memori dari node data tertentu mendekati 100%.
Ambil langkah yang sesuai untuk mengurangi penggunaan memori berdasarkan skenario spesifik.
Solusi untuk penggunaan memori tinggi yang konsisten
Periksa apakah kunci yang ada memenuhi persyaratan bisnis dan hapus kunci yang tidak diperlukan secara tepat waktu.
Gunakan fitur analitik cache untuk menganalisis distribusi kunci besar dan waktu hidup (TTL) dari kunci. Untuk informasi lebih lanjut, lihat Gunakan Fitur Analisis Kunci Offline.
Periksa apakah nilai TTL yang tepat telah dikonfigurasikan untuk kunci.
CatatanDalam contoh berikut, tidak ada nilai TTL yang dikonfigurasikan untuk kunci. Kami sarankan Anda mengonfigurasikan nilai TTL yang tepat di klien Anda berdasarkan persyaratan bisnis Anda.
Gambar 4. Contoh Distribusi TTL Kunci

Evaluasi kunci besar dan bagi kunci besar di klien.
Gambar 5. Contoh Analisis Kunci Besar

Konfigurasikan kebijakan eviksi yang tepat atau ubah nilai parameter maxmemory-policy berdasarkan persyaratan bisnis Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan Parameter.
Catatanvolatile-lru adalah kebijakan eviksi default Tair (Redis OSS-compatible). Untuk informasi lebih lanjut, lihat Bagaimana Cara Tair (Redis OSS-compatible) Menghapus Data Secara Default?
Atur frekuensi penghapusan kunci yang kedaluwarsa ke nilai yang tepat atau ubah nilai parameter hz berdasarkan persyaratan bisnis Anda. Untuk informasi lebih lanjut, lihat Sesuaikan Frekuensi Tugas Latar Belakang.
CatatanKami sarankan Anda mengatur parameter hz ke nilai yang lebih kecil dari 100. Jika nilai ini besar, pemanfaatan CPU akan terpengaruh. Anda juga dapat mengonfigurasikan kontrol frekuensi dinamis untuk instans yang versi utamanya 5.0 atau lebih baru. Untuk informasi lebih lanjut, lihat Aktifkan Kontrol Frekuensi Dinamis untuk Tugas Latar Belakang.
Jika penggunaan memori masih tinggi setelah Anda melakukan langkah-langkah sebelumnya, pertimbangkan untuk meningkatkan instans ke ukuran memori yang lebih besar untuk menampung lebih banyak data dan meningkatkan kinerja keseluruhan. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Instans.
CatatanSebelum Anda meningkatkan instans Anda, Anda dapat membeli instans bayar sesuai pemakaian untuk menguji apakah spesifikasi yang ingin Anda tingkatkan memenuhi persyaratan beban kerja Anda. Anda dapat melepaskan instans bayar sesuai pemakaian setelah Anda menyelesaikan pengujian. Untuk informasi lebih lanjut, lihat Lepas Instans Bayar Sesuai Pemakaian.
Solusi untuk peningkatan mendadak dalam penggunaan memori
Penyebab
Penggunaan memori dapat tiba-tiba meningkat karena alasan berikut:
Sejumlah besar data baru ditulis dalam waktu singkat.
Sejumlah besar koneksi baru dibuat dalam waktu singkat.
Akses mendadak menghasilkan sejumlah besar lalu lintas yang melebihi lebar pita jaringan, mengakibatkan backlog di buffer input dan output.
Klien tidak dapat mengimbangi kecepatan pemrosesan Tair (Redis OSS-compatible), mengakibatkan backlog di buffer output.
Solusi
Identifikasi penyebab peningkatan mendadak dalam penggunaan memori dan gunakan solusi yang disarankan untuk menyelesaikan masalah.
Periksa apakah sejumlah besar data baru ditulis
Metode Pemecahan Masalah:
Di halaman Pemantau Kinerja, periksa lalu lintas arah masuk dan permintaan tulis per detik (QPS) dari instans. Jika lalu lintas arah masuk dan QPS tulis mengikuti tren yang sama dengan penggunaan memori, peningkatan mendadak dalam penggunaan memori disebabkan oleh sejumlah besar data yang ditulis.
Solusi:
Konfigurasikan nilai waktu hidup (TTL) yang tepat untuk kunci untuk secara otomatis menghapus kunci yang tidak lagi diperlukan, atau hapus kunci yang tidak diperlukan secara manual.
Tingkatkan spesifikasi instans dengan meningkatkan kapasitas memori untuk mengurangi peningkatan mendadak dalam penggunaan memori. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Instans.
Jika instans Anda adalah instans standar dan penggunaan memori tetap tinggi setelah Anda meningkatkan kapasitas memori, Anda dapat meningkatkan instans ke instans kluster. Dengan cara ini, Anda dapat mendistribusikan data di beberapa shard data untuk mengurangi tekanan memori pada shard data individu. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Instans.
Periksa apakah sejumlah besar koneksi baru dibuat
Metode Pemecahan Masalah:
Di halaman Pemantau Kinerja, lihat jumlah koneksi ke instans. Jika jumlah koneksi tiba-tiba meningkat dan mengikuti tren yang sama dengan penggunaan memori, peningkatan mendadak dalam penggunaan memori disebabkan oleh sejumlah besar koneksi baru.
Solusi:
Periksa apakah ada kebocoran koneksi.
Konfigurasikan periode timeout koneksi untuk secara otomatis menutup koneksi yang tidak aktif. Untuk informasi lebih lanjut, lihat Tentukan Periode Timeout untuk Koneksi Klien.
Periksa apakah lonjakan lalu lintas mendadak menyebabkan backlog di buffer input dan output
Metode Pemecahan Masalah:
Periksa apakah penggunaan lalu lintas arah masuk dan arah keluar instans mencapai 100%.
Jalankan perintah
MEMORY STATSuntuk memeriksa apakah clients.normal mengonsumsi jumlah memori yang berlebihan.Catatanclients.normal mencerminkan jumlah total memori yang digunakan oleh buffer input dan output untuk semua koneksi klien normal.
Solusi:
Periksa penyebab lonjakan lalu lintas.
Tingkatkan lebar pita jaringan instans. Untuk informasi lebih lanjut, lihat Secara Manual Tingkatkan Bandwidth Instans dan Aktifkan Penskalaan Otomatis Bandwidth.
Tingkatkan spesifikasi instans untuk memastikan penggunaan optimal buffer input dan output. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Instans.
Periksa apakah masalah kinerja sisi klien menyebabkan backlog di buffer output
Metode Pemecahan Masalah:
Di redis-cli, jalankan perintah MEMORY DOCTOR untuk melihat nilai big_client_buf. Jika big_client_buf diatur ke 1, setidaknya satu klien memiliki buffer output besar yang mengonsumsi jumlah memori yang signifikan.
Solusi:
Jalankan perintah CLIENT LIST untuk memeriksa klien mana yang memiliki buffer output besar yang mengonsumsi jumlah memori yang signifikan (omem). Periksa apakah aplikasi klien memiliki masalah kinerja.
Solusi untuk penggunaan memori tinggi node data tertentu
Gejala
Jika instans adalah instans kluster, Anda mungkin menemukan bahwa penggunaan memori shard data tertentu tinggi berdasarkan gejala berikut:
Anda menerima peringatan penggunaan memori dari CloudMonitor. Pesan peringatan menunjukkan bahwa penggunaan memori node data tertentu melebihi ambang batas.
Laporan diagnostik instans menunjukkan bahwa distorsi penggunaan memori terjadi.
Di halaman Pemantau Kinerja, penggunaan memori keseluruhan instans tidak tinggi, tetapi node data tertentu memiliki penggunaan memori tinggi.
Penyebab
Jika penggunaan memori instans rendah tetapi penggunaan memori node data tinggi, distorsi penggunaan memori terjadi.
Solusi
Periksa apakah kunci besar ada dan bagi kunci besar
Identifikasi Kunci Besar
Anda dapat menggunakan fitur analisis kunci offline untuk mengidentifikasi kunci besar. Untuk informasi lebih lanjut, lihat Gunakan Fitur Analisis Kunci Offline.
Untuk informasi tentang cara mengidentifikasi kunci besar, lihat Identifikasi dan Tangani Kunci Besar dan Hotkeys.
Bagi Kunci Besar
Sebagai contoh, Anda dapat membagi kunci HASH yang berisi puluhan ribu anggota menjadi beberapa kunci HASH yang memiliki jumlah anggota yang sesuai. Untuk instans kluster, Anda dapat membagi kunci besar untuk menyeimbangkan penggunaan memori di beberapa shard data.
Periksa apakah tag hash digunakan
Jika tag hash digunakan, pertimbangkan untuk membagi tag hash menjadi beberapa tag hash berdasarkan persyaratan bisnis Anda. Dengan cara ini, data didistribusikan secara merata di berbagai node data.
Tingkatkan spesifikasi instans
Meningkatkan spesifikasi instans dengan meningkatkan memori yang dialokasikan ke setiap shard dapat berfungsi sebagai solusi sementara untuk mencegah distorsi memori. Untuk informasi lebih lanjut, lihat Ubah Konfigurasi Instans.
Sistem memulai pra-pemeriksaan untuk distorsi data selama perubahan spesifikasi instans. Jika jenis instans yang Anda pilih tidak dapat menangani masalah distorsi data, sistem akan melaporkan kesalahan. Pilih jenis instans dengan spesifikasi lebih tinggi dan coba lagi.
Setelah Anda meningkatkan spesifikasi instans, distorsi penggunaan memori mungkin berkurang. Namun, distorsi juga dapat terjadi pada bandwidth dan sumber daya CPU.
Lampiran 1: Penggunaan memori Tair (Redis OSS-compatible)
Penggunaan memori Tair (Redis OSS-compatible) dibagi menjadi tiga bagian. Tabel berikut menjelaskan penggunaan memori.
Penggunaan Memori | Deskripsi |
Memori yang dikonsumsi oleh operasi terkait tautan | Termasuk memori yang dikonsumsi oleh buffer input, memori yang dikonsumsi oleh buffer output, memori yang dikonsumsi oleh overhead JIT, memori yang dikonsumsi oleh Fake Lua Link, dan memori yang dikonsumsi untuk menyimpan skrip Lua yang dieksekusi. Konsumsi memori berubah secara dinamis. Anda dapat menjalankan perintah INFO untuk mendapatkan informasi cache klien dari kolom Clients di output. Catatan Memori yang dikonsumsi oleh buffer input dan output kecil dan bervariasi berdasarkan jumlah koneksi dari setiap klien. Ketika klien memulai operasi berbasis rentang atau ketika klien mengirim dan menerima kunci besar dengan kecepatan rendah, memori yang dikma dikonsumsi oleh buffer input dan output meningkat. Akibatnya, memori yang dapat digunakan untuk menyimpan data berkurang, dan masalah kehabisan memori (OOM) mungkin terjadi. |
Memori yang dikonsumsi oleh data | Termasuk memori yang dikonsumsi untuk menyimpan nilai bidang. Bagian dari konsumsi memori ini adalah objek penting yang perlu dianalisis. |
Memori yang dikonsumsi oleh operasi manajemen | Termasuk memori yang dikonsumsi oleh set hash, memori yang dikonsumsi oleh buffer replikasi, dan memori yang dikonsumsi oleh buffer file append-only (AOF). Konsumsi memori tetap stabil dalam kisaran 32 MB hingga 64 MB, yang kecil. Catatan Sejumlah besar kunci, seperti ratusan juta, mengonsumsi jumlah memori yang besar. |
Sebagian besar masalah OOM terjadi karena manajemen tidak efisien memori yang diperoleh dan dilepaskan secara dinamis. Misalnya, jika sejumlah besar permintaan menumpuk karena throttling, jumlah memori yang diperoleh secara dinamis meningkat dengan cepat. Masalah OOM juga dapat terjadi karena skrip Lua yang kompleks atau tidak sesuai. Manajemen memori yang diperoleh dan dilepaskan secara dinamis ditingkatkan di Tair (Enterprise Edition). Kami sarankan Anda menggunakan Tair (Enterprise Edition). Untuk informasi lebih lanjut, lihat Ikhtisar.
