День добрый!
В логе правил wb-rules встретил такую ошибку.
ERROR: external command failed: cmd.StdoutPipe() failed: pipe2: too many open files
Приложен архив диагностики.
wb-rules_20241203T123547.log (26,9 КБ)
День добрый!
В логе правил wb-rules встретил такую ошибку.
ERROR: external command failed: cmd.StdoutPipe() failed: pipe2: too many open files
Приложен архив диагностики.
Добрый день.
Покажите пожалуйста вывод
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, и, видимо, растет понемногу.
Так, значит не в этом (скорее всего) дело.
У меня, что интересно, при аптайме 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
А через какое время? Ну и - если создайте выложите диагностический архив. После того как модем “пропадет”.