Сколько транзакций в секунду может обрабатывать стандартное оборудование?

Я запускаю geth в частной сети с помощью следующей команды:

geth --datadir firstserver --mine --minerthreads 1 --networkid 1300 --rpcport 8000  --rpcaddr 127.0.0.1 --port 30303 --rpcapi="db,eth,net,web3,personal,admin" --rpc --maxpeers 3 --nodiscover  --cache=2048 --memprofilerate=100 --targetgaslimit 210000000000  console

У меня 8 ГБ оперативной памяти и четырехъядерный процессор. Я запускаю 1 поток майнера.

Когда я запускаю 24 транзакции в секунду из jmeter, система работает нормально, но когда я увеличиваю ее до 28 транзакций в секунду, система зависает.

Использование ЦП составляет 370%, использование памяти - 90%, и я не могу выполнять какую-либо работу на этом сервере. Я хочу получать более 200 транзакций в секунду, как мне этого добиться? Что нужно сделать, чтобы добиться таких скоростей?

Я переместил обсуждение в чат для лучшей удобочитаемости, пожалуйста, не оставляйте комментарий здесь, а присоединитесь к чату , указанному в этом комментарии, чтобы обсудить тему.
Вы должны быть более конкретными в отношении того, с чем связана транзакция. Транзакция с контрактом требует больше процессорного времени, чем транзакция с пустой учетной записью. Не могли бы вы предоставить более подробную информацию, чтобы я мог более адекватно ответить на ваш вопрос?
@ДжеффриВ. любой вид сделки. предположим, я выполняю функцию для обновления переменной контракта.
@Himansushharma, вы не можете сказать «любая транзакция». Большие сложные контракты требуют больше времени для выполнения, чем маленькие. Это как спросить "сколько программ я могу поместить в 1 Гб оперативной памяти" - это зависит от размера программы. Транзакции повсюду не являются хорошим показателем для Эфириума из-за их произвольного характера.
Я думаю, это зависит от того, используете ли вы HDD или SSD. Обычно HDD является узким местом
Это происходило из-за web3 . Поскольку каждое подтверждение транзакции требует времени, поэтому web3 поддерживает все их с помощью settimeout и проверяет наличие подтверждения. так что в этом случае, если я делаю много транзакций, очередь settimeout заполняется и причиняет столько вреда. Это было за 6 месяцев до этого.

Ответы (1)

Вопрос старый, но я думаю, он заслуживает общего ответа. Для таких проблем в основном есть две возможности:

  • либо у вас не хватает оперативной памяти

  • или у вас недостаточно вычислительной мощности (которую вы можете увеличить за счет большего количества процессоров)

Чтобы решить между этими двумя проблемами, вы можете посмотреть на использование ЦП и памяти, но в некоторых случаях (например, в вашем) этого недостаточно. Таким образом, хороший способ узнать это — просмотреть данные во время майнинга (например, с помощью htop или top). В начале каждый из ваших процессоров должен быть загружен на 100%, а использование памяти должно увеличиваться медленно. Затем в какой-то момент должно произойти одно из следующего:

  1. использование оперативной памяти приближается к 80-100%, использование подкачки начинает увеличиваться, а использование процессора уменьшается .

  2. использование вашей оперативной памяти остается постоянным, каждое использование процессора остается близким к 100%.

В первом случае у вас недостаточно оперативной памяти. Во втором случае вам не хватает вычислительной мощности.

В вашем случае вы сказали, что достигли 360% использования ЦП. Если это среднее использование (как указано временем GNU), то я бы сказал, что это проблема с оперативной памятью (остальное у вас должно быть >= 390%).

Я надеюсь, что это помогает.