Saya memiliki masalah dengan proses yang membocorkan memori. Mereka menyebabkan hard drive saya diisi dengan file swap /private/var/vm
.
Saya ingin proses bocor untuk dibunuh saat dilihat oleh OS . Saya tidak tertarik dengan dialog yang muncul setelah 20 menit, menyarankan aplikasi untuk dimatikan, dan bahkan tidak menunjukkan yang bocor.
Saya telah mencoba mengatur rss
dan data
membatasi /etc/launchd.conf
tetapi tampaknya tidak berpengaruh.
Ini milik saya /etc/launchd.conf
:
limit data 8589934592 8589934592
limit rss 8589934592 8589934592
Berikut launchctl limit
hasilnya:
% launchctl limit
cpu unlimited unlimited
filesize unlimited unlimited
data 8589934592 8589934592
stack 8388608 67104768
core 0 unlimited
rss 8589934592 8589934592
memlock unlimited unlimited
maxproc 709 1064
maxfiles 256 unlimited
Ini milik saya .zshrc
:
ulimit -t 600
ulimit -d 512000
ulimit -v 1024000
Dan ulimit -a
hasilnya (dalam ZSH):
% ulimit -a
-t: cpu time (seconds) 600
-f: file size (blocks) unlimited
-d: data seg size (kbytes) 512000
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kb) 1000
-l: locked-in-memory size (kb) unlimited
-u: processes 709
-n: file descriptors 256
Namun inilah yang top
memberitahu saya tentang prosesnya:
PID COMMAND %CPU TIME #TH #WQ #POR #MRE RPRVT RSHRD RSIZE VPRVT VSIZE PGRP PPID
886 process 30.8 01:16.40 1/1 0 17 332 2259M+ 184K 2072M- 19G+ 38G 882 885
Sepertinya tidak ada satu pun metode batasan memori yang didokumentasikan yang benar-benar berfungsi. Apakah ada mekanisme tambahan yang mungkin saya lewatkan?
Jawaban:
Saya akan membuat skrip sederhana yang akan memfilter proses setiap proses dengan ukuran memori resident (atau mungkin total ukuran vm, jadi termasuk halaman paged out) lebih besar dari ambang yang saya tentukan (tergantung pada jumlah proses, total memori yang tersedia dan mungkin juga ketersediaan CPU). Seseorang dapat menggunakan sedikit skrip bash dengan salah satu
top
ataups
untuk menggali daftar proses dan ukuran memori.Dari daftar yang difilter ini, saya akan menggunakan
leaks
perintah (lihat man 1 kebocoran ) per proses PID. Jika jumlah total memori yang bocor yang dilaporkan oleh perintah lebih tinggi daripada ambang lainnya, saya kemudian akan membunuh dan respawn.CATATAN : Anda harus berhati-hati untuk tidak membunuh proses OS / Sistem tanpa mengetahui apa yang Anda lakukan. Untuk menghindari situasi ini, Anda mungkin harus menyaring daftar menggunakan pendekatan "daftar putih".
sumber
ulimit pada sebagian besar platform tidak berfungsi seperti yang diharapkan.
Jika ini bukan aplikasi desktop, jalankan pelaku dengan pengawas proses yang tepat seperti https://github.com/arya/bluepill
Jika ini adalah aplikasi desktop, hubungi pengembang aplikasi. Umpan balik diperlukan dan penting.
UX pada GUI pembunuh OOM untuk Mac mengerikan. Itu harus diurutkan terbesar menurun dengan grafik batang proporsional untuk penggunaan ram masing-masing proses. Selain itu, ini harus secara otomatis SIGCONT semua proses yang dijeda ketika diselesaikan.
sumber
llvm-g++
. Masalahnya dilaporkan di Radar. Saya ingin tahu: platform apa yang tidak berfungsiulimit
? Saya telah menggunakan beberapa rasa Unix selama hampir 20 tahun dan saya tidak ingat melihatnya.Jika Anda membutuhkan ini di reboot, Anda harus menggunakan hanya
launchctl limit
perintah.Jika Anda perlu membatasi memori aplikasi, Anda juga harus membatasi segmen tumpukan.
sumber
launchctl limit
tidak tidak bekerja.ulimit
Anda menggunakan benar - benar tidak berfungsi seperti yang Anda butuhkan.launchctl limit
tidak.launchctl limit
tidak tidak bekerja, atau aku tidak akan mengajukan pertanyaan.