dimhold.by
← Артыкулы

8 гадзін здымкаў без аніводнага разрыву. Чвэрць злоўленых новых працэсаў даў мой логер

Мне хацелася ведаць, што робіць мой ноўтбук, пакуль я сплю. У ноч на 29 верасня адна з маіх сесій Claude Code запусціла на ім цыкл з whotop 0.4.1: whotop ls --all --json кожныя 5 хвілін да 8 раніцы. whotop гэта мой інспектар працэсаў, я напісаў яго, каб высвятляць, хто трымае порт. На ноўтбуку Windows. Зборку Windows мой лог не запісвае, як і версіі Chrome, Postgres і Claude Code. Цыкл таксама пісаў радок у індэкс на кожны здымак. Калі паміж двума здымкамі праходзіла больш за 7 хвілін, ён ставіў пазнаку GAP, каб я ўбачыў, калі ноўтбук заснуў.

У файле няма ніводнага GAP. 96 здымкаў з 23:57 да 07:57 па гадзінніку ноўтбука, з крокам 303-305 секунд. Сон, карацейшы за пару хвілін, так не заўважыш, але нічога падобнага да сну я не ўбачыў.

Машына была занятая ўсю ноч

На пачатку было 486 працэсаў, у 00:13 іх было ўжо 510, раніцай 467. Найменш было 460, у 03:14 і яшчэ раз у 06:21. За ноч лог убачыў 1615 розных працэсаў. 415 з іх былі ў кожным здымку, гэта значыць пражылі ўсю ноч. Астатнія прыходзілі і сыходзілі. Новым я лічыў працэс, які стартаваў пазней за першы здымак. Ключ гэта pid плюс час старту, бо Windows выкарыстоўвае нумары pid паўторна. Атрымалася 1129 новых працэсаў.

Перш чым называць гэта шумам, трэба было адрэзаць тое, што шумам не было. Да 01:58 мае сесіі агентаў яшчэ працавалі: ішлі зборкі і ssh на сервер, дзе таксама ішла зборка. Апошняй камандай была зборка для прадакшэну ў 01:58:56. Пасля яе да раніцы ніводзін агент не запускаў каманд, апрача самога цыкла логера. Значыць, ціхая частка ночы гэта 6 гадзін, з 01:59 да 07:57. За гэты час лог злавіў 711 новых працэсаў.

Найбольш шумеў логер

Я расклаў новыя працэсы па бацьках і найбольшай групай аказаўся сам whotop. Кожны здымак гэта node, які запускае PowerShell, а PowerShell атрымлівае кансольны хост. Выходзіць 3 працэсы кожныя 5 хвілін. За ўсю ноч гэта 285 з 1129, 25 працэнтаў. Пасля 01:59 гэта 216 з 711, 30 працэнтаў.

Потым я паглядзеў, калі стартуюць астатнія працэсы адносна логера. Аказалася, што доля можа быць значна большай. На Windows whotop чытае табліцу працэсаў праз Get-CimInstance Win32_Process, парты праз Get-NetTCPConnection і службы праз Get-CimInstance Win32_Service. Усё гэта ідзе праз WMI. А WMI загружае сваіх правайдараў у асобны працэс WmiPrvSE. Пасля 01:59 з’явілася 70 новых WmiPrvSE. 40 з іх стартавалі праз 0,39-0,56 секунды пасля node логера. З bash у маіх сесіях Claude Code выйшла гэтак жа. Усе 46 стартавалі праз 0,37-0,74 секунды пасля логера і ні разу ў іншы момант. Яны прыйшлі з 6 розных сесій. Толькі адна з іх тая, што круціць цыкл. Разам з імі стартавалі 28 кансольных хостаў. Калі іх запускае логер, то гэта 330 з 711, 46 працэнтаў ціхай часткі ночы.

0 50 100 150 200 250 202 00:00 220 01:00 149 02:00 115 03:00 107 04:00 112 05:00 106 06:00 118 07:00 апошняя каманда агента 01:58 мой логер хосты WMI Chrome Windows агенты і іншае
Новыя працэсы па гадзіне здымка, у якім іх убачылі ўпершыню. За ноч 1129, з іх 285 гэта сам логер. Пасля 01:58 ніводзін агент не запускаў каманд.

