Praktik terbaik pengelolaan memori

Halaman ini menjelaskan konfigurasi Memori yang Dicadangkan untuk instance Memcached Anda, dan kapan harus Meningkatkan Memori yang Dicadangkan jika diperlukan. Halaman ini juga menjelaskan praktik terbaik lain yang perlu Anda ketahui agar dapat mengelola memori untuk instance Memcached secara efektif.

Memorystore menambahkan memori tambahan ke instance Anda, yang tidak terlihat oleh Anda, untuk mengakomodasi overhead yang dibuat oleh proses Memcached. Namun, bergantung pada beban kerja spesifik Anda, overhead memori dapat bertambah lebih besar daripada memori ekstra yang kami sediakan untuk tujuan ini.

Ketika penggunaan memori bertambah lebih besar daripada total memori sistem Memorystore Anda, kondisi kehabisan memori (OOM) dapat menyebabkan pengosongan data dalam cache secara penuh, yang dapat mengganggu aplikasi dan bisnis Anda.

Bagian berikut menguraikan prinsip umum yang harus diikuti saat mengonfigurasi Memorystore untuk instance Memcached. Bagian ini juga membahas metrik dan pemberitahuan yang dapat Anda gunakan untuk memantau memori, dan juga menjelaskan tindakan yang dapat Anda ambil.

Konsep pengelolaan memori

Kapasitas instance

Kapasitas instance adalah jumlah memori yang Anda sediakan dalam GiB, dan yang ditagihkan kepada Anda. Memori cache tidak sama dengan kapasitas instance karena memori cache tidak tetap. Namun, saat Anda membuat instance Memcache, kapasitas instance sama dengan memori cache secara default.

Misalnya, jika Anda memilih kapasitas instance 5 GiB, secara default instance Anda memiliki ruang 5 GiB untuk menyimpan item.

Batas memori cache

Memori cache adalah ukuran total memori yang tersedia untuk digunakan sebagai cache oleh instance Memcached Anda. Secara default, memori cache sama dengan kapasitas instance Anda. Namun, menyesuaikan Memori yang Dicadangkan dapat mengurangi memori cache. Untuk mengetahui detail selengkapnya, lihat Reserved Memory. Setelah memori cache penuh, Memcached mulai mengeluarkan item yang disimpan dalam cache untuk memberi ruang bagi operasi tulis baru.

Perlu diketahui bahwa saat melihat metrik memori cache, memori cache yang dilaporkan untuk node Memcached hanya menyertakan ruang yang ditempati oleh item. Artinya, Memcache mungkin dapat meremehkan total penggunaan memori cache. Memori tambahan dapat dialokasikan oleh cache sebagai fragmentasi di dalam slab.

Overhead memori

Overhead memori adalah memori yang digunakan oleh proses Memcached. Ini tidak mencakup item yang disimpan dalam memori untuk disimpan dalam cache.

Overhead memori diskalakan berdasarkan jumlah koneksi aktif, total item, dan ukuran item. Selain itu, secara teoritis, overhead memori tidak terbatas, sehingga berpotensi berkembang tanpa batas.

Untuk memperhitungkan overhead memori, Memorystore menambahkan memori ekstra ke instance Anda. Namun, jumlah memori tambahan yang ditambahkan tidak terlihat oleh Anda. Untuk sebagian besar beban kerja, overhead memori seharusnya tidak menjadi masalah.

Tanpa konfigurasi apa pun, memori node Memorystore for Memcached yang kosong akan terlihat seperti diagram yang terlihat di bawah ini.

placeholder

Saat aplikasi Anda menambahkan item ke cache, Memcached mengakumulasi overhead untuk proses seperti buffer koneksi dan tabel hash internal:

placeholder

Karena pertumbuhan overhead tidak terbatas, beberapa overhead untuk beberapa beban kerja tumbuh melampaui batas yang dicadangkan, seperti yang terlihat di bawah ini:

placeholder

Saat overhead dan item mengisi semua ruang yang tersedia, Memcached kehabisan memori dan prosesnya harus dihentikan oleh OS yang menyebabkan pengosongan cache secara penuh:

placeholder

Anda dapat mengamati bahwa overhead memori bertambah melebihi ruang ekstra yang dialokasikan Memorystore untuk overhead secara default (seperti yang ditunjukkan oleh Penggunaan Memori Sistem yang tinggi). Dalam situasi ini, tingkatkan parameter Reserved Memory untuk membuat overhead tambahan untuk workload Anda.

