Ketika instans Tair (Redis OSS-compatible) kehabisan memori, hal ini dapat menyebabkan masalah seperti eviksi kunci yang sering terjadi, peningkatan waktu respons, dan QPS yang tidak stabil, yang berpotensi mengganggu operasi bisnis Anda. Jika memori instans Anda penuh atau Anda menerima peringatan memori, gunakan topik ini untuk menentukan apakah penggunaan memori secara konsisten tinggi, mengalami kenaikan mendadak, atau tidak merata. Anda kemudian dapat menangani masalah tersebut dengan memisahkan kunci besar, menetapkan kebijakan kedaluwarsa, atau meningkatkan spesifikasi instans.
Skenario penggunaan memori tinggi
Penggunaan memori tinggi umumnya termasuk dalam salah satu dari tiga skenario berikut:
Penggunaan memori tetap pada level tinggi selama periode yang lama. Secara umum, Anda harus mengambil tindakan jika penggunaan memori melebihi 95%.
Penggunaan memori secara konsisten rendah tetapi naik mendadak ke level tinggi, kadang-kadang mencapai 100%.
Penggunaan memori keseluruhan instans rendah, tetapi penggunaan memori pada data node tertentu mendekati 100%.
Untuk mengurangi penggunaan memori, terapkan solusi yang sesuai dengan skenario Anda.
Solusi untuk penggunaan memori yang konsisten tinggi
Periksa apakah kunci yang ada memenuhi kebutuhan bisnis, dan segera hapus kunci yang tidak diperlukan.
Gunakan fitur analisis cache untuk menganalisis distribusi kunci besar dan kebijakan TTL (time-to-live) untuk kunci. Untuk informasi selengkapnya, lihat Analisis kunci offline.
Analisis apakah kunci memiliki kebijakan TTL yang wajar.
CatatanPada contoh berikut, tidak ada waktu kedaluwarsa yang ditetapkan untuk semua kunci. Kami menyarankan Anda mengevaluasi kebutuhan bisnis dan menetapkan waktu kedaluwarsa yang sesuai di sisi client.
Gambar 1. Contoh distribusi waktu kedaluwarsa kunci

