Hi Patrik,
After further testing, I'm running into an issue I can't explain and I'm
hoping you could shed some light on it...
The simplest form that showcases the problem is the following setup:
Two actors... a Sender and a Receiver, using RemoteActorRefProvider. The
receiver is started on a known port and waits to receive "case class
Message(id: Int)" messages.
When the sender starts (as a different JVM process), it looks up the
ActorRef of the receiver, and then does: for i=1 to N { receiver !
Message(i) }
(the code for this is here:
https://github.com/borice/akka-remote-actor-flood-test)
What I'm seeing is that if I look at the amount of time it takes to receive
20K messages, that time depends on the value of N (which it shouldn't).
For example, when N=100,000, it takes about 500ms - 600ms to receive 20K
messages. When N=800,00, it takes 6-7 seconds (10x increase) per 20K
messages ....
The other weird thing is that the later batches of 20K messages are
received progressively faster.
If you look at the GitHub link above, the README.md file contains example
log output after running the application for different values of N.
I've ran both sender and receiver through a profiler (YourKit profiler) and
here's what I'm seeing:
For N = 100,000
<https://lh5.googleusercontent.com/-StPZXZuvXf4/Uy9hGzSyIbI/AAAAAAAAJ-c/NIpqSdavFTs/s3200/profile_100k.png>
For N = 800,000 (stopped capturing profiler data after receiver received
300,000 messages)
<https://lh5.googleusercontent.com/-u2dHrkV3YkM/Uy9d1zeaDKI/AAAAAAAAJ-Q/16tlNRzagOk/s3200/profile_800k.png>
>From the socket send/receive graphs it looks like the sender isn't sending
the data out as fast as the network can handle... (in other words, I'm
inclined to think that something in the sending side is not taking
advantage of all the network bandwidth available. The CPU usage was not
being maxed out either... the garbage collector wasn't working overly
hard... so I'm not sure I understand why using a different value for N (the
number of messages sent) matters to the amount of time each block of
messages is received.
Does this make sense to you?
One other usage for Akka I was planning is to retrieve streaming data from
a Microsoft Kinect from a service sending it via UDP, then do some
calculations on it, and send it back out to someone else via UDP. So this
would be a live continuous stream of data coming at (for now) 30
readings/second... but soon perhaps at 100 readings/second.
Thanks very much for your help!!!
Best,
Boris
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.