Skip to main content

В эти выходные, разработчик Лорен Брихтер выпустил веб-сайт, на котором утверждалось, что Google Chrome для Mac — или, точнее, его механизм автоматического обновления — заставлял процесс WindowServer в macOS постоянно загружать ЦП, снижая производительность macOS даже на высокопроизводительных машинах.

Веб-сайт содержит информацию о том, как полностью избавиться от Chrome и его средства обновления с вашего Mac, чтобы восстановить производительность, и даже назвал его «вредоносным ПО» (с тех пор это слово было удалено). Многие пользователи сообщают, что это действительно работает и что после удаления Google Chrome со своих компьютеров все стало намного быстрее.

Позвольте мне предисловие к этому, четко заявив, что я не фанат Google Chrome. Он у меня установлен, потому что для некоторых вещей, которые я делаю в сети, он требуется, но моим предпочтительным браузером всегда был Safari. Меня заинтересовала техническая сторона этой истории и некоторые вопросы, над которыми я размышлял, читая отчет Лорен. Эти вопросы были следующие: возможно ли, чтобы процесс скрылся от Activity Monitor во время его работы? Когда запускается процесс обновления и что он делает? Действительно ли программа обновления Google Chrome является причиной использования ЦП WindowServer, которую видят люди?

Может ли процесс скрыться от Activity Monitor во время его работы?

Однозначного ответа на этот вопрос у меня нет. Единственным практическим способом, который я нашел для этого, был мониторинг системы на предмет запущенных процессов и, если обнаружен Activity Monitor, завершение моего процесса, чтобы пользователь не увидел его в Activity Monitor. Я не понимаю, почему программа обновления Google Keystone должна это делать, и некоторый быстрый статический анализ ее двоичных файлов не выявил такой тактики.

Когда запускается процесс обновления и что он делает?

Сервис Google Keystone, как и любые другие приложения и процессы сервисного типа, работающие на Mac, регистрируется в системе, используя список свойств launchd. Launchd — это демон, отвечающий за порождение процессов в macOS, а список свойств launchd — это, по сути, файл конфигурации, который сообщает launchd, как он должен обрабатывать данную службу.

В случае программы обновления Google Chrome она регистрирует две службы, которые поддерживаются одним и тем же двоичным файлом, расположенные в ~ / Library / Google / GoogleSoftwareUpdate / GoogleSoftwareUpdate.bundle / Contents / Resources / GoogleSoftwareUpdateAgent.app / Contents / MacOS / GoogleSoftwareUpdateAgent.

Для службы «Keystone User Agent» для параметра StartInterval установлено значение 3623 секунды, поэтому она будет запускаться примерно раз в час для проверки обновлений. Другой, «Keystone XPC Service», запускается только тогда, когда приложение Google хочет самостоятельно проверить наличие обновлений по запросу. Это не сервисы, которые будут работать бесконечно, они запускаются только периодически, чтобы проверять наличие обновлений или когда приложение Google хочет с ними разговаривать, что делает утверждение о том, что они замедляют WindowServer, еще более интересным.

Что касается того, что делает этот агент обновления, я проделал базовую обратную разработку, статически проанализировав задействованные двоичные файлы с помощью Hopper. Кажется, он обрабатывает такие вещи, как загрузка отчетов о сбоях, если они есть, а также проверка обновлений приложений Google, таких как Chrome. Мне удалось увидеть его в Activity Monitor, пока он действительно работает, и в этом случае он будет отображаться как «Обновление программного обеспечения Google».

Обратите внимание, что это фундаментальное исследование ни в коем случае не является подтверждением того, что эта программа не делает ничего потенциально опасного, это просто означает, что за то ограниченное время, которое мне пришлось изучить, я не обнаружил ничего тревожного.

Действительно ли программа обновления Google Chrome является причиной высокой загрузки ЦП WindowServer, которую наблюдают люди?

Это был главный вопрос, на который я намеревался ответить во время тестов. Тесты проводились на MacBook Pro 16 дюймов 2019 года с процессором Core i9 и 16 ГБ оперативной памяти. Машина была подключена к внешнему дисплею, никакие другие приложения во время тестов не выполняли ничего, кроме основных фоновых задач, и я также оставил включенным кофеинат, чтобы машина не спала.

Используя инструменты, которые позволяют вам наблюдать за показателями программного обеспечения, такими как использование ЦП, я записал два сеанса: один с установленным Google Chrome, а другой с Google Chrome и удаленными службами обновления. Я использовал первое 30-минутное окно сеанса Instruments для измерения загрузки ЦП WindowServer в каждом сценарии.

Как видно из сравнения выше, при установленном Chrome процесс WindowServer использовал около 50 секунд ЦП во время тестового окна. Без установленного Chrome и его апдейтера он использовал около 49 секунд. Я не рассматриваю это как подтверждение проблемы, учитывая, что разница незначительна (намного ниже того, что может вызвать видимые проблемы с производительностью).

Кроме того, утверждение о том, что процесс, который выполняется один раз в час, приведет к высокой загрузке ЦП совершенно несвязанной системной службой, является безумным. WindowServer отвечает за визуализацию пользовательского интерфейса macOS на экране, он проводит свое время в методе CGXUpdateDisplay, отображая CALayers, задачу, которая не имеет абсолютно ничего общего с чем-либо, что может делать средство проверки обновлений программного обеспечения (без пользовательского интерфейса).

Почему люди считают, что Chrome снижает производительность Mac?

Что касается того, почему люди воспринимают эту проблему и ее решение, я могу придумать несколько вариантов. Один из них — эффект плацебо: у вас есть проблема, вы делаете что-то, о чем кто-то сказал, что вам следует решить эту проблему, а затем вы чувствуете, что проблема решена. Это чаще встречается в компьютерах, чем вы думаете. Другой — это предвзятость подтверждения: вы ненавидите Google и Google Chrome (эй, я тоже не фанат, мы можем быть друзьями), и вы видите историю, которая соответствует вашему восприятию программного обеспечения, поэтому вы инстинктивно в это верите.

Еще одна вещь, которая может быть здесь задействована, это то, что инструкции на веб-сайте Лорен говорят вам перезагрузить компьютер после выполнения описанных шагов, но это не обязательно для удаления программы обновления программного обеспечения Google. Фактически, в своих тестах я удалил его, убедившись, что он не запущен, затем запустил launchctl unload, а затем удалил списки свойств launchd и двоичные файлы из системы. Я сделал это, потому что компьютер, который только что был перезагружен, всегда будет работать быстрее, чем тот, который работал в течение нескольких недель, и мне нужно было исключить эту переменную из моих тестов.

Если вы все еще чувствуете, что Google Chrome снижает производительность вашего Mac, во что бы то ни стало, удалите его, я рекомендую вместо этого Safari.