Memori yang Dicadangkan

Memori yang Dicadangkan adalah konfigurasi Memorystore yang memungkinkan Anda meningkatkan jumlah ruang yang tersedia untuk digunakan oleh overhead memori.

Untuk menambah memori yang tersedia untuk overhead memori, Anda meningkatkan Memori yang Dicadangkan, yang mengurangi memori cache yang tersedia. Anda harus menambahkan ruang ekstra ini jika instance mengalami tekanan memori yang disebabkan oleh overhead memori tinggi.

Instance yang dibuat setelah 25 Oktober 2021 memiliki persentase Memori yang Dicadangkan default sebesar 10%. Nilai ini dapat diganti dengan memperbarui konfigurasi secara manual pada instance Anda. Mengurangi Memori yang Dicadangkan di instance Anda dapat meningkatkan kemungkinan kondisi OOM secara signifikan.

Diagram di bawah menunjukkan instance yang telah membuat ruang tambahan untuk overhead memori dengan meningkatkan Memori yang Dicadangkan:

placeholder

Setelah cache Memcache mencapai batas pengurangan ini, cache mulai mengeluarkan item.

placeholder

Setelah mulai menggunakan instance, bergantung pada metrik System Memory Utilization, Anda mungkin akan diminta untuk meningkatkan Memori yang Dicadangkan pada instance untuk mendukung beban kerja puncak.

Untuk mengetahui detail selengkapnya, lihat Mengelola penggunaan memori sistem.

Pemakaian Memori Sistem

Memori sistem setara dengan kapasitas instance yang disediakan oleh Anda ditambah ruang tambahan yang ditambahkan Memorystore untuk overhead memori.

Pemakaian Memori Sistem adalah metrik yang menampilkan persentase semua memori yang digunakan (item yang disimpan ditambah overhead memori) dibandingkan dengan memori sistem. Ini adalah metrik penting untuk dipantau, karena metrik ini menunjukkan seberapa dekat Anda untuk sepenuhnya mengisi memori sistem yang tersedia untuk instance. Saat metrik Pemakaian Memori Sistem mendekati 100%, instance lebih cenderung mengalami kondisi OOM. Untuk memastikan instance memiliki memori yang cukup untuk mendukung beban kerja Anda, penting untuk selalu menyediakan memori sistem yang cukup.

Untuk beban kerja yang mencoba mengisi cache secara keseluruhan dan mengandalkan penggusuran Memcached untuk mengelola item mana yang disimpan, Anda akan melihat Pemakaian Memori Sistem yang lebih tinggi, dan Anda mungkin ingin meningkatkan Memori yang Dicadangkan secara preemtif guna menjamin bahwa Anda memiliki cukup ruang untuk overhead.

Pemberitahuan untuk Penggunaan Memori Sistem

Anda harus menyetel pemberitahuan untuk memberi tahu jika metrik Penggunaan Memori Sistem melebihi 90%. Jika Pemakaian Memori Sistem tinggi, Anda harus melanjutkan untuk memantau metrik Penggunaan Memori Sistem dengan lebih cermat, dan jika peningkatan ini meningkat secara drastis, sebaiknya pertimbangkan untuk mengambil langkah-langkah untuk mengelola penggunaan memori sistem. Mengambil tindakan saat Pemakaian Memori Sistem mencapai level yang tinggi adalah hal penting karena memberi Anda waktu untuk melakukan mitigasi, bukan menangani pembersihan cache yang disebabkan oleh kondisi OOM.

Kebijakan penghapusan

Memcached menggunakan algoritma LRU yang dioptimalkan untuk mengeluarkan item setelah memenuhi memori cache. Untuk mengetahui petunjuk tentang cara menonaktifkan penghapusan cache, lihat Mengonfigurasi instance Memcache.

Memantau penghapusan menunjukkan jumlah kunci yang dihapus Memcached karena keterbatasan ukuran. Item yang dihapus karena masa berlaku TTL tidak disertakan dalam metrik ini. Jika Anda mendapati sejumlah besar penghapusan, meningkatkan skala instance dapat meningkatkan rasio cache ditemukan.

Jika penghapusan tidak diaktifkan, dan cache Anda sepenuhnya penuh, setelan item di server Memcached Anda mungkin akan gagal.

Rasio cache-hit

