Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan ralat overcommit_memory dalam pangkalan data redis di bawah linux

Bagaimana untuk menyelesaikan ralat overcommit_memory dalam pangkalan data redis di bawah linux

WBOY
WBOYke hadapan
2023-05-27 20:55:532694semak imbas

Latar Belakang

Redis syarikat kadangkala gagal menyimpan latar belakang db Penggera berikut ditemui melalui log, yang mungkin disebabkan olehnya:

[13223] 17 Mac 13:18. :02.207 # AMARAN overcommit_memory ditetapkan kepada 0! Simpanan latar belakang mungkin gagal dalam keadaan memori rendah Untuk menyelesaikan isu ini tambah 'vm.overcommit_memory = 1' pada /etc/sysctl.conf dan kemudian but semula atau jalankan arahan 'sysctl vm.overcommit_memory. =1 ' untuk ini berkuat kuasa.

Jadi melalui carian, saya mendapati seseorang mempunyai masalah yang sama seperti saya, dan pada dasarnya ia ditentukan berpunca daripadanya.

Parameter kernel overcommit_memory

Ia ialah 内存分配策略

Nilai pilihan: 0, 1, 2.

  • 0, menunjukkan bahawa kernel akan menyemak sama ada terdapat cukup memori yang tersedia untuk digunakan oleh proses aplikasi, jika terdapat memori yang mencukupi, aplikasi memori dibenarkan; permohonan gagal dan ralat dikembalikan kepada proses permohonan.

  • 1, menunjukkan bahawa kernel membenarkan semua memori fizikal diperuntukkan tanpa mengira status memori semasa.

  • 2, menunjukkan bahawa kernel membenarkan peruntukan memori yang melebihi jumlah semua memori fizikal dan ruang swap

Apa itu Overcommit dan OOM

Linux membalas "ya" kepada kebanyakan permintaan untuk memori supaya ia boleh menjalankan lebih banyak atur cara yang lebih besar. Kerana selepas memohon ingatan, ingatan tidak akan digunakan serta-merta. Teknik ini dipanggil Overcommit. Apabila Linux mengesan memori tidak mencukupi, ia mencetuskan operasi pembunuh OOM (OOM bermaksud ingatan tidak mencukupi). Untuk mengosongkan ingatan, ia akan memberi keutamaan untuk membunuh beberapa proses mod pengguna dan bukannya benang kernel.

Apabila oom-killer berlaku, proses yang manakah akan Linux pilih untuk dibunuh? Fungsi yang memilih proses ialah fungsi oom_badness (dalam mm/oom_kill.c), yang mengira bilangan mata (0~1000) untuk setiap proses. Semakin tinggi skor, semakin besar kemungkinan proses itu akan dibunuh. Bilangan mata setiap proses adalah berkaitan dengan oom_score_adj dan oom_score_adj boleh ditetapkan (-1000 adalah yang terendah, 1000 adalah yang tertinggi).

Penyelesaian:

Ia sangat mudah, cuma ikut arahan (tetapkan vm.overcommit_memory kepada 1):

Terdapat tiga cara untuk mengubah suai parameter kernel, tetapi anda mesti mempunyai keizinan Root:

  • (1) Edit /etc/sysctl.conf, tukar vm.overcommit_memory=1, dan kemudian sysctl -p untuk menjadikan fail konfigurasi berkuat kuasa

  • (2)sysctl vm.overcommit_memory=1

  • (3) echo 1 > /proc/sys/vm/overcommit_memory

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat overcommit_memory dalam pangkalan data redis di bawah linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam