Praktik terbaik manajemen memori

Halaman ini menjelaskan konfigurasi Reserved Memory untuk instance Memcached Anda, dan kapan harus Meningkatkan Reserved Memory jika diperlukan. Halaman ini juga menjelaskan praktik terbaik lainnya yang perlu Anda ketahui untuk mengelola memori secara efektif untuk instance Memcached.

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

Jika penggunaan memori tumbuh lebih besar dari total memori sistem Memorystore, kondisi kehabisan memori (OOM) dapat menyebabkan penghapusan cache penuh data, yang dapat mengganggu aplikasi dan bisnis Anda.

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

Konsep pengelolaan memori

Kapasitas instance

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

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

Batas memori cache

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

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

Overhead memori

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

Overhead memori diskalakan berdasarkan jumlah koneksi aktif, total item, dan ukuran item. Selain itu, overhead memori secara teori tidak terbatas, sehingga memiliki potensi untuk tumbuh tanpa batas.

Untuk memperhitungkan overhead memori, Memorystore menambahkan memori tambahan ke instance Anda. Namun, jumlah memori tambahan yang kami tambahkan tidak terlihat oleh Anda. Untuk sebagian besar workload, overhead memori seharusnya tidak bermasalah.

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

placeholder

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

placeholder

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

placeholder

Jika overhead dan item mengisi semua ruang yang tersedia, Memcached akan kehabisan memori dan proses harus dihentikan oleh OS yang menyebabkan pembersihan cache penuh:

placeholder

Anda mungkin mengamati bahwa overhead memori tumbuh melebihi ruang tambahan 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 bagi beban kerja Anda.

Memori yang Direservasi

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

Untuk meningkatkan memori yang tersedia ke overhead memori, Anda dapat meningkatkan Memori yang Direservasi, yang akan mengurangi memori cache yang tersedia. Anda harus menambahkan ruang tambahan ini jika instance mengalami tekanan memori yang disebabkan oleh overhead memori yang tinggi.

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

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

placeholder

Setelah cache Memcached mencapai batas yang dikurangi ini, cache akan mulai mengeluarkan item.

placeholder

Setelah mulai menggunakan instance, bergantung pada metrik Penggunaan Memori Sistem, Anda mungkin diminta untuk meningkatkan Memori yang Direservasi di instance untuk mendukung beban kerja puncak.

Untuk mengetahui detail selengkapnya, lihat Mengelola penggunaan memori sistem.

Penggunaan Memori Sistem

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

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

Untuk workload yang mencoba mengisi cache sepenuhnya dan mengandalkan penghapusan Memcached untuk mengelola item yang disimpan, Anda akan melihat Penggunaan Memori Sistem yang lebih tinggi, dan sebaiknya Anda meningkatkan Memori yang Direservasi secara preventif untuk memastikan bahwa Anda memiliki cukup ruang untuk overhead.

Notifikasi untuk Penggunaan Memori Sistem

Anda harus menyetel pemberitahuan untuk memberi tahu Anda jika metrik Penggunaan Memori Sistem melebihi 90%. Jika Penggunaan Memori Sistem tinggi, Anda harus memantau metrik Penggunaan Memori Sistem dengan lebih cermat, dan jika metrik ini meningkat secara drastis, Anda harus mempertimbangkan untuk mengambil langkah-langkah guna mengelola penggunaan memori sistem. Mengambil tindakan saat Penggunaan Memori Sistem mencapai tingkat tinggi sangatlah penting karena memberi Anda waktu untuk melakukan mitigasi, bukan menangani penghapusan cache yang disebabkan oleh kondisi OOM.

Kebijakan pengusiran

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

Memantau penghapusan menunjukkan jumlah kunci yang dihapus Memcached karena keterbatasan ukuran. Item yang dihapus karena masa berlaku TTL berakhir tidak disertakan dalam metrik ini. Jika Anda melihat banyak penghapusan, menskalakan instance dapat meningkatkan rasio hit cache.

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

Rasio cache ditemukan

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

Anda harus mencatat rasio hit cache sebelum melakukan perubahan konfigurasi besar seperti menyesuaikan Memori yang Direservasi, menyesuaikan TTL kunci, atau menskalakan instance. Kemudian, setelah Anda mengubah instance, periksa kembali rasio hit cache untuk melihat pengaruh perubahan Anda terhadap metrik ini.

Memantau penggunaan memori instance

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

Metrik Alamat metrik lengkap
Memori Cache memcache.googleapis.com/node/cache_memory
Pemakaian Memori Sistem memcache.googleapis.com/node/memory/utilization
Rasio Cache-hit 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 untuk menyelesaikan masalah tersebut:

  1. Verifikasi kondisi OOM.
  2. Tingkatkan Memori yang Direservasi di instance Anda.
  3. Menskalakan instance.
  4. Menetapkan TTL pada kunci yang tidak stabil.
  5. Menghapus kunci secara manual di 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 dimulai ulang instance. Untuk melihat apakah mulai ulang disebabkan oleh kondisi OOM, lihat metrik Waktu Aktif dan Pemakaian Memori Sistem.

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

Meningkatkan Memori yang Direservasi

Meningkatkan Memori yang Direservasi akan membuat lebih banyak ruang untuk overhead memori. Hal ini dilakukan dengan mengurangi batas Memori Cache instance Anda. Anda harus meningkatkan Memori yang Direservasi jika metrik Penggunaan Memori Sistem melebihi 90%.

Untuk mengetahui petunjuk tentang cara menyesuaikan konfigurasi Reserved Memory, lihat Mengonfigurasi instance Memcached

Meningkatkan Memori yang Direservasi akan mengurangi memori yang tersedia untuk menyimpan item, sehingga penghapusan item akan terjadi lebih cepat. Hal ini dapat menurunkan rasio hit cache instance Anda. Item tidak akan dihapus jika Anda menonaktifkan penghapusan.

Meningkatkan skala instance

Ikuti petunjuk di Menskalakan instance Memcached untuk meningkatkan jumlah node. Jika aplikasi Anda dikonfigurasi untuk membuat shard kunci di seluruh node, hal ini akan meningkatkan ruang penyimpanan item secara keseluruhan yang tersedia untuk aplikasi Anda dan mengurangi jumlah kunci yang disimpan di setiap node.

Menetapkan TTL pada kunci yang tidak stabil

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

Menghapus kunci secara manual di instance Anda

Anda harus mempertimbangkan untuk menghapus kunci saat menghadapi tekanan memori. Namun, karena Memcached open source tidak mengosongkan memori yang dialokasikan sebelumnya, menghapus kunci hanya mengurangi kemungkinan memasuki kondisi OOM. Hal ini mengurangi kemungkinan karena penulisan baru menggunakan memori kosong. Overhead memori yang meningkat masih dapat menyebabkan kondisi OOM karena memori yang dialokasikan sebelumnya dikhususkan untuk menyimpan item, dan tidak dapat digunakan oleh overhead.