Anda harus memantau metrik rasio cache-hit secara rutin untuk mengetahui persentase pencarian kunci yang berhasil ditampilkan oleh kunci dalam instance Memcached Anda. Secara umum, rasio cache-hit yang lebih tinggi lebih baik daripada rasio cache-hit yang lebih rendah karena artinya cache Anda menampilkan lebih banyak permintaan cache.

Anda harus membuat catatan rasio cache-hit sebelum membuat perubahan konfigurasi besar seperti menyesuaikan Memori yang Dicadangkan, menyesuaikan TTL utama, atau menskalakan instance. Kemudian, setelah Anda mengubah instance, periksa lagi rasio cache-hit untuk melihat pengaruh perubahan terhadap metrik ini.

Memantau penggunaan memori instance

Metrik berikut memberi Anda insight tentang penggunaan memori instance. Untuk mempelajari cara melihat metrik dan menyetel pemberitahuan, lihat Memantau instance Memcache.

Metrik Alamat metrik lengkap
Memori Cache memcache.googleapis.com/node/cache_memory
Pemakaian Memori Sistem memcache.googleapis.com/node/memory/utilization
Rasio cache ditemukan memcache.googleapis.com/node/hit_ratio
Penggusuran memcache.googleapis.com/node/eviction_count

Mengelola penggunaan memori sistem

Jika instance Anda mengalami tekanan memori atau mengalami error OOM, ikuti langkah-langkah di bawah ini untuk menyelesaikan masalah tersebut:

  1. Verifikasi kondisi OOM.
  2. Meningkatkan Memori yang Dicadangkan di instance Anda.
  3. Tingkatkan skala instance.
  4. Menetapkan TTL pada kunci yang tidak stabil.
  5. Menghapus kunci secara manual pada instance Anda.
  6. Jika Anda masih mengalami kondisi OOM, hubungi Dukungan Google Cloud Platform.

Memverifikasi kondisi OOM

Saat instance Anda mencapai kondisi OOM, sinyal pertama adalah memulai ulang instance. Untuk mengetahui apakah mulai ulang disebabkan oleh kondisi OOM, lihat metrics Uptime dan System Memory Utilization.

Jika Pemakaian Memori Sistem lebih dari 90% sebelum Waktu beroperasi turun ke nol, ini berarti bahwa mulai ulang instance kemungkinan disebabkan oleh kondisi OOM.

Tingkatkan Memori yang Dicadangkan

Meningkatkan Memori yang Dicadangkan akan menciptakan lebih banyak ruang untuk overhead memori. Hal ini dilakukan dengan mengurangi batas Memori Cache instance Anda. Anda harus meningkatkan Reserved Memory jika metrik System Memory Utilization melebihi 90%.

Untuk mengetahui petunjuk cara menyesuaikan konfigurasi Cadangan Memori, lihat Mengonfigurasi instance Memcached

Meningkatkan Memori yang dicadangkan akan mengurangi memori yang tersedia untuk menyimpan item, sehingga penghapusan item terjadi lebih cepat. Tindakan ini dapat menurunkan rasio cache ditemukan instance Anda. Item tidak akan dikeluarkan jika Anda menonaktifkan penghapusan.

Meningkatkan skala instance

Ikuti petunjuk di Menskalakan instance Memcache untuk meningkatkan jumlah node Anda. Jika aplikasi Anda dikonfigurasi untuk melakukan sharding kunci di seluruh node, hal ini akan meningkatkan keseluruhan ruang penyimpanan item yang tersedia untuk aplikasi Anda dan mengurangi jumlah kunci yang disimpan pada setiap node.

Menetapkan TTL pada kunci yang tidak stabil

Konfigurasi aplikasi Anda untuk menetapkan TTL pada kunci tersimpan di Memcached. Secara default, Memcached secara berkala memeriksa kunci yang sudah tidak berlaku dan menghapusnya, mengosongkan ruang di server Anda dan mencegah alokasi memori cache lebih lanjut.

Menghapus kunci di instance secara manual

Anda harus mempertimbangkan untuk menghapus kunci saat dihadapkan pada tekanan memori. Namun, karena Memcached open source tidak mengosongkan memori yang dialokasikan sebelumnya, menghapus kunci hanya akan mengurangi peluang masuknya kondisi OOM. Hal ini mengurangi peluang karena operasi tulis baru menggunakan memori kosong. Meningkatkan overhead memori masih dapat menyebabkan kondisi OOM karena memori yang dialokasikan sebelumnya dikhususkan untuk menyimpan item, dan tidak dapat digunakan oleh overhead.