なぜFinderはそれほど低いプロセス優先度で実行されるのですか?


13

私はこれについて少し迷っています。
開口部で大きなインポートを実行しているため、システムが完全なクロールにスローダウンし、基本的には何も使用できなくなり、Webを閲覧することもできます。これは少し不自然に思えるので、少し時間をかけて見回しました。

実行ps -Al、どうやらデフォルトでは、というショーをDockFinderと、SystemUIServerすべてがはるかに低い、次に優先度でユーザランドのアプリケーションを実行するように見えます。ユーザーアプリケーションの優先度は通常33ですが、Dock、Finderなどの優先度は53です。

最終的には、プロセッサを集中的に使用するタスクがUIを完全に破壊し、完了するまでシステムを使用できなくします。

とにかく、使用renice -20 -p <prid>すると、ユーザーランドUIの残りの部分と同じ優先度に上げられ、マウスクリックのような簡単な操作にUIが応答するまで1〜3秒待つ必要がなくなります(!)。

サッドは、2つの質問
があります。ファインダーのスレッド優先度をこのように変更してはいけない理由はありますか?
優先順位の変更を永続的にする方法はありますか。たとえば、再起動後もそのままです。


9
通常、システムがクロールするのは、CPU負荷ではなくディスクI / Oであることがわかりました。あなたが言及したFinderや他のアプリケーションは、おそらく応答していないように見えるときに読み取り/書き込みを待っています。(SSDのような高速ディスクを取得する以外に)これに対する解決策は実際にはありませんので、回答ではなくコメントとしてこれを投稿します。
カイルクローニン

5
私もそう思っていたでしょう。しかし、スレッドの優先度を変更することはない私は、スレッドの優先度のいずれかにもIOキューの処理に影響を及ぼし、またはそれは確かに限らCPUであることを思わせるUIの挙動に影響を与えます。
偽の名前

1
例として、ドックの優先順位をストックのままにしておくと、マウスがその上を移動したことに反応するのに5〜10秒かかります。手動で他のすべてと同じ33にバンプすると、すぐに反応します(ただし、少し途切れがあります)。
偽の名前

3
アップデート:niceコマンドは、CPUの両方に影響し、 IOキューの取り扱い:insanelymac.com/forum/lofiversion/index.php/t164156.html
偽の名前

2
問題はメモリ/ディスク容量の制限ではありません。可能な限りすべてのリソースを意図的に使用するプロセスを実行しています。適切なmutitaskingスケジューラは、システムが(わずかなパフォーマンスヒット原因か、少なくとも)完全に反応するままにさせてくださいにもかかわらず、優先順位付けがセット右で提供する、これ。ただし、何らかの異常な理由により、UIの最も重要な側面が可能な限り低い優先度に設定されているため、システム全体が基本的に使用できなくなります。
偽の名前

回答:


1

Apple自身の開発者以外の誰かがこの質問に答えることができるかどうかはわかりませんが、Finderの内部の秘密は彼らの領域です。UIに顕著なラグの問題があると思われる場合は、バグ報告をAppleに提出してください。

物音(すべてのリソースを意図的に占有するプロセス)から判断すると、これはメモリ管理のエッジケースです。バッファリングの補助として、10から20%程度のリソースを解放することなく、システムが最高のパフォーマンスを発揮するのをまだ見ていません。

好奇心が強い、あなたが実行しているこれらのプロセスは何ですか?


主にPython。重い再帰的な計算を実行します。
偽の名前

また、バッチ画像処理
偽名

CPUの問題というよりもRAMの使用の問題のように聞こえます。UIを遅らせることなくgitが大量のCPUを使用するようなものがありましたが、何かがすべてのRAMを使い果たしてしまうと、UIが大ヒットします。これらのプロセス中のRAM使用量はどのくらいですか?
ティム

1

「開口部で大きなインポートを実行しているため、システムが完全にクロールするまで遅くなります」

その場合、Apertureは(おそらく)あなたがしたいプログラムreniceであり、他のプログラムではありません。あなたが言及したプロセスは、平均的なユーザーアプリケーションに合わせて調整されているため、ユーザーアプリケーションはほとんどの場合に使用されるため、ユーザーアプリケーションの優先度が高くなり、応答性が維持されます。

あなたのケースはあまり一般的ではありません。アプリケーションが長期の集中的なタスクを実行していて、ユーザーが同時に何か他のことをしたい場合です。デフォルトでは、これらの集中的なタスクがより多くのリソースを取得してより早く完了するように、ユーザーのアプリケーションが優先されます。

他のアプリケーションが十分に応答していないと不満を言うすべてのユーザーに対して、アクティブなアプリケーションが十分に速く動作していないと不満を言う別のユーザーがいます。

長時間のリソース集中型タスクを実行していて、タスクの完了中に他のプロセスを使用できるように優先度を低くしたい場合-集中タスクの時間が長くてもかまわない場合は、優先度を下げる必要があります集中タスクを実行するプロセス。

2番目の質問については、reniceより自動化するための解決策がいくつかあります。たとえば、Apertureを低い優先度で実行するスクリプトアプレットを作成し、それを使用してApertureを起動できます。または、*。commandファイルに保存されているシェルスクリプトを使用してApertureを起動することもできます(ただし、ターミナルを開き、ターミナルウィンドウでコマンドを実行しますが、これは望ましくない場合があります)。これらはそれぞれ少し複雑です。サンプルが必要な場合は、後で提供する方法を確認できます。


定義上、バックグラウンドタスクは、フォアグラウンドタスクよりも低い優先度である必要があります。最も重要なフォアグラウンドタスクシステム全体では、主にFinderのプロセスであるGUI、です。プロセスごとにスレッドをパッチすることができるかもしれませんreniceが、実際の問題はファインダーの優先度です。
偽の名前

たとえば、Windows 7では、最も応答性の高いGUIの1つがあり、Window-Managerは自動的に優先度「高」で実行されます。現在、これは、このプロセスの誤動作がシステムの遅延を引き起こすことを意味しますが、他の場所での誤動作はそうではないことも意味します。すべてのCPUコアを100%使用するとアプリケーションがクラッシュしましたが、WindowsのUIは依然として非常に応答性に優れています。
偽の名前

1
@Fake Name:Finderは、独自のウィンドウ(フォルダおよびデスクトップアイコン)以外のUIの側面を処理しませ。(Finderを終了することは可能ですが、実際にはなくなっていますが、それ以外はすべて機能します。)SystemUIServerは、メニューバーの右側の項目と「ベゼル」オーバーレイ(ボリューム/輝度など)のみを処理します。ウィンドウのレンダリングとイベントは、WindowServerプロセスによって完全に処理されます。
ケビンリード

明確化のポイントとしての@Fake Name:reniceスレッドではなくプロセスを操作します。
クリスページ

1

私は同じような質問を-ずっと前にServerFaultで-Finderに特に焦点を合わせていませんでした(しかしFinderも耐えられないほど遅いと思いますが)。 Mac OS X(またはiOSなど)でプロセスを永続的に「拒否」する方法は? そこにはあまり情報が収集されていませんでした-これを行う良い方法に関して...またはそれがなぜそうなのかについて....

私は今でもこれについて頻繁に考えていますが、実際に「基本」にこだわる方法はいくつかあります。前述のように、さまざまなシェルチカネリー/etc/rc*を実行できます。それらを編集するか、ブートプロセスに独自のルーチンを追加する方法を調べてください。

また、本当に頭を爆発させたい場合は..

sudo sysctl list そして、それはパンドラの箱、別名 /etc/sysctl.conf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.