24 февраля 2021 перезагрузил сервер с Home Assistant и после этого вижу что потребление CPU сильно увеличилось.
24 февраля 2021 перезагрузил сервер с Home Assistant и после этого вижу что потребление CPU сильно увеличилось.
Вот график:
Этот HA работает на raspberry pi 3b+, там работает операционная система Raspbian, HA установлен способом "Home Assistant Supervised". Поскольку у меня используется операционная системема Raspbian, а не Debian — это не официально поддерживаемый способ установки, на странице IP:8123/hassio/system я вижу сообщение "You are running an unsupported installation":
У меня установлена версия HA 2021.2.3, версия супервизора 2021.02.11, версия докера 19.03.12, build 48a6621
Как потом оказалось, эта проблема идет из-за того что используется неофициальный спосб установки HA.
Пошел разбираться что происходит. Команда docker stats показывает что контейнер hassio_audio стал потреблять много CPU:
Если посмотреть логи этого контейнера (с помощью команды "docker logs -f --since=1m hassio_audio"), то видно что там постоянно повторяется вот такое:
W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading not set.
D: [pulseaudio] core-rtclock.c: Timer slack is set to 50 us.
D: [pulseaudio] core-util.c: setpriority() worked.
I: [pulseaudio] core-util.c: Successfully gained nice level -11.
I: [pulseaudio] main.c: Found user 'root' (UID 0) and group 'root' (GID 0).
W: [pulseaudio] main.c: Home directory of user 'root' is not '/var/run/pulse', ignoring.
W: [pulseaudio] caps.c: Normally all extra capabilities would be dropped now, but that's impossible because PulseAudio was built without capabilities support. I: [pulseaudio] main.c: Successfully changed user to "root".
I: [pulseaudio] main.c: This is PulseAudio 14.2
D: [pulseaudio] main.c: Compilation CFLAGS: Not yet supported on meson
D: [pulseaudio] main.c: Running on host: Linux armv7l 5.4.51-v7+ #1333 SMP Mon Aug 10 16:45:19 BST 2020
D: [pulseaudio] main.c: Found 4 CPUs. I: [pulseaudio] main.c: Page size is 4096 bytes
D: [pulseaudio] main.c: Compiled with Valgrind support: no
D: [pulseaudio] main.c: Running in valgrind mode: no
D: [pulseaudio] main.c: Running in VM: no
D: [pulseaudio] main.c: Running from build tree: no
D: [pulseaudio] main.c: Optimized build: yes
D: [pulseaudio] main.c: All asserts enabled. I: [pulseaudio] main.c: Machine ID is 4d241e2ccd4041b080d75ecb7188b97c.
I: [pulseaudio] main.c: Using runtime directory /var/run/pulse. I: [pulseaudio] main.c: Using state directory /data/states.
I: [pulseaudio] main.c: Using modules directory /usr/lib/pulse-14.2/modules.
I: [pulseaudio] main.c: Running in system mode: yes
W: [pulseaudio] main.c: OK, so you are running PA in system mode. Please make sure that you actually do want to do that.
W: [pulseaudio] main.c: Please read http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system mode is usually a bad idea.
W: [pulseaudio] pid.c: Stale PID file, overwriting.
I: [pulseaudio] main.c: System supports high resolution timers
D: [pulseaudio] memblock.c: Using private memory pool with 1024 slots of size 64.0 KiB each, total size is 64.0 MiB, maximum usable slot size is 65496
I: [pulseaudio] cpu-arm.c: CPU flags: V6 V7 VFP EDSP NEON VFPV3
I: [pulseaudio] svolume_arm.c: Initialising ARM optimized volume functions.
I: [pulseaudio] sconv_neon.c: Initialising ARM NEON optimized conversions.
I: [pulseaudio] mix_neon.c: Initialising ARM NEON optimized mixing functions.
I: [pulseaudio] remap_neon.c: Initialising ARM NEON optimized remappers.
D: [pulseaudio] database-tdb.c: Opened TDB database '/data/states/4d241e2ccd4041b080d75ecb7188b97c-device-volumes.tdb'
I: [pulseaudio] database.c: Successfully opened 'device-volumes' database file '/data/states/4d241e2ccd4041b080d75ecb7188b97c-device-volumes.tdb'.
I: [pulseaudio] module.c: Loaded "module-device-restore" (index: #0; argument: "").
D: [pulseaudio] database-tdb.c: Opened TDB database '/data/states/4d241e2ccd4041b080d75ecb7188b97c-stream-volumes.tdb'
I: [pulseaudio] database.c: Successfully opened 'stream-volumes' database file '/data/states/4d241e2ccd4041b080d75ecb7188b97c-stream-volumes.tdb'.
D: [pulseaudio] protocol-dbus.c: Interface org.PulseAudio.Ext.StreamRestore1 added for object /org/pulseaudio/stream_restore1
I: [pulseaudio] module.c: Loaded "module-stream-restore" (index: #1; argument: "").
D: [pulseaudio] database-tdb.c: Opened TDB database '/data/states/4d241e2ccd4041b080d75ecb7188b97c-card-database.tdb'
I: [pulseaudio] database.c: Successfully opened 'card-database' database file '/data/states/4d241e2ccd4041b080d75ecb7188b97c-card-database.tdb'.
I: [pulseaudio] module.c: Loaded "module-card-restore" (index: #2; argument: "").
I: [pulseaudio] module.c: Loaded "module-switch-on-port-available" (index: #3; argument: "").
I: [pulseaudio] module.c: Loaded "module-switch-on-connect" (index: #4; argument: "").
D: [pulseaudio] module-udev-detect.c: /dev/snd/controlC0 is accessible: yes
W: [pulseaudio] module-udev-detect.c: Failed to open /proc/asound/card0: No such file or directory
D: [pulseaudio] module-udev-detect.c: /devices/platform/soc/3f00b840.mailbox/bcm2835_audio/sound/card0 is busy: no
E: [pulseaudio] core-rtclock.c: Assertion 'clock_gettime(CLOCK_REALTIME, &ts) == 0' failed at ../src/pulsecore/core-rtclock.c:93, function pa_rtclock_get(). Aborting.
Пошел искать в интернете как это чинить.
Нашел огромный тред на официальном форуме HA — https://community.home-assistant.io/t/solved-hassio-audio-is-in-boot-loop-and-spams-my-syslog-with-errors/282538
Там есть такое решение.
Сначала нужно скопировать файл default.json
root@raspberrypi:/etc/docker# ls
daemon.json key.json
root@raspberrypi:/etc/docker# wget https://raw.githubusercontent.com/moby/moby/bc6f4cc7032544553d2304a5b47ba235dbfe5b9c/profiles/seccomp/default.json
--2021-02-25 07:02:25-- https://raw.githubusercontent.com/moby/moby/bc6f4cc7032544553d2304a5b47ba235dbfe5b9c/profiles/seccomp/default.json
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12909 (13K) [text/plain]
Saving to: ‘default.json’
default.json 100%[============================================================================================>] 12.61K --.-KB/s in 0.002s
2021-02-25 07:02:26 (6.81 MB/s) - ‘default.json’ saved [12909/12909]
root@raspberrypi:/etc/docker# ls
daemon.json default.json key.json
root@raspberrypi:/etc/docker#
А дальше нужно отредактировать этот файл.
Вот как выглядят первые несколько строк этого файла:
{
"defaultAction": "SCMP_ACT_ERRNO",
"archMap": [
{
"architecture": "SCMP_ARCH_X86_64",
Нужно сделать вот так (заменить SCMP_ACT_ERRNO на SCMP_ACT_TRACE):
{
"defaultAction": "SCMP_ACT_TRACE",
"archMap": [
{
"architecture": "SCMP_ARCH_X86_64",
Потом нужно поправить файл /etc/docker/daemon.json (если файла нет, то его нужно создать). Сделать чтобы там было вот так (стоит заранее сохранить этот файл чтобы в случае нобходимости можно было его вернуть):
{
"log-driver": "journald",
"seccomp-profile": "/etc/docker/default.json",
"storage-driver": "overlay2"
}
И перезагрузить raspberry pi.
После загрузки контейнер HA перестает потреблять много CPU: