Wie viele Transaktionen pro Sekunde können von handelsüblicher Hardware verarbeitet werden?

Ich führe geth in einem privaten Netzwerk mit dem folgenden Befehl aus:

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

Ich habe 8 GB RAM und eine Quad-Core-CPU. Ich betreibe 1 Miner-Thread.

Wenn ich 24 Transaktionen pro Sekunde von jmeter ausführe, läuft das System einwandfrei, aber wenn ich es auf 28 Transaktionen pro Sekunde erhöhe, friert das System ein.

Die CPU-Auslastung beträgt 370 %, die Speicherauslastung 90 % und ich kann auf diesem Server nicht arbeiten. Ich möchte mehr als 200 Transaktionen pro Sekunde erzielen, wie kann ich das erreichen? Was muss ich tun, um solche Geschwindigkeiten zu erreichen?

Ich habe die Diskussion zur besseren Lesbarkeit in den Chat verschoben, bitte hinterlassen Sie hier keinen Kommentar, sondern treten Sie dem in diesem Kommentar verlinkten Chatraum bei, um das Thema zu diskutieren.
Sie müssen genauer angeben, womit die Transaktion abgewickelt wird. Eine Transaktion, die mit einem Vertrag abgewickelt wird, erfordert mehr CPU-Zeit als eine Transaktion, die mit einem leeren Konto abgewickelt wird. Könnten Sie einige weitere Details angeben, damit ich Ihre Frage vielleicht angemessener beantworten kann?
@JeffreyW. jede Art von Transaktion. Angenommen, ich führe eine Funktion aus, um die Vertragsvariable zu aktualisieren.
@Himanshusharma Sie können nicht "irgendeine Transaktion" sagen. Große komplexe Verträge erfordern mehr Zeit für die Ausführung als kleine. Es ist wie die Frage "Wie viele Programme passen in 1 GB RAM" - es hängt von der Größe des Programms ab. Die durchgehende Transaktion ist aufgrund ihrer willkürlichen Natur kein gutes Maß für Ethereum.
Ich denke, es hängt davon ab, ob Sie HDD oder SSD verwenden. Normalerweise ist HDD der Engpass
Dies geschah wegen web3 . Da jede Transaktionsbestätigung Zeit in Anspruch nimmt, verwaltet web3 sie alle bis settimeout und prüft auf Bestätigung. Also in diesem Fall, wenn ich viele Transaktionen mache, wird die Settimeout-Warteschlange voll und verursacht so viel Schaden. Das war vor 6 Monaten.

Antworten (1)

Die Frage ist alt, aber ich denke, sie verdient eine allgemeine Antwort. Für solche Probleme gibt es hauptsächlich zwei Möglichkeiten:

  • entweder hast du nicht genug ram

  • oder Sie haben nicht genug Rechenleistung (die Sie durch mehr CPUs erhöhen können)

Um zwischen diesen beiden Problemen zu entscheiden, können Sie sich die CPU- und Speichernutzung ansehen, aber in einigen Fällen (wie Ihrem) ist dies nicht ausreichend. Ein guter Weg, dies herauszufinden, besteht darin, sich die Daten anzusehen, während Sie schürfen (z. B. mit htop oder top). Zu Beginn sollten Ihre CPUs jeweils zu 100 % ausgelastet sein und Ihre Speicherauslastung langsam ansteigen. Dann sollte irgendwann eines der folgenden Dinge passieren:

  1. Ihre RAM-Nutzung nähert sich 80-100 %, Ihre Swap-Nutzung beginnt zu steigen und Ihre CPU-Nutzung sinkt .

  2. Ihre RAM-Nutzung bleibt konstant, jede CPU-Nutzung bleibt nahe 100%.

Im ersten Fall haben Sie nicht genug RAM. Im zweiten Fall haben Sie nicht genug Rechenleistung.

In Ihrem Fall sagten Sie, Sie hätten eine CPU-Auslastung von 360 % erreicht. Wenn es sich um eine durchschnittliche Nutzung handelt (wie von der GNU-Zeit ausgegeben), würde ich sagen, dass es sich um ein RAM-Problem handelt (Sie sollten sonst> = 390% haben).

Ich hoffe, es hilft.