http: принять ошибку: принять tcp 127.0.0.1:8545: принять: слишком много открытых файлов; повторная попытка через 5 мс

Я работаю geth -rpcи nodeнапрямую взаимодействую с блокчейном. При выполнении большого количества запросов я заметил следующую ошибку:

http: Accept error: accept tcp 127.0.0.1:8545: accept: too many open files; retrying in 5ms

Как я могу настроить geth для обработки большего количества подключений? Мой код:

var Web3 = require("web3")
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// first
txs = [];
// second

for (i = 0; i < 100; i++) {

web3.eth.getBlock(4000000+i, function(error, block) {
        if(!error) {
            for (j = 0; j < block.transactions.length; j++) { 
            web3.eth.getTransaction(block.transactions[j], function(error, transaction) {
                    if(!error) {
                        txs.push({block: transaction.blockNumber, from: transaction.from, to: transaction.to, value: transaction.value.toNumber(), id: block.transactions.indexOf(transaction.hash)})
                    }
                    else
                    console.error(error);
                });
            }
        }
        else
        console.error(error);
    });
}

Ответы (1)

Если вы работаете в Ubuntu или аналогичной версии Linux, то для каждого пользователя (мягкое) ограничение на количество файловых дескрипторов составляет 1024.

$ ulimit -n
1024

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

Подробности о том, как это сделать, есть в предыдущем ответе .

(Вы также можете найти эту тему полезной: Общие полезные фрагменты кода JavaScript для geth )

Невозможно, по крайней мере до версии 1.8.13-stable-225171a4, увеличить количество открытых файлов больше 2048. Вы можете увеличить их до любого числа, которое вам нравится в системе unix, ограничениях пользователя или процесса, но geth ограничивает его обратно до 2048. Мы постоянно страдаем от ошибки слишком большого количества открытых файлов, и, насколько нам известно, нет никакого решения или обходного пути, кроме изменения ограничений в постоянном цикле в фоновом режиме.