Google Chrome сильно грузит процессор, что делать? : Windows
Google Chrome, впрочем, как и любой иной браузер, не должен активно расходовать ресурс процессора. Исключение могут составлять случаи работы флеш-плеера на очень слабых или старых компьютерах. На современных ПК и ноутбуках как минимум с усреднённой производительностью нагрузка на процессор свыше 90% может иметь место, но для этого в Chrome должны быть запущены ресурсоёмкие задачи типа воспроизведения видео в 8К/4К. Если в «Хроме» не воспроизводится видео 8К/4К, не запущена какая-нибудь мощная браузерная игрушка, не обрабатываются прочие сравнимые по мощности затрат ресурсов операции, но диспетчер задач Windows показывает, что процессор загружен браузером почти до предела, вероятно, кто-то майнит криптовалюту и обогащается за ваш счёт. Как избавиться от майнера в Chrome?
Google Chrome сильно грузит процессор: избавляемся от майнера
Итак, в диспетчере задач Windows видим, как браузер практически под завязку нагружает процессор.
На самом сайте поддержки Chrome в таких случаях рекомендуют:
• Очистить историю;
• Обновиться до самой последней версии браузера;
• Просканировать браузер с помощью встроенного поисковика вредоносного ПО.
Первые два варианта помогут ну в очень уж редких случаях. Поиск же вредоносного ПО, возможно, и решит вопрос.
Но только в том случае, если сможет найти вредоносные коды. Встроенный в Chrome инструмент поиска вредоносного ПО сам в фоновом режиме периодически сканирует браузер, и если бы он что-то нашёл, то уже бы уведомил нас об этом. Не факт, что скрытые майнеры в составе расширений или на открытых в браузере сайтах будут обнаружены как вредоносное ПО. Можно запустить сканирование установленным в среду Windows антивирусом или специальными утилитами для поиска потенциально опасного ПО типа AdwCleaner. Но здесь также успех будет гарантирован не в каждом случае. Скрытый в браузере майнер можно вычислить следующим образом.
Как вычислить скрытый майнер в «Хроме»
Запускаем диспетчер задач Chrome клавишами Shift+Esc. Кликаем на графу «ЦПУ», чтобы выстроить перечень процессов по убыванию. В нашем случае первым, самым активно использующим ресурс процессора видим некий процесс «Субфрейм: . Делаем на нём двойной клик.
И видим, что это расширение Stop Ads. Очень даже ожидаемо: многие создатели бесплатных расширений, а особенно блокировщиков рекламы, потихоньку монетизируют свои усилия скрытым майнингом. Дело в том, что компания Google не проверяет размещаемый в магазине Chrome контент. Расширения же с внедрённым вредоносным кодом отсортировываются очень просто: когда кто-то пострадает и пожалуется на расширение, сотрудники компании его проверяют и удаляют из магазина. А чтобы хоть как-то упредить нанесение вреда пользователям, компания Google в 2017 году, собственно, и внедрила в Chrome упомянутый выше инструмент поиска вредоносного ПО. Увы, способный помочь нам далеко не в каждой ситуации.
Итак, виновника активного поглощения ресурса процессора мы обнаружили. Если это вкладка какого-то сайта, закрываем её. Если это расширение, для начала отключим его.
Теперь под разными нагрузками тестируем Chrome – просто открываем сайты, запускаем видео и флеш-игры. И отслеживаем нагрузку на процессор в диспетчере задач Windows. В нашем случае отключением расширения проблема решилась. При тех же активных вкладках процессор нагружается на 5-10%.
Теперь осталось только зайти в раздел расширений и удалить Stop Ads.
Ну а о сайте, который нечестно добывает криптовалюту, просто забываем.
Как защититься от скрытого майнинга в «Хроме»
Как на будущее упредить появление скрытых майнеров в Chrome? Для этих целей в магазине браузера есть специальные расширения типа MineBlock, No Coin и их аналоги. Можно прибегнуть к средствам борьбы с майнерами на уровне Windows типа внесения в файл hosts перечня доменов известных сайтов, уличённых в майнинге. Недостаток любого рода методов борьбы с незаконной добычей криптовалюты заключается в том, что ПО для скрытого майнинга и сайты, зарабатывающие таким образом на своих посетителях, появляются с каждым днём. Где гарантия того, что создатель какого-нибудь безобидного расширения, скажем, для реализации режима чтения или кастомизации стартовой страницы завтра не продаст душу дьяволу и не начнёт на вас зарабатывать? Так что ни одно браузерное расширение типа «Антимайнер», ни даже один антивирус с регулярно обновляемыми базами не даст полной, 100%-ной защиты от этого зла.
Если вы обычно посещаете проверенные сайты с хорошей репутацией, если каждый день без разбора не экспериментируете с новыми Chrome-расширениями, достаточно просто бдеть за производительностью системы. Если система начнёт жутко тормозить, и этому причиной будет Chrome, нужно будет сделать то, что, собственно, и предложено в этой статье выше.
SharedWorker
Интерфейс SharedWorker (разделяемый воркер) является особым видом воркеров к которому можно получить доступ из нескольких контекстов браузера, например, из нескольких окон, iframe, или других воркеров. Этот интерфейс реализован иначе, чем dedicated воркеры и имеют иной глобальный контекст, SharedWorkerGlobalScope (en-US).
Примечание: Если SharedWorker может быть доступен из нескольких контекстов браузера, все они должны разделять одинаковое расположение (идентичные протокол, хост и порт).
Примечание: В Firefox, разделяемые воркеры не могут взаимодействовать между private (например, просматриваемыми в приватном режиме) и non-private документами (см. баг 1177621.)
Свойства
EventListener который вызывается всегда, когда ErrorEvent (en-US) типа error всплывает через воркер.
Возвращает объект MessagePort (en-US), используемый для коммуникации и контроля разделяемого воркера.
Constructors
Создаёт разделяемый веб воркер, который выполняет скрипт по указанному URL.
Методы
Наследует методы родительского класса, EventTarget , и реализует свойства AbstractWorker (en-US).
Пример
В нашем Базовом примере разделяемого воркера (запустить), имеются две HTML страницы, каждая из которых использует JavaScript для простых вычислений. Разные скрипты используют один и тот же воркер, чтобы выполнить умножение двух чисел — они оба имеют доступ к нему, даже если их страницы запущены в разных окнах.
Следующий пример кода демонстрирует создание объекта SharedWorker с использованием конструктора SharedWorker() (en-US). Оба скрипта содержат:
var myWorker = new SharedWorker("worker.js");
далее скрипты получают доступ к воркеру через объект MessagePort (en-US), находящийся в свойстве SharedWorker.port (en-US). Если устанавливается обработчик события onmessage, port самостоятельно начинает работу, вызывая собственный метод start() , если же принимать события с помощью обработчика события «message» через addEventListener, необходимо вызвать метод start() самостоятельно:
.port.start();
После того, как порт запущен, оба скрипта отправляют сообщения воркеру и принимают их от него, используя port.postMessage() и port.onmessage , соответственно:
.onchange = function () myWorker.port.postMessage([first.value, second.value]); console.log("Message posted to worker"); >; second.onchange = function () myWorker.port.postMessage([first.value, second.value]); console.log("Message posted to worker"); >; myWorker.port.onmessage = function (e) result1.textContent = e.data; console.log("Message received from worker"); >;
Внутри воркера используется хэндлер SharedWorkerGlobalScope.onconnect (en-US) для соединения к тому же порту, как обсуждалось ранее. Порты, связанные с данным воркером доступны в свойстве ports события connect . Далее вызывается метод MessagePort (en-US) start() для запуска порта, и устанавливается хэндлер onmessage для обработки сообщений, присылаемых от обоих потоков.
onconnect = function (e) var port = e.ports[0]; // or port = e.source port.addEventListener("message", function (e) var workerResult = "Result: " + e.data[0] * e.data[1]; port.postMessage(workerResult); >); port.start(); // необходимо при добавлении обработчиков с помощью addEventListener. При использовании сеттера port.onmessage, данный метод вызывается автоматически, неявно >;
Пример с несколькими страницами
let connected = false; self.addEventListener( "connect", (e) => e.source.addEventListener( "message", (ev) => if (ev.data === "start") if (connected === false) e.source.postMessage("worker init"); connected = true; > else e.source.postMessage("worker already inited"); > > >, false, ); e.source.start(); >, false, );
На странице 1 получаем сообщение ‘worker init’ в консоли.
script> let worker = new SharedWorker("test.js"); worker.port.addEventListener( "message", (e) => console.log(e.data); >, false, ); worker.port.start(); worker.port.postMessage("start"); script>
На странице 2 в консоль выводится ‘worker already inited’, так как страница 1 уже запустила наш воркер;
script> let worker = new SharedWorker("test.js"); worker.port.addEventListener( "message", (e) => console.log(e.data); >, false, ); worker.port.start(); worker.port.postMessage("start"); script>
Спецификации
Specification |
---|
HTML Standard # shared-workers-and-the-sharedworker-interface |
Совместимость браузеров
BCD tables only load in the browser
See also
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
Как обнаружить веб-майнер с помощью Диспетчера задач Google Chrome
Все больше и больше сайтов встраивают скрипты для добычи криптовалюты, такие как CoinHive, а вредоносные браузерные расширения могут встраивать Javascript-майнеры непосредственно в тело веб-документов
Криптомайнеры в браузере становятся действительно очень серьезной проблемой.
Когда браузер задействован в майнинге, ресурсы процессора используются для добычи цифровых валют, в частности Monero. Все это приводит к росту рабочих температур процессора на протяжении длительных периодов времени, что в случае со слабой или вовремя не обслуженной системой охлаждения может привести к повреждению или выходу ЦПУ из строя.
К сожалению, пользователи часто не замечают, что их компьютер используется для нежелательного майнинга. Характерные признаки данного процесса — замедление работы компьютера, зависания или даже принудительная перезагрузка из-за перегрева. Если вы зайдете в Диспетчер задач в Windows, то обнаружите, что процессы Chrome потребляет неожиданно большое количество ресурсов процессора.
Этим способом вы действительно можете распознать странное поведение Chrome, но не сможете выяснить дополнительную полезную информацию: какое расширение или вкладка задействовали все свободные ресурсы ЦПУ. К счастью, Google предлагает встроенный инструмент под названием Диспетчер задач, который поможет это выяснить.
Определяем, какие сайты потребляют много ресурсов процессора
Если браузер Google Chrome потребляет слишком много ресурсов ЦПУ, то в первую очередь нужно определить, вызвана ли данная ситуация каким-либо сайтом или установленным расширением. В нашем примере откроем созданный порталом Badpackets тестовый сайт, который включает встроенный веб-майнер CoinHive, использующий до 100% доступных ресурсов процессора.
Запустить Диспетчер задач в Chrome можно с помощью горячей клавиши Shift + Esc или в основном меню: меню Chrome > Дополнительные инструменты > Диспетчер задач .
После запуска инструмента вы увидите список процессов и соответствующий им уровень потребления ресурсов ЦПУ. Для каждого сайта, расширения, внутреннего процесса или субфрейма в списке показывается отдельный процесс.
Пользователь может проверить список и определить, какой сайт необоснованно использует больше всего ресурсов ЦПУ. Чтобы закрыть эту вкладку, выберите ее в списке и нажмите кнопку “Завершить процесс”. После этого будет восстановлена нормальная работа компьютера, и нелишним будет добавление вредоносного сайта в черные списки антивируса или блокировщика рекламы.
Определяем, какие расширения потребляют много ресурсов процессора
К сожалению, иногда повышенное потребление может быть вызвано не сайтом, а установленным расширением.
Например, ранее мы писали о расширении SafeBrowse, которое в своем коде содержало скрипт запуска майнера CoinHive. Процесс добычи криптовалюты Monero запускался сразу при открытии браузера. При запуске Диспетчера задач Chrome очень легко выявить, что именно данное расширение приводит к повышенным нагрузкам процессора.
Щелкните дважды по названию расширения в Диспетчере задач Chrome, и вы попадете на страницу управления расширениями, где можно удалить целевое расширение. Затем перезапустите Chrome, и будет восстановлена нормальная работоспособность браузера.
Иногда расширение может открывать объект iframe, который загружает веб-майнер. В этом случае процесс, связанный с майнингом, будет идентифицирован как субфрейм.
К сожалению, Диспетчер задач Chrome не показывает, какое расширение загрузило субфрейм. Однако, вы можете дважды кликнуть по имени субфрейма в списке, и Chrome вас перенаправит на список установленных расширений, а искомое расширение будет выделенным. Вам также следует удалить расширение и перезапустить браузер.
Как защитить себя от браузерных майнеров
Проблема веб-майнеров приобретает катастрофические масштабы. В будущем ситуация может даже ухудшится. Поэтому очень важно использовать антивирусы, которые позволяют обнаруживать процессы подключения к сервисам браузерного майнинга, таким как CoinHive.
К сожалению, новые сервисы продолжают появляться, и индустрия безопасности не всегда может отреагировать молниеносно. Поэтому иногда ваш антивирус может не обнаруживать сценарии майнинга или URL-адреса службы.
Чтобы усилить защиту, вы можете использовать блокировщик рекламы в Chrome, который будет предотвращать выполнение скрипта майнера. На сайте CoinBlockerLists доступен постоянно обновляющийся список IP-адресов и доменов, связанных с браузерным майнингом.
Web Workers API
Web Workers это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения. Преимущество заключается в том, что ресурсоёмкие вычисления могут выполняться в отдельном потоке, позволяя запустить основной (обычно пользовательский) поток без блокировки и замедления.
Концепции и использование Web воркеров
Worker (работник, воркер) — это объект созданный при помощи конструктора (например, Worker() ), который запускает именованный файл JavaScript — этот файл содержит код, который будет запускаться в потоке воркера; воркеры запускаются в другом глобальном контексте отличном от текущего контекста window . Этот контекст представлен объектом DedicatedWorkerGlobalScope (en-US) в случае специализированных воркеров (стандартные воркеры, которые используются одним скриптом, общие воркеры используют SharedWorkerGlobalScope (en-US)).
Вы можете запустить любой код, который вам нравится внутри потока воркера, за некоторыми исключениями. Например, вы не можете напрямую манипулировать DOM внутри воркера или использовать некоторые методы и свойства по умолчанию объекта window . Но вы можете использовать большое количество свойств и методов, доступных в window , включая WebSockets, и механизм хранения данных такой, как IndexedDB или Data Store API, который доступен только в ОС Firefox. За дополнительной информацией смотрите Функции и классы доступные воркерам. (en-US)
Данные отправляются между потоком воркера и основным потоком через систему сообщений — обе стороны отправляют свои сообщения с помощью метода postMessage () и отвечают на сообщения через обработчик события onmessage (сообщение содержится в атрибуте данных события Message . Данные копируются, а не используются совместно.
Воркеры могут, в свою очередь, создавать новых воркеров, в этом случае они должны иметь одно и то же происхождение — родительскую страницу. Кроме того, воркеры могут использовать XMLHttpRequest для сетевого ввода-вывода, за исключением того, что атрибуты responseXML и channel на XMLHttpRequest всегда возвращают значение null .
В дополнение к специализированным существуют и другие виды воркеров:
- Совместные воркеры — это воркеры, которые могут использоваться несколькими скриптами совместно, работающими в разных окнах, IFrames и т.д. в пределах одного домена, что и воркер. Они немного сложнее, чем специализированные воркеры — скрипты должны связываться через активный порт. Подробнее см. SharedWorker .
- ServiceWorkers (en-US) по сути действуют как прокси-серверы, которые находятся между веб-приложениями, а также браузером и сетью (если доступны). Помимо прочего они предназначены для создания эффективного автономного взаимодействия, перехвата сетевых запросов и принятия соответствующих мер на основе доступности сети и обновления данных на сервере. Они также позволят доступ к push-уведомлениям и API-интерфейсам фоновой синхронизации.
- Воркеры в Chrome — это воркеры специального типа Firefox, которые вы можете использовать, если вы разрабатываете надстройки и хотите использовать воркеры в расширениях и иметь доступ к js-ctypes в вашем воркере. Смотрите также ChromeWorker .
- Audio Workers(аудио воркеры) обеспечивают возможность прямой обработки аудиозаписей в рамках веб-контекста воркера.
Примечание: В соответствии с Web workers Spec, события ошибок воркеров не должны «всплывать» (смотрите баг 1188141. Такое поведение было реализовано в Firefox 42.
Интерфейсы Web воркера
Абстрактные свойства и методы общие для всех типов воркеров (т.е. Worker или SharedWorker ).
Представляет поток исполнения воркера, позволяющий передавать сообщения текущему коду воркера.
Представляет конкретный вид воркера, к которому можно получить доступ из нескольких контекстов, будь то несколько окон, iframe или даже воркеров.
Represents the generic scope of any worker (doing the same job as Window does for normal web content). Different types of worker have scope objects that inherit from this interface and add more specific features.
Represents the scope of a dedicated worker, inheriting from WorkerGlobalScope (en-US) and adding some dedicated features.
Represents the scope of a shared worker, inheriting from WorkerGlobalScope (en-US) and adding some dedicated features.
Представляет идентификатор и состояние пользовательского агента (клиента).
Примеры
Мы создали пару простых демонстрационных программ чтобы показать основы использования:
- Базовый пример отдельного воркера (запускает отдельного воркера).
- Базовый пример разделяемого воркера (запускает разделяемого воркера).
Больше информации о том, как работают эти демонстрационные программы, вы можете найти в статье Использование Web воркеров.
Спецификации
Specification |
---|
HTML Living Standard # workers |
Смотрите также
- Использование Web воркеров (en-US)
- Worker Interface
- Интерфейс SharedWorker
- ServiceWorker API (en-US)
- Функции и классы доступные воркерам (en-US)
- Продвинутые концепции и примеры (en-US)
- ChromeWorker: для использования воркеров в привелегированном/chrome коде
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.