Я работаю 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);
});
}
Если вы работаете в Ubuntu или аналогичной версии Linux, то для каждого пользователя (мягкое) ограничение на количество файловых дескрипторов составляет 1024
.
$ ulimit -n
1024
У вас есть несколько вариантов обойти ошибку, которую вы видите, в том числе увеличить как мягкие, так и жесткие ограничения для рассматриваемого пользователя.
Подробности о том, как это сделать, есть в предыдущем ответе .
(Вы также можете найти эту тему полезной: Общие полезные фрагменты кода JavaScript для geth )
Джон Литтл