Z tego co rozumiem, kiedy system jest blisko i nie ma wolnej pamięci, jądro powinno zacząć zabijać procesy, aby odzyskać trochę pamięci. Ale w moim systemie tak się wcale nie dzieje.
Załóżmy, że prosty skrypt, który po prostu przydziela znacznie więcej pamięci niż dostępna w systemie (na przykład tablica zawierająca miliony ciągów znaków). Jeśli uruchomię taki skrypt (jako zwykły użytkownik), po prostu pobierze całą pamięć, aż system całkowicie się zawiesi (działa tylko SysRQ REISUB).
Dziwne jest to, że gdy komputer zawiesza się, dioda dysku twardego włącza się i pozostaje tak do momentu ponownego uruchomienia komputera, czy mam zamontowaną partycję wymiany, czy nie!
Więc moje pytania to:
- Czy to zachowanie jest normalne? Dziwne, że aplikacja wykonana jako zwykły użytkownik może po prostu zawiesić system w ten sposób ...
- Czy jest jakiś sposób, aby zmusić Ubuntu do automatycznego zabijania tych aplikacji, gdy mają za dużo (lub najwięcej) pamięci?
Dodatkowe informacje
- Ubuntu 12.04.3
- Jądro 3.5.0-44
RAM: ~ 3,7 GB z 4 GB (współdzielone z kartą graficzną). *
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
). Ale bez zamiany po prostu zawiesza komputer. Ma to działać w ten sposób (zabijać tylko przy użyciu wymiany)?
tail -n+1 /proc/sys/vm/overcommit_*
i dodaj wynik. Zobacz także tutaj: Jak skonfigurować oom-