GNU/Linux >> Belajar Linux >  >> Linux

Tombol "bunuh Proses Terbesar"?

Laptop ini memiliki SSD dan oleh karena itu saya memutuskan untuk menghilangkan swap. Ini bekerja dengan baik dalam banyak kasus, tetapi terkadang RAM menjadi sedikit pendek dan komputer menjadi sangat lamban dan cenderung macet. Apakah ada cara untuk menerapkan tombol "bunuh proses terbesar" yang langsung menuju kernel jika saya melihat pembekuan cukup cepat? Atau, karena ini adalah komputer, heuristik ketika mulai membeku dan merekam proses terbesar itu sendiri juga akan baik-baik saja.

Jawaban yang Diterima:

Dari komentar Anda, sepertinya sistem hanya bertukar.

Linux memiliki pembunuh OOM, yang dipanggil ketika sistem telah melakukan overcommit pada memorinya, dan sekarang telah kehabisan memori.
Linux secara default melakukan overcommit memori, yang pada dasarnya berarti memberikan lebih banyak memori kepada program daripada yang sebenarnya dimiliki sistem. Ini dilakukan dengan asumsi bahwa program tidak akan benar-benar menggunakan semua memori yang mereka minta. Namun ketika sistem kehabisan memori, itu sudah memberi tahu berbagai proses yang berjalan bahwa mereka memiliki memori, jadi itu tidak bisa menyangkalnya lagi. Alih-alih yang dilakukannya adalah memanggil pembunuh OOM. Pembunuh OOM pada dasarnya menemukan proses yang menurut kernel akan meringankan kondisi kehabisan memori. Biasanya ini hanya proses yang menggunakan memori paling banyak, tetapi algoritme sebenarnya jauh lebih kompleks dari itu.

Karena Anda memiliki overcommit_memory setel ke (mode otomatis), kernel melakukan overcommit memori. Jadi dari perilaku Anda yang dijelaskan, sepertinya sistem hanya bertukar banyak.

Dari sini ada 2 pilihan.

Kurangi pertukaran

Sistem Anda kehabisan RAM, sehingga kernel mulai memasukkan semuanya ke dalam swap. Jika sistem Anda kehabisan swap, maka sistem akan memanggil pembunuh OOM. Namun karena Anda memiliki sisa ruang swap, hal ini tidak terjadi.

Ide orisinal Anda, matikan proses secara manual.

Anda dapat mematikan proses secara manual ketika Anda merasa sistem terlalu banyak bertukar dan sesuatu harus mati. Ini dapat dilakukan melalui pemicu kernel SysRq.

Kernel memiliki apa yang disebutnya "ajaib SysRq". Ini adalah sedikit fungsi yang memberitahu kernel untuk melakukan semacam operasi darurat. Ini bisa berupa hal-hal seperti "remount all volume read-only", "sync all filesystems", atau "reboot now". Salah satu opsi ini juga untuk memanggil pembunuh OOM.

Terkait:Bagaimana cara melakukan perhitungan integer &float, dalam bash atau bahasa/kerangka kerja lain?

Jika kernel Anda mengaktifkan SysRq ajaib (opsi kernel CONFIG_MAGIC_SYSRQ ), Anda dapat melakukannya dengan 2 cara.

  1. Alt + SysRq + f
    Cukup tekan 3 tombol ini di keyboard.
  2. echo f > /proc/sysrq-trigger
    Ini akan melakukan tugas yang sama persis seperti metode keyboard, tetapi melakukannya secara terprogram.

Anda juga dapat menonaktifkan swap sepenuhnya, dan inilah yang saya lakukan di sebagian besar sistem saya, dan untuk alasan yang tepat ini. Swap bermanfaat karena kernel akan terlebih dahulu menukar data yang tidak digunakan, membiarkan lebih banyak ram Anda digunakan untuk caching. Tapi ini mengarah ke masalah pertukaran paksa yang Anda lihat.

Saya pribadi berpikir solusi terbaik adalah semacam opsi kernel untuk memanggil pembunuh OOM pada pertukaran paksa. Pada dasarnya biarkan swap preemptive bekerja, tetapi jika kernel terpaksa memindahkan sesuatu ke dalam swap karena Anda kehabisan RAM, maka aktifkan OOM killer.
Sayangnya ini hanya keinginan pribadi saya. Itu tidak melakukan ini.


Linux
  1. Mengapa Kernel Menjatuhkan Paket?

  2. Linux – Berpartisipasi Di Milis Kernel?

  3. Linux – Mengapa Kernel Tidak Dapat Menjalankan Init?

  1. Pertanyaan wawancara Linux pamungkas:swap

  2. Apa sumber kernel Linux saat ini?

  3. Bagaimana cara memeriksa HZ di terminal?

  1. Analisis kernel Linux dengan ftrace

  2. Kernel Linux:5 inovasi teratas

  3. Seberapa besar seharusnya partisi swap?