Evaluasi kunci besar dan pisahkan di sisi aplikasi.
Di halaman analisis cache, klik tab Large Key Analysis untuk melihat detailnya. Tabel tersebut menampilkan informasi seperti nama kunci, tipe kunci, dan ukuran data. Anda dapat mengklik tombol Export untuk mengunduh hasil analisis ke mesin lokal Anda.
Tetapkan kebijakan eviksi yang tepat berdasarkan kebutuhan bisnis Anda dengan mengonfigurasi parameter maxmemory-policy. Untuk petunjuk spesifik, lihat Setel parameter.
CatatanKebijakan eviksi default untuk sebuah instans adalah volatile-lru. Untuk informasi selengkapnya, lihat Kebijakan eviksi.
Tetapkan frekuensi eksekusi yang wajar untuk penghapusan aktif kunci yang telah kedaluwarsa berdasarkan kebutuhan bisnis Anda dengan menyesuaikan nilai parameter hz. Untuk petunjuk spesifik, lihat Sesuaikan frekuensi eksekusi tugas terjadwal.
CatatanKami menyarankan menetapkan parameter hz ke nilai kurang dari 100. Nilai yang lebih besar dapat berdampak signifikan pada penggunaan CPU. Anda juga dapat mengaktifkan penyesuaian otomatis jika instans Anda kompatibel dengan Redis 5.0 atau versi yang lebih baru. Untuk informasi selengkapnya, lihat Aktifkan kontrol frekuensi dinamis untuk tugas latar belakang.
Jika penggunaan memori masih tinggi setelah melakukan optimasi di atas, pertimbangkan untuk meningkatkan ke spesifikasi dengan kapasitas memori lebih besar agar dapat menangani lebih banyak data dan meningkatkan performa. Untuk informasi selengkapnya, lihat Ubah konfigurasi instans.
CatatanSebelum meningkatkan instans Anda, Anda dapat membeli instans pay-as-you-go untuk menguji apakah spesifikasi target memenuhi kebutuhan workload Anda. Anda dapat melepas instans tersebut setelah pengujian selesai. Untuk informasi tentang cara melepas instans, lihat Lepaskan instans pay-as-you-go.
Solusi untuk kenaikan memori mendadak
Penyebab
Kenaikan mendadak pada penggunaan memori dapat disebabkan oleh hal-hal berikut:
Kenaikan memori mendadak memiliki empat penyebab utama. Gunakan indikator utama pada setiap bagian untuk mengidentifikasi penyebab yang relevan.
Penyebab | Indikator utama |
Volume besar data baru yang ditulis | Lalu lintas inbound dan QPS tulis naik bersamaan dengan penggunaan memori |
Lonjakan koneksi baru | Jumlah koneksi naik tajam bersamaan dengan penggunaan memori |
Trafik lonjakan menyebabkan backlog buffer | Penggunaan bandwidth mencapai 100%; memori |
Client lambat menyebabkan backlog buffer output |
|
Volume besar data baru yang ditulis
Masuknya data baru secara cepat langsung meningkatkan konsumsi memori.
Diagnosa
Di halaman Performance Monitor, periksa lalu lintas inbound dan permintaan tulis per detik (QPS). Jika kedua metrik tersebut mengikuti tren yang sama dengan penggunaan memori, lonjakan tersebut disebabkan oleh volume besar data baru.
Selesaikan
Tetapkan nilai time-to-live (TTL) yang sesuai pada kunci untuk secara otomatis menghapus data yang tidak lagi diperlukan. Atau, hapus kunci yang tidak diperlukan secara manual.
Tingkatkan kapasitas memori instans. Untuk detailnya, lihat Ubah konfigurasi instans.
Jika instans Anda adalah instans standar dan penggunaan memori tetap tinggi setelah peningkatan kapasitas, tingkatkan ke instans kluster. Instans kluster mendistribusikan data ke beberapa shard, sehingga mengurangi tekanan memori pada setiap shard. Untuk detailnya, lihat Ubah konfigurasi instans.
Lonjakan koneksi baru
Setiap koneksi client menyisihkan memori untuk buffer input dan output-nya. Lonjakan koneksi mendadak menyebabkan kenaikan yang sesuai pada total penggunaan memori.
Diagnosis
Di halaman Performance Monitor, periksa jumlah koneksi. Jika jumlah koneksi naik tajam bersamaan dengan penggunaan memori, penyebabnya adalah lonjakan koneksi.
Penyelesaian
Periksa kebocoran koneksi pada aplikasi Anda.
Konfigurasikan timeout koneksi untuk secara otomatis menutup koneksi yang menganggur. Untuk detailnya, lihat Tentukan periode timeout untuk koneksi client.
Trafik lonjakan menyebabkan backlog buffer
Ketika akses lonjakan menghasilkan trafik yang melebihi bandwidth jaringan instans, data masuk dan keluar menumpuk di buffer input dan output. Backlog buffer ini mengonsumsi memori tambahan di atas penyimpanan data normal.
Diagnosis
Periksa apakah penggunaan lalu lintas inbound dan outbound telah mencapai 100%.
Jalankan
MEMORY STATSdan periksa apakahclients.normalmenempati memori dalam jumlah besar.Catatanclients.normalmelaporkan total memori yang dikonsumsi oleh buffer input dan output di seluruh koneksi client normal. Nilai tinggi di sini mengonfirmasi bahwa backlog buffer menjadi pemicu kenaikan memori.
Selesaikan
Identifikasi penyebab lonjakan trafik.
Tingkatkan bandwidth jaringan instans. Untuk detailnya, lihat Tingkatkan bandwidth instans secara manual dan Aktifkan penskalaan otomatis bandwidth.
Tingkatkan spesifikasi instans untuk menyediakan kapasitas buffer yang cukup. Untuk detailnya, lihat Ubah konfigurasi instans.
Client lambat menyebabkan backlog buffer output
Ketika client tidak dapat mengonsumsi respons dengan cukup cepat, data yang belum terkirim menumpuk di buffer output sisi server. Redis mengalokasikan memori untuk setiap respons yang dalam antrian, yang dapat menjadi besar ketika client tertinggal.
Diagnosis
Dalam redis-cli, jalankan MEMORY DOCTOR dan periksa nilai big_client_buf. Jika big_client_buf bernilai 1, setidaknya satu client memiliki buffer output berukuran besar yang mengonsumsi memori signifikan.
Penyelesaian
Jalankan CLIENT LIST dan cari client dengan nilai omem yang tinggi. Bidang omem melaporkan memori yang digunakan oleh buffer output client. Periksa apakah client yang teridentifikasi mengalami masalah performa yang mencegahnya mengonsumsi respons dengan cukup cepat.
Solusi untuk penggunaan memori tinggi pada data node
Gejala
Untuk instans dengan arsitektur kluster, penggunaan memori tinggi pada data node tertentu ditandai oleh gejala berikut:
Anda menerima peringatan penggunaan memori dari CloudMonitor. Pesan peringatan menunjukkan bahwa penggunaan memori pada data node tertentu telah melebihi ambang batas.
Laporan diagnostik instans menunjukkan adanya kesenjangan penggunaan memori.
Di halaman pemantauan performa, Anda melihat bahwa penggunaan memori instans secara keseluruhan rendah, tetapi data node tertentu memiliki penggunaan memori tinggi.
Penyebab
Jika penggunaan memori instans secara keseluruhan rendah sedangkan penggunaan memori pada data node tertentu tinggi, hal ini menunjukkan adanya kesenjangan penggunaan memori.
Solusi
Periksa dan pisahkan kunci besar
Temukan kunci besar
Gunakan fitur analisis kunci offline untuk menemukan kunci besar apa pun.
Untuk metode lain dalam menemukan kunci besar, lihat Kunci besar dan hotkey.
Pisahkan kunci besar
Sebagai contoh, pisahkan kunci HASH dengan puluhan ribu anggota menjadi beberapa kunci HASH yang lebih kecil, masing-masing dengan jumlah anggota yang wajar. Pada instans kluster, memisahkan kunci besar dapat membantu menyeimbangkan penggunaan memori di seluruh shard data.
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.
Tingkatkan spesifikasi instans
Menambah spesifikasi instans meningkatkan memori yang tersedia untuk setiap shard dan dapat menjadi solusi sementara untuk kesenjangan memori. Untuk langkah-langkah detailnya, lihat Ubah konfigurasi instans.
Sistem melakukan pemeriksaan awal terhadap kesenjangan data selama perubahan spesifikasi instans. Jika tipe instans yang Anda pilih tidak dapat menangani masalah kesenjangan data, sistem akan melaporkan error. Pilih tipe instans dengan spesifikasi 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.
Lampiran 1: Penggunaan memori Redis
Memori instans Redis terdiri dari tiga komponen utama:
Komponen memori | Deskripsi |
Memori link (dinamis) | Termasuk memori untuk buffer input, buffer output, overhead JIT, fake Lua links, dan cache eksekusi Lua. Anda dapat menjalankan perintah INFO untuk memeriksa informasi cache client pada bagian Clients dalam output. Catatan Buffer input dan output terkait dengan setiap koneksi client dan biasanya kecil. Namun, saat Anda melakukan operasi berbasis rentang atau saat kunci besar ditransfer secara lambat, memori yang digunakan oleh buffer ini dapat meningkat, yang memengaruhi area data dan berpotensi menyebabkan error kehabisan memori (OOM). |
Data memory | Ini adalah area data pengguna, yang menyimpan informasi nilai aktual. Biasanya ini menjadi fokus utama analisis. |
Memori manajemen (statis) | Area ini kecil dan relatif konstan setelah startup. Terdiri dari overhead memori dari tabel hash manajemen data, buffer replikasi, dan buffer AOF (sekitar 32 MB hingga 64 MB). Catatan Untuk jumlah kunci yang sangat besar (misalnya, ratusan juta), area ini dapat mengonsumsi memori dalam jumlah signifikan. |
Manajemen memori dinamis yang tidak efektif menyebabkan sebagian besar skenario OOM. Misalnya, antrian permintaan selama pembatasan laju dapat menyebabkan memori dinamis meningkat pesat. Skrip Lua yang terlalu kompleks atau ditulis dengan buruk juga dapat menyebabkan OOM. Untuk mencegah masalah ini, kami merekomendasikan Tair (Edisi Perusahaan), yang menyediakan kontrol lebih baik atas memori dinamis.