Czy można uniemożliwić macOS wstrzymanie aplikacji, gdy zabraknie pamięci aplikacji?

1

Czasami uruchamiam projekty obliczeń rozproszonych w Menedżerze BOINC, gdy mój iMac jest bezczynny. Często pojawia się okno dialogowe Force Quit z komunikatem „Twój system wyczerpał pamięć aplikacji”. Gdy tak się stanie, wszystkie otwarte aplikacje z wyjątkiem Findera są wstrzymywane i muszą być ręcznie ponownie uruchamiane, jeden po drugim, z okna dialogowego.

ja mógłby zmniejszyć ilość pamięci RAM, z której może korzystać BOINC Manager, ale wolę przeznaczyć jak najwięcej pamięci RAM na projekty BOINC. Jak mogę zapobiec zawieszaniu przez system MacOS BOINC (lub dowolnej innej aplikacji lub aplikacji), gdy w systemie zabraknie pamięci RAM?

Aktualizacja : wydaje się, że problem został rozwiązany przez niedawną aktualizację BOINC.

Richard Brockbank
źródło
1
Z pamięcią wirtualną - czy program nie jest winny złego zarządzania pamięcią, a nie systemu operacyjnego? Kiedy zobaczysz ten alert - co pokazuje Monitor aktywności dla presji pamięci? (zielony / żółty / czerwony - lub lepiej przechwycenie okna szczegółów pamięci byłoby pomocne, aby uzyskać więcej porad).
bmike

Odpowiedzi:

1

Prawdopodobnie nie chcesz uniknąć zawieszania aplikacji przez system MacOS, gdy systemowi zabraknie pamięci RAM, gdy wiesz, że jedyną alternatywą jest zabicie programu. To znaczy. przestań uruchamiać program teraz i tutaj bez zapisywania danych lub czegoś podobnego.

Jednak nie musisz ponownie uruchamiać programów, które są wstrzymane, jak w „zamknij program i uruchom go”. Zamiast tego możesz w rzeczywistości zwolnić program, gdy masz wystarczającą ilość wolnej pamięci w systemie. Możesz to zrobić z terminala, uruchamiając:

kill -CONT <pid>

gdzie należy zastąpić identyfikatorem procesu, który chcesz usunąć.

Identyfikator procesu można znaleźć za pomocą Monitora aktywności lub polecenia „ps” w Terminalu (w tym przypadku należy poszukać procesów ze statusem T, ponieważ są to wstrzymane / zatrzymane).

Łatwym sposobem na odblokowanie i znalezienie identyfikatora za jednym razem jest:

kill -CONT `pgrep myprogram`

gdzie mójprogram jest nazwą programu, który chcesz usunąć.

Druga część pytania, w której opisujesz idealny scenariusz, jest bardzo trudna do zrealizowania za pomocą standardowego programu. Zasadniczo programy mogą żądać pamięci z systemu operacyjnego, ale system operacyjny nie może go później zażądać. Jest to możliwe, ale wymaga bardzo specjalistycznych programów, co zazwyczaj nie ma miejsca.

Oznacza to, że gdy MacOS przyzna programowi, na przykład 1 GB pamięci RAM, system operacyjny nie może go odzyskać, gdy inne programy chcą więcej pamięci. Jeśli usuniesz pamięć z programów, które nie są specjalnie spreparowane, aby to umożliwić, będą skutecznie ulegać awarii, gdy tylko spróbują użyć utraconej pamięci.

jksoegaard
źródło