2

我在一个 macOS 应用程序上工作,它使用 CoreGraphics API 来检索整个屏幕作为图像,或应用程序的各个窗口。这是用于屏幕共享功能。我们偶尔会遇到一个问题,Apple 的 WindowServer 进程开始消耗大量 CPU(接近 100%),整个系统变得异常缓慢,几乎无法使用。

如果您终止 WindowServer,或终止我们的应用程序,那么一切都会恢复正常。即使您停止屏幕共享并且我们不再调用 API,问题仍然存在,直到您终止我们的应用程序。

有没有人使用过 CoreGraphics API,或者知道它是如何与 WindowServer 进程连接的,以便深入了解在这些情况下我们可能正在做什么扰乱 WindowServer?

系统的 spindump 显示我们的应用程序和其他应用程序确实在 WindowServer 上等待,这几乎占用了主线程中 spindump 的所有时间。看起来像是某种“软”死锁,因为 WindowServer 没有完全冻结(因为 UI 仍然可以访问)。这是一种不常见但非常麻烦的情况。

谢谢!

4

0 回答 0