Finder为什么以如此低的进程优先级运行?


13

我对此有些茫然。
我在光圈上有很大的输入,这导致我的系统减速到完全爬网的状态,基本上使它无法用于任何内容,甚至无法浏览网络。由于这似乎有点不自然,所以我花了一些时间环顾四周。

运行ps -Al表明,显然默认情况下,DockFinder,和SystemUIServer似乎都运行在优先级低得多然后级的应用程序。用户应用程序的优先级通常为33,而Dock,Finder等的优先级为53。

最终结果是,任何处理器密集型任务都会完全破坏UI,并使系统无法使用,直到完成。

无论如何,使用renice -20 -p <prid>它们将与用户界面UI的其余部分的优先级提高到相同的优先级,并且无需等待1-3秒(!)即可使UI响应像鼠标单击之类的简单操作。

Thad说,我有两个问题:
我有什么理由不应该这样改变查找程序的线程优先级吗?
有什么方法可以使优先级更改持久化,例如,以便在重新启动后保持这种状态。


9
我通常发现导致系统爬行的是磁盘I / O,而不是CPU负载。当您发现的Finder和其他应用程序似乎没有响应时,它们可能正在等待读取/写入。我确实没有解决方案(除了获得像SSD这样的快速磁盘之外),所以我将其发布为注释而不是答案。
凯尔·克罗宁

5
我也会这么想的。但是,更改线程优先级确实会影响UI行为,这使我认为线程优先级也会影响IO队列处理,或者实际上是受CPU限制的。
假名称

1
例如,将停放优先级保留为库存,则需要5到10秒才能对鼠标移到其上方做出反应。手动将其升至与其他所有物体相同的33时,它会立即做出反应(尽管有些碎裂)。
假名称

3
更新:不错的命令会影响CPU IO队列处理:insanelymac.com/forum/lofiversion/index.php/t164156.html
虚假名称2010年

2
问题不是内存/磁盘空间限制。我正在运行过程中有意采取一切他们能资源。尽管设置了适当的优先级,但是适当的可变调度程序仍应使系统保持完美的响应(或至少仅造成较小的性能损失)。但是,出于某些疯狂的原因,UI 的最重要方面设置为可能的最低优先级,因此整个系统基本上变得无法使用。
假名称

Answers:


1

我不确定除苹果自己的开发人员以外的任何人都可以回答这个问题,Finder的内在秘密就是他们的领域。如果您确实认为用户界面存在一些明显的滞后问题,则可能需要向Apple提交错误报告。

从事物的声音(进程有意占用所有资源)来看,这对于内存管理来说是一个边缘情况。我还没有看到一个系统在没有缓冲10-20%可用资源的情况下达到最佳状态。

只是好奇,什么你正在运行这些程序?


主要是Python。做一些繁重的递归计算。
假名称

另外,批量图像处理
假名称

这听起来更像是RAM使用问题,而不是CPU问题。我有一些事情像git在不落后UI的情况下使用大量CPU,但是当某些东西开始耗尽所有RAM时,UI就会受到重创。在这些过程中,您的RAM使用情况如何?
蒂姆(Tim)2010年

1

“我在光圈上有很大的输入,这导致我的系统减速到完全爬行”

然后,Aperture(可能)是您想要的程序renice,而不是其他程序。您提到的过程是相对于普通用户应用程序进行调整的,因此用户应用程序会获得更高的优先级并保持响应能力,因为它们是用户大部分时间使用的东西。

您的案例很少见,其中应用程序正在执行一项长期的密集任务,而用户希望同时做其他事情。默认情况下,优先权是用户的应用程序,以便这些繁重的任务获得更多资源并更快地完成。

对于每个抱怨其他应用程序的响应速度不够的用户,还有另一个用户抱怨活动应用程序的运行速度不够快。

如果您正在运行耗费大量资源的长时间任务,并且知道您希望它具有较低的优先级,以便在任务完成时可以使用其他进程,并且您不介意此密集型任务是否花费更长的时间,则应降低优先级。运行密集任务的过程。

至于第二个问题,有几种可能的解决方案可以使之renice更加自动化。例如,您可以创建一个以较低优先级运行Aperture的脚本小程序,然后使用该脚本小程序来启动Aperture。或者,您可以通过存储在* .command文件中的shell脚本启动Aperture(但是,这将打开Terminal并在终端窗口中运行命令,而这可能不是您想要的)。这些每个都涉及一点点。如果您想要示例,我可以稍后再提供。


根据定义,后台任务的优先级应比前台任务的优先级低。在最重要的前台任务在整个系统中是GUI,这在很大程度上是搜索过程。我也许可以逐个过程地逐个修补线程renice,但是实际的问题是发现者的优先级。
假名称

例如,在具有最快速响应的GUI之一的Windows 7中,Window-Manager会自动以“高”优先级运行。现在,这意味着此过程的不当行为将导致系统滞后,但是这也意味着其他地方的不当行为将不会。我的应用程序崩溃了,无法使用每个CPU内核的100%,并且Windows上的UI仍然保持了极高的响应速度。
假名称

1
@假名:Finder 除了其自己的窗口(文件夹和桌面图标)外,处理UI的任何方面。(可以退出Finder;实际上它已经消失了,并且其他所有内容都仍然可用。)SystemUIServer仅处理菜单栏右侧的项目和“边框”覆盖(音量/亮度等)。窗口渲染和事件完全由WindowServer进程处理。
凯文·里德

作为澄清点,@ Fake Name:renice在进程而不是线程上运行。
克里斯·佩奇

1

我曾在ServerFault上提出过类似的问题-尽管还没有专门针对Finder(尽管我确实发现Finder的运行速度也令人无法忍受)。 如何在Mac OS X(或iOS等)上永久“取消”进程? 那里没有收集到太多信息,这是执行此操作的好方法……或为何如此。

我仍然经常考虑这个问题,如果您敢的话,实际上有几种方法可以迷惑“基础知识”。如前所述,您可以进行各种外壳装饰..但是,此类错误行为的一个好地方是各种/etc/rc*引导例程..这些例程已经存在..为您设置了各种任意的(苹果定义的)系统参数。编辑这些内容,或查找如何在引导过程中添加自己的例程。

另外,如果您真的想让自己的头爆炸。

sudo sysctl list 这是潘多拉魔盒的关键 /etc/sysctl.conf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.