Sorry about that last message, for some reason it lost it's formatting On Nov 16, 6:44 pm, Michael Lyons <[email protected]> wrote: > Strangely enough I'm going to be testing load balancing next week > across physical servers as I have provisioned another server last week > for the staging environment to test this out. > In our case the workers get tied up as they are contacting website > services which sometimes can be really slow (up to 120 seconds) > causing the load balancers queue to grow. My idea with the load > balancer was so I can spin up a new worker process when the queue > becomes too large, which is what I can do currently and it works > perfectly, it's just that the load balancer is consuming more > resources than it needs to while the machine is really not under any > other stress. > I've just done some quick profile and all the action seems to be > called from AbstractMsmqListener.PeekMessageOnBackgroundThread. It > spends 53% of its time in calls to > MsmqLoadBalancer.HandlePeekedMessage and it's children with the > remaining 47% in AbstractMsmqListener.TryPeek and it's children. > So over a total period of 4 minutes RSB consumed 183 seconds out of > 240 seconds of CPU time excluding my app's time. Which I think is a > bit excessive particularly since it peeked at 226130 messages. > Shouldn't the load balancer pause for a second if it failed to get in > contact with any of the workers, instead of just blindly retrying? > Here are the top offenders in csv format - if you want I can email you > a full csv (it's actually tab delimited) or a pdf. > Total Time with children (ms), Average Time with children (ms), Total > for self (ms), Average for self (ms), Calls, Method name > +183366,0.8,11384,0.1,226122,Rhino.ServiceBus.LoadBalancer.MsmqLoadBalancer > .HandlePeekedMessage(Rhino.ServiceBus.Msmq.OpenedQueue,System.Messaging.Mes > sage) > +160651,0.7,4743,0,226130,Rhino.ServiceBus.Msmq.AbstractMsmqListener.TryPee > k(Rhino.ServiceBus.Msmq.OpenedQueue,System.Messaging.Message&) > +155724,0.7,155724,0.7,226130,Rhino.ServiceBus.Msmq.OpenedQueue.Peek(System > .TimeSpan) > +134270,0.6,134138,0.6,226125,Rhino.ServiceBus.Msmq.OpenedQueue.TryGetMessa > geFromQueue(System.String)29787,0.2,1159,0,180430,Rhino.ServiceBus.LoadBala > ncer.MsmqLoadBalancer.HandleStandardMessage(Rhino.ServiceBus.Msmq.OpenedQue > ue,System.Messaging.Message)28569,0.2,28546,0.2,180430,Rhino.ServiceBus.Msm > q.OpenedQueue.Send(System.Messaging.Message)7759,0,1312,0,180432,Rhino.Serv > iceBus.LoadBalancer.MsmqLoadBalancer.PersistEndpoint(Rhino.ServiceBus.Msmq. > OpenedQueue,System.Messaging.Message)3825,0,3825,0,180432,Rhino.ServiceBus. > Msmq.MsmqUtil.GetQueueUri(System.Messaging.MessageQueue)2622,0,2622,0,18043 > 1,Rhino.ServiceBus.DataStructures.Set`1.Add(T) > On Nov 16, 4:39 pm, Corey Kaylor <[email protected]> wrote: > > > > > > > > > I am happy to take any form of contribution you can offer. > > > By adding additional worker endpoints I mean. > > > Load Balancer 1, 5 threads, deployed to MachineA > > 1 worker endpoint, configured to send to Machine1\queue1.readyforwork, 5 > > threads, deployed to NewMachineB > > 2 worker endpoint, configured to send to Machine1\queue1.readyforwork, 5 > > threads, deployed to NewMachineC > > > Load balancing although completely *possible* to run on one machine, was > > designed to distribute load to multiple machines. You're not gaining any > > benefits from load balancing when there is only one worker sending ready > > for work messages to the load balancer. You would be better off in this > > case just having two endpoints without load balancing. > > > On Tue, Nov 15, 2011 at 10:28 PM, Michael Lyons <[email protected]>wrote: > > > > I've run EQATEC profiler against the code and when the load balancer > > > process is under load it it records no activity between snapshots > > > indicating it is sitting in RSB code. > > > > I'd be happy to spot profile RSB in my app and point out where the > > > high CPU is coming from but I'm assuming you already have a fair idea. > > > > What do you mean by adding additional worker endpoints? Can you point > > > me to an example. > > > > On Nov 16, 3:40 pm, Corey Kaylor <[email protected]> wrote: > > > > I would try changing the thread counts on the consumers and the load > > > > balancer, and possibly add additional worker endpoint(s). > > > > > Ayende in previous conversations has recommended thread counts that are > > > > equal to the number of cores on the machine. I have found that isn't > > > always > > > > a perfect recipe. So in our case we have run load tests and changing the > > > > configuration of threads for each machine. > > > > > When changing the thread counts on each test run, try to observe which > > > > specific process is utilizing the most CPU. > > > > > There may be places to optimize for sure, but it sounds to me like > > > threads > > > > are competing for priority. > > > > > On Tue, Nov 15, 2011 at 9:24 PM, Michael Lyons <[email protected]> > > > wrote: > > > > > Yes you're correct, it's a staging environment where we do our testing > > > > > before releasing into production. > > > > > > That's pretty much the situation. > > > > > > Here are the xml configurations for the 2 load balancers: > > > > > > <loadBalancer threadCount="5" > > > > > endpoint="msmq://localhost/notifier.loadbalancer" > > > > > readyForWorkEndpoint="msmq://localhost/ > > > > > notifier.loadbalancer.acceptingwork" > > > > > /> > > > > > > <loadBalancer threadCount="5" > > > > > endpoint="msmq://localhost/processor.loadbalancer" > > > > > readyForWorkEndpoint="msmq://localhost/ > > > > > processor.loadbalancer.acceptingwork" > > > > > /> > > > > > > Consumers xml configuration is: > > > > > > <bus threadCount="20" > > > > > loadBalancerEndpoint="msmq://localhost/ > > > > > processor.loadbalancer.acceptingwork" > > > > > numberOfRetries="5" > > > > > endpoint="msmq://localhost/processor" > > > > > /> > > > > > > <bus threadCount="20" > > > > > loadBalancerEndpoint="msmq://localhost/ > > > > > notifier.loadbalancer.acceptingwork" > > > > > numberOfRetries="5" > > > > > endpoint="msmq://localhost/notifier" > > > > > /> > > > > > > On Nov 16, 3:13 pm, Corey Kaylor <[email protected]> wrote: > > > > > > To summarize your setup. > > > > > > > Load Balancer 1, configured for messages belonging to NamespaceA, > > > with 5 > > > > > > threads, deployed to MachineA\queue1 > > > > > > 1 worker endpoint sending sending ready for work to > > > > > > MachineA\queue1.readyforwork, configured with 20 threads, deployed > > > > > > to > > > > > > MachineA > > > > > > > Load Balancer 2, configured for messages belonging to NamespaceB, > > > with 5 > > > > > > threads, deployed to MachineA\queue2 > > > > > > 1 worker endpoint sending ready for work to > > > > > > MachineA\queue2.readyforwork, configured with 20 threads, deployed > > > > > > to > > > > > > MachineA > > > > > > > I assumed by staging server that you mean staging environment that > > > > > > is > > > > > > configured similarly above but with different machine specs as > > > > > > you've > > > > > > stated. > > > > > > > Is this correct? > > > > > > > On Tue, Nov 15, 2011 at 8:12 PM, Michael Lyons <[email protected] > > > > > > wrote: > > > > > > > The load balancers are configured with the readyForWorkEndpoint > > > > > > > attribute on the loadBalancer xml element. > > > > > > > > System is a quad core 2.83Ghz core 2 duo, on the staging server > > > which > > > > > > > is running an older single core 2.8Ghz xeon (Dell 2650) with hyper > > > > > > > threading it sits at about 80% and in production it sits between > > > 40 to > > > > > > > 80% on a quad core 2.8Ghz xeon (Dell R210) where it is allocated 2 > > > > > > > cores > > > > > > > > Forgot to mention that RSB is version 2.2 > > > > > > > > On Nov 16, 1:17 pm, Corey Kaylor <[email protected]> wrote: > > > > > > > > Also, how many cores are on the load balancer machine? There > > > > > shouldn't be > > > > > > > > that much demand on the cpu, but having said that it really > > > depends > > > > > on > > > > > > > the > > > > > > > > circumstances and environment. > > > > > > > > > On Tue, Nov 15, 2011 at 7:15 PM, Corey Kaylor <[email protected] > > > > > > wrote: > > > > > > > > > Is each load balancer configured with a ready for work uri? > > > > > > > > > > On Mon, Nov 14, 2011 at 5:06 PM, Michael Lyons < > > > > > [email protected] > > > > > > > >wrote: > > > > > > > > > >> When using the load balancer with RSB I'm seeing the CPU runs > > > at > > > > > near > > > > > > > > >> 100% when the consumers are all busy which causes the > > > consumers > > > > > to run > > > > > > > > >> slower and be free less often. > > > > > > > > >> It can be simulated easily by setting up a load balancer with > > > no > > > > > > > > >> consumers listening to it and trying to send out some > > > messages to > > > > > the > > > > > > > > >> consumer. > > > > > > > > > >> In my specific situation I have 2 load balancers with 5 > > > threads > > > > > each > > > > > > > > >> (each load balancer runs a separate queue with different > > > types of > > > > > > > > >> messages), there is a consumer waiting at the other end of > > > each > > > > > load > > > > > > > > >> balancer with another 20 threads each. If one of the load > > > > > balancers > > > > > > > gets > > > > > > > > >> congested then all consumers run slow. When I ran the load > > > > > balancer > > > > > > > without > > > > > > > > >> load it averaged ~200ms to process a message, once the load > > > > > balancer > > > > > > > was > > > > > > > > >> under load (achieved by queuing over 1000 messages) it > > > resulted > > > > > in an > > > > > > > > >> average time of ~1750ms, which results in the user waiting 8 > > > times > > > > > > > longer > > > > > > > > >> for their tasks to complete. > > > > > > > > > >> Is there anyway around this? > > > > > > > > > >> -- > > > > > > > > >> You received this message because you are subscribed to the > > > Google > > > > > > > Groups > > ... > > read more »
-- You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en.
