Pular para o conteúdo principal

Too many open files

informação

Se você precisar da ajuda de um especialista para resolver este ou qualquer outro problema, consulte nossos termos de suporte técnico.

Descrição

Com um grande número de câmeras, em torno de 128, você pode encontrar os limites do Inotify — ao adicionar uma câmera, a seguinte mensagem pode aparecer no log do servidor:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0xe8 pc=0xdda663]

goroutine 1258 [running]:
gitlab.com/yuccastream/yucca/pkg/runner/latest.(*Runner).GetStats(...)
/builds/yuccastream/yucca/pkg/runner/latest/runner.go:327
gitlab.com/yuccastream/yucca/pkg/server/executor/exec.(*Worker).GetStream(0xc002b74500)
/builds/yuccastream/yucca/pkg/server/executor/exec/worker.go:188 +0xa3
gitlab.com/yuccastream/yucca/pkg/server/executor/exec.(*Executor).StatusStream(0xc0003f01c0, 0xc00074b6c0)
/builds/yuccastream/yucca/pkg/server/executor/exec/executor.go:126 +0xb8
gitlab.com/yuccastream/yucca/pkg/server.(*Server).stateWatcher(0xc000c1e000)
/builds/yuccastream/yucca/pkg/server/server.go:914 +0x233
created by gitlab.com/yuccastream/yucca/pkg/server.(*Server).Start in goroutine 1
/builds/yuccastream/yucca/pkg/server/server.go:695 +0x4db

E no log de uma das câmeras:

Error: too many open files

Por padrão, muitas distribuições Linux têm os seguintes parâmetros definidos:

grep NOFILE /etc/systemd/system.conf
#DefaultLimitNOFILE=1024:524288

Solução

Para aumentar os limites, execute:

sed -i 's/^#DefaultLimitNOFILE=.*/DefaultLimitNOFILE=10240:524288/' /etc/systemd/system.conf

E também aumente esse parâmetro para a unit systemd yucca.service, no arquivo /lib/systemd/system/yucca.service:

mkdir -p /etc/systemd/system/yucca.service.d/
cat > /etc/systemd/system/yucca.service.d/override.conf << 'EOF'
[Service]
LimitNOFILE=10240
EOF

sudo systemctl daemon-reload
sudo systemctl cat yucca # проверить

Depois aplique as configurações e reinicie o processo yucca.service:

sudo systemctl restart yucca.service