У меня проблемы с процессами с утечкой памяти. Они заставляют мой жесткий диск заполняться файлами подкачки /private/var/vm
.
Я хотел бы, чтобы протекающие процессы были убиты операционной системой . Меня не интересует диалоговое окно, которое появляется через 20 минут, предлагает приложения для уничтожения и даже не показывает то, которое просачивается.
Я попытался установить rss
и data
ограничения в, /etc/launchd.conf
но это, похоже, не оказало эффекта.
Это мое /etc/launchd.conf
:
limit data 8589934592 8589934592
limit rss 8589934592 8589934592
Вот launchctl limit
вывод:
% 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
Это мое .zshrc
:
ulimit -t 600
ulimit -d 512000
ulimit -v 1024000
И ulimit -a
вывод (в ЗШ):
% 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
Но вот что top
говорит мне о процессе:
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
Просто кажется, что ни один из документированных методов ограничения памяти на самом деле не работает. Есть ли дополнительный механизм, который я мог упустить?
Ответы:
Я бы создал простой сценарий, который бы фильтровал процесс любого процесса с резидентным размером памяти (или, возможно, общим размером виртуальной машины, включая все страницы с выгруженными страницами) больше порогового значения, которое я определяю (в зависимости от объема процесса, общего объема доступной памяти и возможно также доступность процессора). Можно использовать немного bash-скрипта с
top
или,ps
чтобы выкопать список процессов и объем памяти.Из этого отфильтрованного списка я бы использовал
leaks
команду (см. Man 1 leaks ) для PID процесса. Если общий объем утечки памяти, о которой сообщает команда, выше, чем еще один порог, я бы затем убил и возродил его.ПРИМЕЧАНИЕ . Вам следует позаботиться о том, чтобы не завершать процессы ОС / системы, не зная, что вы делаете. Чтобы избежать этой ситуации, вам, возможно, следует отфильтровать список, используя подход «белого списка».
источник
ulimit на большинстве платформ работает не так, как ожидалось.
Если это не настольное приложение, запустите нарушителя с соответствующим руководителем процесса, таким как https://github.com/arya/bluepill
Если это настольное приложение, свяжитесь с разработчиками приложения. Обратная связь необходима и важна.
UX в графическом интерфейсе OOM killer для Mac ужасен. Это должно быть наибольшее отсортированное по убыванию пропорциональное гистограмму для использования оперативной памяти каждого процесса. Кроме того, он должен автоматически SIGCONT все приостановленные процессы при разрешении.
источник
llvm-g++
. О проблеме сообщили в радаре. Мне любопытно: какая еще платформа имеет нерабочуюulimit
? Я использую несколько разновидностей Unix в течение почти 20 лет, и я не помню, чтобы увидеть один.Если вам это нужно при перезагрузке, вы должны использовать только
launchctl limit
команду.Если вам нужно ограничить память приложения, вы также должны ограничить сегмент стека.
источник
launchctl limit
что не работает.ulimit
вы используете действительно не работает, как вам нужно.launchctl limit
делает.launchctl limit
это не работает, или я бы не задать вопрос.