Terkadang saya bekerja dengan banyak sekali data yang ingin saya ingat untuk diproses. Kadang-kadang saya salah menghitung jumlah memori yang akan dihasilkan oleh program saya, atau debugger mengalikan penggunaan memori dengan faktor yang melebihi memori yang tersedia.
Setiap kali saya memulai proses yang haus akan memori, inilah yang saya harapkan dari sistem operasi yang waras: cobalah untuk memakan semua memori bebas, kemudian tanyakan beberapa proses non-esensial lainnya dengan baik untuk memberikan sebagian memori yang tidak mereka butuhkan, kemudian menulis untuk bertukar.
Inilah yang Ubuntu lakukan untuk saya: makan semua memori bebas, lalu minta sistem operasi untuk menukar semua layanan penting (sesi gnome, terminal, keyboard), lalu bekukan dan tunggu saya untuk menarik steker listrik.
Dua pertanyaan:
- Bagaimana sistem operasi dapat berasumsi, bahwa apa pun bisa menjadi sangat penting sehingga tidak masalah untuk berhenti mendengarkan input pengguna?
- Bagaimana saya bisa memberitahu Ubuntu untuk tidak pernah menukar layanan penting dan selalu bereaksi terhadap input pengguna, bahkan jika beberapa proses bodoh mencoba memakan lebih banyak sumber daya daripada yang disediakan sistem.
swapon
untuk mengetahuinya)? Cheers, Alswappiness
pengaturan menjadi 10, yaitu:vm.swappiness = 10
di /etc/sysctl.conf. Cari di sini untuk swappiness untuk info lebih lanjut tentang itu. 2) Jika swappiness tidak membantu ... Meskipun Anda mungkin tidak ingin ... meningkatkan ukuran swapfile Anda menjadi 1,5x16G dan lihat apakah itu membantu. Selalu kabari saya. Cheers, Alvm.swappiness=10
perlu TAMBAH untuk sysctl.conf. Orang yang berpengalaman bahkan dapat menggunakan perintah sysctl dengan cepat, untuk mengatur vm.swappiness = 10, tanpa mengedit file sysctl.conf. Cheers, Al ps: menunggu OP untuk merespons.Jawaban:
Saya masih belum memiliki solusi untuk masalah ini, tetapi saya dapat menawarkan dua solusi yang mungkin menarik bagi orang lain:
1) dini hari
Itu adalah layanan yang mengawasi penggunaan memori dan membunuh proses yang menghabiskan sebagian besar memori ketika ambang tertentu tercapai (lihat juga ini dan pertanyaan ini mengenai pembunuh OOM di kernel linux)
Saya sudah mengujinya dengan proses demo yang tanpa batas meminta memori dalam potongan kecil. Inilah kesan pertama saya: Ketika saya memulai proses nakal, itu dengan cepat memakan semua RAM saya. Kemudian swapping dimulai, sistem menjadi tidak responsif. Beberapa detik kemudian sistem kembali online. Log awal menunjukkan bahwa ia membunuh proses makan memori setelah penggunaan memori dan swap mencapai 90%.
Masih ada jeda yang menyebalkan ketika swapping dimulai dan setelah proses itu dimatikan, beberapa bagian dari proses lain biasanya tetap bertukar sampai diminta, tetapi ini baru permulaan.
2) cukup nonaktifkan swap
Saya tahu ini adalah topik yang kontroversial , tetapi untuk tujuan sistem desktop dan terutama mesin pengembangan di mana hal itu dapat terjadi dari waktu ke waktu bahwa suatu proses mencoba memakan semua memori Anda, masuk akal: Tanpa bertukar, pembunuh OOM hanya berfungsi sebagaimana dimaksud. Ketika Anda kehabisan memori, ia menemukan proses terbaik untuk membunuh dan menghilangkannya. Tidak ketinggalan, tidak ada penundaan.
Anda dapat menonaktifkan swap untuk sesi saat ini dengan
sudo swapoff -a
atau membuat perubahan permanen .Solusi yang tepat untuk masalah tentu saja adalah bahwa sistem tetap responsif ketika memori utama habis dan mulai bertukar memori seperti tidak ada hari esok, tetapi itu tampaknya tidak akan terjadi dalam waktu dekat.
sumber
Coba satu dari dua hal:
1) ubah pengaturan swappiness dari pengaturan default 60, menjadi 10, yaitu: tambahkan vm.swappiness = 10 ke /etc/sysctl.conf (dalam terminal, ketik
sudo gedit /etc/sysctl.conf
), kemudian reboot sistem. Cari di sini untuk swappiness untuk info lebih lanjut tentang itu.2) Jika swappiness tidak membantu ... walaupun Anda mungkin tidak ingin ... meningkatkan ukuran swapfile Anda menjadi 1,5x16G dan lihat apakah itu membantu.
Selalu kabari saya. Ceria, Al
sumber
top
Untuk membunuh babi memori). Setelah sekitar satu menit, prosesnya terbunuh. Tidak sempurna, tapi kami semakin dekat.Saya memecahkan masalah yang sama. Saya tidak tahu apakah pengalaman saya mungkin cocok untuk Anda ...
Baru-baru ini saya telah menerbitkan panduan tentang cara menginstal linux pada perangkat LVM loopback booting dari USB (jadi tanpa harus menginstal grub pada disk internal, meninggalkannya seperti aslinya). Ini panduannya: https://github.com/DareDevil73/linux-on-loopback-usb .
Kemudian saya jatuh dalam masalah pembekuan pada beban memori yang tinggi dan saya mengamati penggunaan ruang swap abnormal (semua RAM dimakan, dan swap penggunaan mendekati nol). Jelas partisi swap LVM sudah terpasang dan berfungsi dengan baik, tapi saya tidak tahu mengapa kernel tidak menggunakannya seperti yang diharapkan.
Saya mencoba solusi alternatif. Saya telah membuat file loopback swap (bukan LVM) dan pembekuannya hilang. Sekarang file swap digunakan sebagaimana mestinya, dan OS tidak pernah membeku!
Silakan lihat https://github.com/DareDevil73/linux-on-loopback-usb#known-issues untuk mendapatkan informasi yang lebih dalam.
sumber