Mac OS X Mavericks zawiesza się, przestaje odpowiadać, gdy kończy się pamięć

9

Zdarza się to co drugi dzień, a objawy są co najmniej dziwne. Komputer nadal reaguje w pewnym sensie; Mogę poruszać myszą, działają przyciski głośności na słuchawkach. Klawiatura nic nie robi, podobnie jak klikanie. Nie są prezentowane żadne stany aktywowania. To tak, jakby kursor myszy tak naprawdę nie był poruszany.

Mogę korzystać z komputera, jeśli loguję się z innego komputera za pomocą SSH lub za pomocą pilota z mojego telefonu (używam Rowmote.) Jest to jednak bardzo wolne - ale odpowiada.

W tym stanie mogę zrobić bardzo niewiele rzeczy. Uruchamianie nowych aplikacji to ruletka, na przykład mogłem uruchomić Monitor aktywności (nic dziwnego, co widać), ale uruchomienie konsoli po tym nie było możliwe. Zamykanie aplikacji dawało dziwne wyniki, aż w końcu przestało reagować również na pilota. Co ciekawe, zdalna aplikacja nie myślała, że ​​straciła połączenie, więc jakoś nadal odbierała i potwierdzała polecenia zdalne.

Oto odpowiednie /var/log/system.logdane wyjściowe od momentu, w którym się wydarzyło:

Jan  3 10:39:19 knifen.local WindowServer[119]: CGXCreateShmem : mach_make_memory_entry(268453900: unknown error code) : Cannot map memory
Jan  3 10:39:19 knifen.local WindowServer[119]: _CGXCreateWindowInline: Creation failure 1007
Jan  3 10:39:19 knifen.local Dock[15204]: CGSNewWindowWithOpaqueShape: Cannot create window
Jan  3 10:39:19 knifen.local WindowServer[119]: CGXCreateShmem : mach_make_memory_entry(268453900: unknown error code) : Cannot map memory
Jan  3 10:39:19 knifen.local WindowServer[119]: _CGXCreateWindowInline: Creation failure 1007
Jan  3 10:39:19 knifen.local Dock[15204]: CGSNewWindowWithOpaqueShape: Cannot create window
Jan  3 10:39:28 knifen.local WindowServer[119]: BUG in libdispatch: 13A603 - 2930 - 0x1000480c
Jan  3 10:39:51 knifen kernel[0]: IOHIDSystem: postEvent LLEventQueue overflow.
Jan  3 10:40:50 knifen.local Spotify[13941]: Got disconnected: Error Domain=GCDAsyncSocketErrorDomain Code=4 "Read operation timed out" UserInfo=0xfa075f0 {NSLocalizedDescription=Read operation timed out}
Jan  3 10:40:55 knifen kernel[0]: IOHIDSystem: postEvent LLEventQueue overflow.
Jan  3 10:41:50 knifen.local hidd[95]: IOHIDEventQueue unable to get policy for event of type 11. (e00002e8)
Jan  3 10:41:56 --- last message repeated 113 times ---

Tak naprawdę nie zastanawiam się tutaj, jeśli masz jakieś wskazówki, myślę, że byłoby dobrze. Wydaje się, że to zła inżynieria ze strony Apple.

Lericson
źródło

Odpowiedzi:

4

Gdy system operacyjny jest głodny miejsca na dysku, złe rzeczy zdarzają się z założenia, próbując utrzymać krytyczne części systemu na tyle długo, aby umożliwić kontrolowane zawieszenie i potencjalnie pozwolić aplikacjom ze zmianami, aby zapisać przetrwały do ​​czasu czyszczenia zaczyna się.

Mavericks znacznie rzadziej przydziela pełną ilość pamięci RAM do / var / db / sleepimage, więc ludzie przyzwyczajeni do wstępnego przydzielania tej przestrzeni mogą spotkać niespodzianki, gdy system operacyjny potrzebuje trochę miejsca na powiększenie obrazu snu, jeśli wymagają tego warunki pracy.

Główną wskazówką byłoby zachowanie kilku gigabajtów wolnej przestrzeni na woluminie rozruchowym, gdy masz obciążenie obciążające system pamięci wirtualnej i działające z presją pamięci na czerwono.

Oto moje rekomendacje:

  • Jaką skalę lub miarę stosuje się do „presji pamięci” Mavericks i Yosemite? ma dobre informacje na temat monitorowania i powodowania presji pamięci na polecenie
  • uruchom system, zaloguj jednego użytkownika, zamknij wszystkie aplikacje
  • otwórz monitor aktywności i obserwuj / rejestruj ekran pamięci
  • uśpij maszynę i obudź ją 30 sekund później
  • uruchom sudo du -sm /var/vm/*i zwróć uwagę, jak duży jest twój plik obrazu uśpienia, a także czy na dysku zostały utworzone jakieś pliki wymiany.

Będziesz chciał mieć wystarczająco dużo wolnego miejsca na dysku, aby dopasować się do całkowitego zajętości pamięci, jeśli zamierzasz uruchamiać programy, które przenoszą system pamięci wirtualnej na żółte terytorium w celu zmniejszenia ciśnienia w pamięci. Prawdopodobnie nie będziesz potrzebować całej przestrzeni tylko na system operacyjny, ale zwłaszcza jeśli masz błędy pamięci mach, takie jak na liście, obciążenie, które uruchamiasz, potrzebuje nieco więcej wolnego miejsca, niż pozwalasz.

Ponadto, jeśli uważasz, że dostrajanie systemu jest nieprawidłowe, możesz łatwo zgłosić błąd, uruchamiając sysdiagnosepo czystym rozruchu, jak opisano powyżej, ponownie, gdy system prawidłowo uruchamia zamierzony ładunek, i ostatni sydiagnoseraz, gdy spowodujesz pamięć przydziały, aby rozpocząć łamanie systemu. Możliwe, że istnieją lepsze opcje, które mógł podjąć Apple, ale może to być po prostu usterka / wyciek pamięci, a system się psuje, tak jak zamierzano, gdy wyczerpały się ograniczone zasoby. Bez dalszych szczegółów trudno powiedzieć, co się dzieje.

bmike
źródło
2

„shmem” to pamięć współdzielona, ​​a OS X nie może przydzielić pamięci współdzielonej. Wydaje się zatem, że w komputerze zabrakło pamięci, zarówno pamięci RAM, jak i pamięci dysku twardego. Czy tak jest w przypadku? W momencie zamrożenia wydawało się, że pozostało około 1 GB miejsca.

  • Zwolnij miejsce na dysku, usuwając pliki
  • Zwolnij pamięć, zamykając aplikacje

W tym konkretnym przypadku dzienniki wskazały później, że Spotlight próbował zaindeksować zamontowany wolumin sparsebundle, co spowodowało brak miejsca na dysku kopii zapasowej.

Lericson
źródło