Dlaczego Finder działa z tak niskim priorytetem procesu?


13

Trochę mi to grozi.
Korzystam z dużego importu apertury, co powoduje spowolnienie mojego systemu do pełnego przeszukiwania, co w zasadzie czyni go bezużytecznym do czegokolwiek, nawet do przeglądania sieci. Ponieważ wydaje się to trochę nienaturalne, spędziłem trochę czasu na rozglądaniu się.

Uruchamianie ps -Alpokazuje, że widocznie domyślnie Dock, Finderi SystemUIServerwszystkie wydają się pracować z priorytetem znacznie obniżyć aplikacji następnie przestrzeni użytkownika. Podczas gdy aplikacje użytkownika mają zwykle priorytet 33, Dock, Finder itp. Mają priorytet 53.

Efektem końcowym jest ŻADNE zadanie intensywnie wykorzystujące procesor całkowicie blokujące interfejs użytkownika i uniemożliwiające korzystanie z systemu do momentu jego zakończenia.

W każdym razie użycie renice -20 -p <prid>ich powoduje podniesienie ich do tego samego priorytetu, co w pozostałej części interfejsu użytkownika, i powoduje, że nie trzeba czekać 1-3 sekund (!), Aby interfejs zareagował na coś tak prostego, jak kliknięcie myszą.

Thad powiedział: mam dwa pytania:
Czy jest jakiś powód, dla którego nie powinienem zmieniać priorytetu wątku wyszukiwarki w ten sposób?
Czy jest jakiś sposób, aby zmiana priorytetu była trwała, np. Aby pozostała w ten sposób po ponownym uruchomieniu?


9
Zwykle stwierdziłem, że to dysk we / wy, a nie obciążenie procesora, powoduje, że mój system indeksuje się. Finder i inne aplikacje, o których wspomniałeś, prawdopodobnie czekają na odczyt / zapis, kiedy wydają się nie odpowiadać. Jednak tak naprawdę nie mam na to rozwiązania (oprócz szybkiego dysku takiego jak dysk SSD), więc opublikuję to jako komentarz zamiast odpowiedzi.
Kyle Cronin

5
Też tak myślałam. Jednakże, zmiana priorytetu wątku nie wpływa na zachowanie interfejsu użytkownika, który sprawia, że myślę, że albo priorytet wątku wpływa również IO obsługi kolejki, albo jest rzeczywiście CPU ograniczone.
Fałszywe imię

1
Na przykład, gdy priorytet doku pozostaje jako zapas, reakcja na przesunięcie myszy nad nim zajmuje 5-10 sekund. Po ręcznym zwiększeniu do tego samego 33, co wszystko inne, reaguje natychmiast (choć jest trochę niepewności).
Fałszywe imię

3
Aktualizacja: ładne polecenie wpływa zarówno na obsługę kolejki CPU, jak i we / wy: insanelymac.com/forum/lofiversion/index.php/t164156.html
Fałszywa nazwa

2
Problemem nie jest ograniczenie pamięci / miejsca na dysku. Prowadzę procesy, które celowo zabierają wszystkie zasoby, jakie mogą. Właściwy harmonogram zadań wielozadaniowych powinien pozwolić systemowi pozostać w pełni responsywnym (lub przynajmniej spowodować niewielki spadek wydajności) pomimo tego, pod warunkiem, że priorytetyzacja jest ustawiona poprawnie. Jednak z jakiegoś szalonego powodu najważniejszy aspekt interfejsu użytkownika ma najniższy możliwy priorytet, a zatem cały system zasadniczo nie nadaje się do użytku.
Fałszywe imię

Odpowiedzi:


1

Nie jestem pewien, czy ktokolwiek poza własnymi programistami Apple byłby w stanie odpowiedzieć na to pytanie, wewnętrzne tajemnice Findera są ich domeną. Jeśli uważasz, że występują pewne zauważalne problemy z opóźnieniem w interfejsie użytkownika, możesz przesłać do Apple raport o błędzie.

Sądząc po dźwiękach rzeczy (procesy celowo zajmują wszystkie zasoby), jest to pewien wyjątkowy przypadek zarządzania pamięcią. Nie widziałem jeszcze, aby system działał najlepiej bez około 10-20% wolnych zasobów, jako pomoc w buforowaniu.

Po prostu ciekawi, jakie te procesy używasz?


Python przede wszystkim. Wykonywanie ciężkich obliczeń rekurencyjnych.
Fałszywe imię

Ponadto przetwarzanie obrazów wsadowych
Fake Name

To brzmi bardziej jak problem z użyciem pamięci RAM niż problem z procesorem. Miałem coś takiego jak użycie gita procesora bez opóźnień w interfejsie użytkownika, ale kiedy coś zaczyna pochłaniać całą pamięć RAM, interfejs użytkownika ma duży hit. Jakie jest zużycie pamięci RAM podczas tych procesów?
Tim

