gen_tcp erhalten extrem hohe CPU

8

Entschuldigung, dass ich ein Erlang-Neuling bin und vielleicht eine dumme Frage stelle. Aber bitte hilf mir, das Problem zu lösen.

Ich habe einen Erlang-Server geschrieben, um den zu ersetzen, den ich mit Node.js verwende, was mein gesamtes Gedächtnis verschlang, und ich bete, dass Erlang ein Ausweg sein könnte. Der Server funktioniert ordnungsgemäß im Komponententest und im internen Test, ist aber im Stresstest einer hohen CPU-Belastung ausgesetzt.

Nach dem Trimmen habe ich festgestellt, dass der CPU-Burst auf den TCP-Empfang von Clients zurückzuführen war.

%Vor%

Ich habe versucht, den Prozess zu Beginn der Funktion 10 Stunden lang schlafen zu lassen (um zu verhindern, dass er den Empfang anruft), die CPU ist überhaupt nicht geplatzt. Daher schließe ich, dass der Burst der CPU aufgrund TCP empfangen wird. (Bitte korrigieren Sie mich, wenn ich einen Fehler gemacht habe)

Hier finden Sie Informationen zu meinem Stresstest:

  1. Starten Sie den Erlang Server mit: erl + zdbl 2097151 -K Wahr + A 128 + P
  2. 5000000 verbinden Sie 5000 Clients mit dem Erlang-Server, der jeweils verbunden ist
  3. client sendet alle 1 min nach dem
  4. alle 2 Byte Daten an den Server
  5. Verbindungen sind fertig, (d. h. nur die 2-Byte-Daten pro Minute werden ausgeführt), die CPU platzt auf ~ 30% sy (von "oben")

Ich verwende eine Amazon Linux AMI (große Instanz, 64-Bit) für den Erlang-Server. Ist der Burst aufgrund des Linux? Da ich keine Ahnung habe, wie das System die CPU verbrauchen wird. Oder ist es das Problem meines schlechten Codes? (Ich glaube schon ...)

In der Realität erhalten unsere Server nicht nur Ping Pong, sondern auch Nachrichten, die viel mehr laden ... Dies ist nur der erste Schritt ...

Millionen von Dank an jeden, der mich retten kann.

Anita ~ *

~~~~~~~~~~~~~~~~~~~~

Informationen über große Instanz (als Referenz):

  • 7,5 GB Speicher
  • 4 EC2 Compute Units (2 virtuelle Kerne mit je 2 EC2 Compute Units)
  • 850 GB Instanzenspeicher
  • 64-Bit-Plattform
  • I / O-Leistung: Hoch
Anita 11.10.2012, 03:48
quelle

1 Antwort

1

Dieser Artikel über Aufbauen eines nicht blockierenden TCP-Servers mit OTP-Prinzipien könnte für Sie eine interessante Lektüre sein. Sie können sich auch die Ranch ansehen, die von Cowboy der Erlang HTTP-Server, der eine sehr große Anzahl von Verbindungen unterstützen kann und dabei wenig Speicherbedarf hat.

    
Tilman 11.10.2012 05:34
quelle