Хто яшчэ прачынаўся

На другім месцы Chrome. Пасля 01:59 ён запусціў 169 новых працэсаў: 96 працэсаў пашырэнняў і 73 рэндэрэры старонак. Гэта ад 22 да 34 за гадзіну аж да 8 раніцы. У камандным радку напісана --extension-process, але не напісана, якое пашырэнне, таму я не ведаю, якое з іх перазапускаецца так часта.

Сама Windows запусціла 97. Большасць з іх svchost, 69. Камандны радок у іх схаваны, я бачу толькі імя. Цікавейшыя тыя, у каго імя прамоўнае. Пара ўсталёўшчыка модуляў Windows (TiWorker разам з TrustedInstaller) стартавала за ноч 9 разоў, 5 з іх пасля 01:59, апошні раз у 04:39. Працэсы пошукавага індэксатара прыходзілі за ноч 7 разоў, 4 з іх пасля 01:59 і 3 з іх паміж 07:26 і 07:35. CompatTelRunner, тэлеметрыя сумяшчальнасці, стартаваў у 03:19 і ў 03:34 запусціў другую копію сябе. Microsoft апісвае абслугоўванне як працу, якая ідзе, калі машына прастойвае і жывіцца ад сеткі. Гэта сышлося б, калі б ноўтбук стаяў на зарадцы, але ў логу гэтага няма. Журнал планавальніка заданняў я таксама не здымаў, таму сказаць, якія з гэтых запускаў былі абслугоўваннем, не магу.

Postgres запусціў 23 даччыныя працэсы, на працягу ўсіх 6 гадзін. 5 з іх таксама стартавалі адразу пасля логера.

Хто пражыў усю ноч

Сярод 415 доўгажыхароў было 9 працэсаў claude.exe, адзін з іх дэман. Самы стары стартаваў 21 верасня, за тыдзень да гэтага. У сервераў распрацоўкі было 43 працэсы і разам яны слухалі 14 партоў. Самы стары з іх стартаваў адразу пасля поўначы 25 верасня, амаль за 4 дні да лога. Я напісаў whotop, бо аднойчы забіў не той node, калі шукаў, хто трымае порт. Ці быў хоць адзін з гэтых 14 яшчэ патрэбны, лог не кажа.

Чаго лог не бачыць

0 хв 5 хв 10 хв 15 хв здымак здымак здымак жыве ўсю ноч бачны 3 разы кароткі, трапіў у здымак бачны 1 раз кароткі, паміж здымкамі не бачны
Здымак раз на 303-305 секунд бачыць толькі тое, што жывое ў гэты момант. 978 з 1129 новых працэсаў бачныя роўна ў адным здымку, таму насамрэч іх больш.

Здымак раз на 5 хвілін бачыць толькі тое, што жывое ў гэты момант. Працэс, які пражыў 2 секунды паміж двума здымкамі, у лог не трапляе ўвогуле. Тут я двойчы перадумаў наконт bash. Спачатку я вырашыў, што іх запускае здымак, потым, што гэта проста выбарка. Час старту вышэй вярнуў мяне да першай версіі. Але вельмі кароткі працэс, запушчаны ў выпадковы момант, таксама бачны, толькі калі ён жывы падчас запыту. Значыць, ён таксама выглядаў бы прывязаным да логера. Лог гэтыя 2 выпадкі не адрознівае. Як выглядае выпадковы старт у працэсаў, што жывуць даўжэй, паказвае Chrome. Яго 169 новых працэсаў злоўленыя ў самым розным узросце і ні разу адразу пасля логера.

978 з 1129 новых працэсаў бачныя роўна ў адным здымку, таму насамрэч стартаў больш. А логер выглядае вялікім яшчэ і таму, што гэта адзіны працэс, які гарантавана жывы падчас кожнага здымка. Яго 3 працэсы не губляюцца ніколі.

І яшчэ лог гэта толькі спіс таго, хто працуе. Колькі рэсурсаў яны з’елі, у ім няма. whotop працаваў без правоў адміністратара, таму ў кожным здымку 158-183 працэсы не паказалі свой камандны радок. Для Postgres гэта значыць, што я не магу адрозніць autovacuum ад кліенцкага падключэння. Я зняў толькі гэтую адну ноч.