1

„Korzystam z dużego importu z aperturą, co powoduje spowolnienie mojego systemu do pełnego przeszukiwania”

Aperture to (prawdopodobnie) program, który chcesz renice, a nie inne. Wspomniane procesy są dostosowane w stosunku do przeciętnych aplikacji użytkownika, dzięki czemu aplikacje użytkownika mają wyższy priorytet i pozostają responsywne, ponieważ są one najczęściej używane przez użytkowników.

Twój przypadek jest rzadszy, gdy aplikacja wykonuje długoterminowe, intensywne zadanie, a użytkownik chce zrobić coś innego w tym samym czasie. Domyślnie priorytetem są aplikacje użytkownika, dzięki czemu te intensywne zadania otrzymują więcej zasobów i kończą się wcześniej.

Na każdego użytkownika, który skarży się, że inne aplikacje nie reagują wystarczająco szybko, inny użytkownik skarży się, że aktywna aplikacja nie działa wystarczająco szybko.

Jeśli wykonujesz długie i wymagające dużo zasobów zadanie i wiesz, że chcesz, aby miał niższy priorytet, abyś mógł korzystać z innych procesów podczas wykonywania zadania - i nie przeszkadza ci to, jeśli intensywne zadanie trwa dłużej - powinieneś obniżyć priorytet proces prowadzący intensywne zadanie.

Jeśli chodzi o twoje drugie pytanie, istnieje kilka możliwych rozwiązań, aby uczynić je renicebardziej automatycznymi. Na przykład, możesz utworzyć aplet skryptu, który uruchamia Aperture z niższym priorytetem i użyć go do uruchomienia Aperture. Lub możesz uruchomić Aperture za pomocą skryptu powłoki przechowywanego w pliku * .command (jednak to otworzy Terminal i uruchomi polecenie w oknie terminala, co może nie być tym, czego chcesz). Każdy z nich jest trochę zaangażowany. Jeśli chcesz przykłady, mogę zobaczyć o ich dostarczeniu później.


Zadania w tle z definicji powinny mieć niższy priorytet niż zadania na pierwszym planie. Najważniejszym zadaniem nowej wiedzy w całym systemie jest GUI, który jest w dużej mierze procesem Finder. Mogę być w stanie łatać wątki na zasadzie proces po procesie przez renicerzeczy, ale faktyczny problem jest priorytetem wyszukiwarki.
Fałszywe imię

Na przykład w systemie Windows 7, który ma jeden z najbardziej responsywnych interfejsów graficznych, Menedżer okien automatycznie uruchamia się z priorytetem „Wysoki”. Oznacza to, że złe zachowanie się tego procesu spowoduje opóźnienie w systemie, ale oznacza to również, że złe zachowanie w innym miejscu nie będzie . Miałem awarię aplikacji polegającą na wykorzystaniu 100% każdego rdzenia procesora, a interfejs użytkownika w systemie Windows nadal pozostaje wyjątkowo responsywny.
Fałszywe imię

1
@ Nazwa fałszywa: Finder nie obsługuje żadnego aspektu interfejsu użytkownika oprócz własnych okien (folderów i ikon na pulpicie). (Możliwe jest wyjście z Findera; faktycznie zniknęło, a wszystko inne nadal działa.) SystemUIServer obsługuje tylko elementy paska menu po prawej stronie i nakładki „bezel” (głośność / jasność itp.). Renderowanie okien i zdarzenia są obsługiwane w całości przez procesy WindowServer.
Kevin Reid,

@ Nazwa fałszywa, dla wyjaśnienia: renicedziała na procesach, a nie na wątkach.
Chris Page

1

Postawiłem podobne pytanie - dawno temu, na ServerFault - choć nie tak bardzo koncentrowałem się na Finderze (chociaż uważam, że Finder jest również niedopuszczalnie wolny). Jak trwale „przywrócić” proces na Mac OS X (lub iOS itp.)? Nie zebrano tam wielu informacji - co do dobrego sposobu na zrobienie tego… lub dlaczego tak jest…

Nadal często o tym myślę, a tak naprawdę istnieje kilka sposobów na zastanowienie się nad „podstawami”, jeśli się odważysz. Jak wcześniej wspomniano, możesz robić różne skorupki powłoki, ale dobrym miejscem na takie błędy są różne /etc/rc*procedury rozruchowe ... które już tam są ... ustawianie dla ciebie różnych arbitralnych (zdefiniowanych przez Apple) parametrów systemowych. edytuj je lub sprawdź, jak dodać własne procedury do procesu rozruchu.

jeśli naprawdę chcesz sprawić, by głowa eksplodowała ...

sudo sysctl list i to jest klucz do puszki Pandory, alias /etc/sysctl.conf

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.