Точно сказать не могу именно когда это началось, но думаю, в последние дни. У меня на сервере установлен Ubuntu 18.04, и я заметил, что его нагрузка невероятно высока. Он почти ничего не делает (я установил 2 гостевых KVM, но сейчас работает только 1). У него 24 логических ядра, а нагрузка после перезагрузки постоянно 12. Запуск / остановка гостевых KVM не имеет значения
Снимок htop
:
Бег systemd-cgtop
показывает немного больше:
Запуск strace для этого процесса из htop
показывает в основном строки, которые выглядят так:
epoll_pwait(4, [], 1024, 345, NULL, 8) = 0
epoll_pwait(4, [], 1024, 154, NULL, 8) = 0
epoll_pwait(4, [], 1024, 500, NULL, 8) = 0
epoll_pwait(4, [], 1024, 345, NULL, 8) = 0
epoll_pwait(4, [], 1024, 155, NULL, 8) = 0
с очень редким сочетанием:
epoll_pwait(4, [], 1024, 160, NULL, 8) = 0
epoll_pwait(4, [{EPOLLIN, {u32=13, u64=13}}], 1024, 500, NULL, 8) = 1
read(13, "{\"id\":90,\"jsonrpc\":\"2.0\",\"error\""..., 2048) = 64
futex(0xa15408, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xa153a0, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(4, [{EPOLLIN, {u32=9, u64=9}}], 1024, 164, NULL, 8) = 1
read(9, "\1\0\0\0\0\0\0\0", 1024) = 8
epoll_pwait(4, [], 1024, 164, NULL, 8) = 0
Если я просто убью этот процесс, все появляется чтобы вернуться в нормальное состояние - конечно, с точки зрения загрузки, и гости KVM, похоже, не пострадают.
Могу ли я еще что-нибудь выяснить, в чем заключается основная причина?
Другая информация - спросите, что еще было бы полезно:
# dpkg -l systemd
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=======================-================-================-===================================================
ii systemd 237-3ubuntu10.40 amd64 system and service manager
# apt list --installed | grep systemd
libnss-systemd/bionic-updates,now 237-3ubuntu10.40 amd64 [installed]
libpam-systemd/bionic-updates,now 237-3ubuntu10.40 amd64 [installed]
libsystemd0/bionic-updates,now 237-3ubuntu10.40 amd64 [installed]
python3-systemd/bionic,now 234-1build1 amd64 [installed]
systemd/bionic-updates,now 237-3ubuntu10.40 amd64 [installed]
systemd-sysv/bionic-updates,now 237-3ubuntu10.40 amd64 [installed]
Выход perf top --pid=$(pgrep systemd -d,)
:
Samples: 4M of event 'cycles:ppp', Event count (approx.): 455698006733
Overhead Shared Object Symbol
4.07% systemd [.] hashAes1Rx4<false>
2.90% systemd [.] fillAes1Rx4<false>
0.44% systemd [.] randomx::JitCompilerX86::generateProgramPrologue
0.32% perf-1597.map [.] 0x00007f4fe9795105
0.28% perf-1597.map [.] 0x00007f4fe97c5105
0.28% perf-1597.map [.] 0x00007f4fe97b5105
0.28% perf-1597.map [.] 0x00007f4fe9795129
0.28% perf-1597.map [.] 0x00007f4fe97a5105
0.27% perf-1597.map [.] 0x00007f4fe97e5105
0.27% perf-1597.map [.] 0x00007f4fe97d5105
0.25% perf-1597.map [.] 0x00007f4fe97c5129
0.25% perf-1597.map [.] 0x00007f4fe97b5129
0.25% perf-1597.map [.] 0x00007f4fe97d5129
0.25% perf-1597.map [.] 0x00007f4fe97e5129
0.25% perf-1597.map [.] 0x00007f4fe97a5129
0.24% perf-1597.map [.] 0x00007f4fe9845129
0.24% perf-1597.map [.] 0x00007f4fe9825129
0.24% perf-1597.map [.] 0x00007f4fe9815129
0.24% perf-1597.map [.] 0x00007f4fe9835129
0.24% perf-1597.map [.] 0x00007f4fe9845105
0.23% perf-1597.map [.] 0x00007f4fe9805129
0.23% perf-1597.map [.] 0x00007f4fe9835105
0.23% perf-1597.map [.] 0x00007f4fe97f5129
0.23% perf-1597.map [.] 0x00007f4fe9825105
0.23% perf-1597.map [.] 0x00007f4fe9815105
0.23% perf-1597.map [.] 0x00007f4fe97f5105
0.23% perf-1597.map [.] 0x00007f4fe9805105
0.16% systemd [.] randomx::JitCompilerX86::h_CBRANCH
0.09% systemd [.] randomx::JitCompilerX86::h_ISTORE
0.08% systemd [.] fillAes4Rx4<false>
0.08% systemd [.] randomx::JitCompilerX86::h_FMUL_R
0.05% systemd [.] randomx::JitCompilerX86::h_IADD_RS
0.05% systemd [.] randomx_reciprocal_fast
0.05% systemd [.] randomx::JitCompilerX86::h_IMUL_R
0.05% systemd [.] randomx::JitCompilerX86::h_ISUB_R
0.04% systemd [.] randomx::JitCompilerX86::h_IXOR_R
0.04% systemd [.] randomx::JitCompilerX86::h_FSUB_R
Помогло бы понять, что именно делают эти PID. strace не дает полной картины, так как выбранные системные вызовы могут не иметь отношения к его производительности.
Попробуйте профилировать. Установите символы отладки, чтобы получать имена функций, а не бессмысленные числа. То, что делает большую часть времени ЦП, должно преобладать над выборками, но все равно фильтровать до systemd с именами PID:
perf top --pid=$(pgrep systemd -d,)
Несколько основных функций дадут советы по нашим предложениям, а также предоставят информацию для отправки через другие каналы поддержки вашей ОС.
Также подумайте о том, чтобы проверить, заняты ли они по-прежнему, при запуске rescue.target. Спасательная оболочка намного проще, и отсутствие проблемы исключает очень ранний запуск.
Особенности установки отладочных символов обычно подразумевают чтение Вики по символам Ubuntu, установка http://ddebs.ubuntu.com repo и найдите свой любимый способ найти пакеты dbgsym. Начиная с systemd-dbgsym
как предположительно это охватывает systemd
двоичный. Кроме того, я неравнодушен к предложению вики о
apt install debian-goodies
find-dbgsym-packages [core_path|running_pid|binary_path]
Успех означает смотреть на perf top
или gdb
трассировки стека, нахождение знакомого имени функции и его использование для дальнейшего исследования.
hashAes1Rx4 кажется примитивом хеширования AES. Поиск кода с его помощью на GitHub приводит к различному криптографическому коду, но ничего напрямую не связано с systemd.
Но ждать, randomx::JitCompilerX86
это код C ++ из подтверждение рабочего проекта. sytsemd - C. Криптовалюта Monero использует AES в доказательстве работы. Я подозреваю, что этот хост занимается майнингом криптовалют. Очень вероятно из-за неправильного использования или компромисса.
Я не специалист по безопасности, поэтому вы захотите найти доказательства с помощью индикаторов взлома. И полный ответ, если заражен.
Однако это объяснило бы некоторое загадочное поведение. systemd не написан на C ++. И у него нет варианта использования для выполнения такого большого количества AES, не перегружающего ваши фактические вычислительные рабочие нагрузки. Работа, проделанная юнитами, будет отображаться в их контрольных группах. Но выдать себя за двоичный файл systemd было бы хорошей маскировкой для вредоносных программ.
К сожалению, у нас нет ярлыка для проведения такого расследования. Подозрение, которое не похоже на то, что он должен делать, поиск названий функций в открытом исходном коде, а затем вспоминание о том, что майнинг криптовалют - это вещь в данный момент.