ERROR: external command failed: cmd.StdoutPipe() failed: pipe2: too many open files

День добрый!
В логе правил wb-rules встретил такую ошибку.

ERROR: external command failed: cmd.StdoutPipe() failed: pipe2: too many open files

Приложен архив диагностики.

приложен диагностический архив, доступен только сотрудникам поддержки
(337,7 КБ)
wb-rules_20241203T123547.log (26,9 КБ)

Добрый день.
Покажите пожалуйста вывод

cat /proc/sys/fs/file-nr

ну и

ulimit -u

и

ulimit -n

также покажите вывод

ls /proc/$(pidof wb-rules)/fd/ | wc -l
cat /proc/sys/fs/file-nr

3040 0 2147483647

ulimit -u

7847

ulimit -n

1024

ls /proc/$(pidof wb-rules)/fd/ | wc -l

ls: cannot access ‘11613/fd/’: No such file or directory
45

А какой pid у процесса wb-rules?
Проверьте и еще раз посмоотрите сколько открыто им объектов.
Также, вероятно то что вызывается с помощью spawn - вызывается несколько раз подряд, выведите в лог вызовы, понятнее будет.

ls /proc/26090/fd/ | wc -l

897

Спойлер

Поподробнее про

Также, вероятно то что вызывается с помощью spawn - вызывается несколько раз подряд, выведите в лог вызовы, понятнее будет.

Проверьте количество открываемых файлов. Судя по потребелнию реурсов - возможно наличие циклов. Ну и количество открытых объектов близко к лимиту для процесса (1024).
Если оно превышает лимит - в лог выводится про это сообщение.

Опять же, о каких файлах идет речь, если

ls /mnt/data/etc/wb-rules/

'Clear MQTT.js'     MAP-toVirtual_WB-v-T1-1.js   MAP-toVirtual_WB-v-T2-1.js   WB-SMS-Center.js   WB-V-CHOK1-1.js   WB-V-HOLOD1-1.js   WB-V-K2-1.js   rules.js
 GC-Nasosnaya1.js   MAP-toVirtual_WB-v-T1-2.js   MAP-toVirtual_WB-v-T2-2.js   WB-V-CH1-1.js      WB-V-CHOK2-1.js   WB-V-K1-1.js       alarms.conf

Циклов нет, эти правила работают уже давно. Они бы убили контроллер очень быстро.
Время работы контроллера на сейчас уже 43 дня.

Список открытых файлов. Большинство /dev/mem открыты wb-rules.
lsof-R.log (3,7 МБ)
lsof.log (3,5 МБ)

Нет, тут речь именно о файлах, то есть то что выводится ls /proc/$(pidof wb-rules)/fd/ | wc -l, имено открытые файлы.
Но чувствую что моей компетенции мало, и прежде чем рекомендовать поменять (описать для wb-rules) в /etc/security/limits.conf лимит “побольше” Как в документации limits.conf(5) — libpam-modules — Debian bullseye — Debian Manpages
посоветуюсь с настоящими разрабочиками.

Слышно что-то по нашим баранам?

У меня подобное воспроизводится только если из правил запускаю несколько тысяч sh сессий.
Проверьте, что именно из скриптов вызывается.

Вот сейчас как раз 1024

ls /proc/$(pidof wb-rules)/fd/ | wc -l

Дополнил /etc/security/limits.conf строками

* soft nofile 4096
* hard nofile 65535

Но ничего не поменялось

Скрин

Я рекомендую, все ж определить причину.
Мне кажется - слишком много вызовов внешних процессов из скриптов.

А можно пояснить определение - вызов внешних процессов из скриптов?
Чтобы мы поняли друг-друга.
Или пример привести простой.

Использование GitHub - wirenboard/wb-rules: Rule engine for Wiren Board
То есть spawn, runShellCommand

Такой запрос есть только в одном скрипте с кнопкой, которая собирает данные с модулей.
И она жмется очень редко. Поставил счетчик нажатий на кнопку. Но не думаю что проблема в этом.

Спойлер

А вот если сделать systemctl restart wb-rules
и проверить количество - оно сразу большое или растет понемногу?
Гипотезу с вызовом внешних процессов осталвляю, но приоритет ниже конечно, если вызывается редко.

Привет!
За выходные, 22 дня, нажатий 0.
А файлов открытых 1017.
После перезапуска сразу 18, и, видимо, растет понемногу.

22 дня

ls /proc/$(pidof wb-rules)/fd/ | wc -l

Так, значит не в этом (скорее всего) дело.
У меня, что интересно, при аптайме 42 дня:

ls /proc/$(pidof wb-rules)/fd/ | wc -l
20

А если зайти в (каждое) правило, добавить что-то, пробел или комментарий и сохранить - после сохранения количество меняется? Если да - то, скорее всего найдется источник. и уже по этому скрипту можно будет попробовать воспроизвести чтобы отдать разработчикам.

Спустя 4 дня от моего сообщения ничего не поменялось.
Так же 18.

ls /proc/$(pidof wb-rules)/fd/ | wc -l
18

НО у меня есть подозрения что все это связано с модемом.
Правила связаны с модемом 100%. Через модем отправляются смс об ошибках.
И через некоторое время после полной перезагрузки WB модем перестает работать.
Он есть в системе, но оболочка его не видит.
Есть подозрения что он генерит файлы, а когда лимит заканчивается - он отваливается.
Как проверить?

Модем

Сети

Статус

Это довольно подозрительно.
А существует ли само соединение модема в NetworkManager? Его, соединения, файл в /etc/NetworkManager/system-connections

А через какое время? Ну и - если создайте выложите диагностический архив. После того как модем “пропадет”.