Hi,
I'm evaluating mod_jk1.2.19 with 8 Tomcat application servers.
I found problems about loadbalancing method.
* method=Request
Suddenly, balancing wouldn't be equally.
When the requests were concentrated a particular Tomcat server (e.g.
tomcat1). It was caused by sticky session when a particular user
accessed a lot, user accessed the page that contains a lot of images,
and so on.
After that, mod_jk concentrated the requests to other Tomcat servers.
So tomcat1 would have idle time.
Here is the data of CPU usage when I ran the test with 2 Tomcat servers.
http://jbento.sourceforge.net/modjk/CLIENT_200.html
Sometime, tomcat1 had high CPU usage, but tomcat2 had idle.
They worked alternately.
* method=Busyness
Balancing cannot be equally when Apache has been restarted.
Because mod_jk has the offset value that is used to set the start
point of searching endpoints on each Apache process. So, each process
selects a particular Tomcat server that is the top of the endpoint
list.
Here is the summary of jk-status report.
Name V Acc Err
kuma03 0 9075 0
kuma04 0 10013 0
kuma05 0 9199 0
kuma06 0 8996 0
kuma07 0 8914 0
kuma08 0 7043 0
kuma09 0 6234 0
kuma10 0 5260 0
kuma10 is the bottom of endpoint list and it didn't work so much.
--
So, in my opinion, lb_value should be counted up when the request
doesn't have the sessionid. It is advisability because the sticky
session causes the status concentrated.
I made the patch to make the new method "Session".
I run the tests and the requests were balanced equally.
Thanks.
-Takayuki
Index: jk/native/common/jk_util.c
===================================================================
--- jk/native/common/jk_util.c (revision 475677)
+++ jk/native/common/jk_util.c (working copy)
@@ -932,6 +932,8 @@
return JK_LB_METHOD_REQUESTS;
else if (*v == 'b' || *v == 'B' || *v == '2')
return JK_LB_METHOD_BUSYNESS;
+ else if (*v == 's' || *v == 'S' || *v == '3')
+ return JK_LB_METHOD_SESSION;
else
return JK_LB_METHOD_DEF;
}
Index: jk/native/common/jk_lb_worker.c
===================================================================
--- jk/native/common/jk_lb_worker.c (revision 475677)
+++ jk/native/common/jk_lb_worker.c (working copy)
@@ -55,6 +55,7 @@
JK_LB_METHOD_TEXT_REQUESTS,
JK_LB_METHOD_TEXT_TRAFFIC,
JK_LB_METHOD_TEXT_BUSYNESS,
+ JK_LB_METHOD_TEXT_SESSION,
NULL
};
@@ -799,6 +800,8 @@
rec->s->busy++;
if (p->worker->lbmethod == JK_LB_METHOD_REQUESTS)
rec->s->lb_value += rec->s->lb_mult;
+ else if (p->worker->lbmethod == JK_LB_METHOD_SESSION &&
!sessionid)
+ rec->s->lb_value += rec->s->lb_mult;
else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS)
rec->s->lb_value += rec->s->lb_mult;
if (rec->s->busy > rec->s->max_busy)
Index: jk/native/common/jk_lb_worker.h
===================================================================
--- jk/native/common/jk_lb_worker.h (revision 475677)
+++ jk/native/common/jk_lb_worker.h (working copy)
@@ -42,10 +42,12 @@
#define JK_LB_METHOD_REQUESTS (1)
#define JK_LB_METHOD_TRAFFIC (2)
#define JK_LB_METHOD_BUSYNESS (3)
+#define JK_LB_METHOD_SESSION (4)
#define JK_LB_METHOD_DEF (JK_LB_METHOD_REQUESTS)
#define JK_LB_METHOD_TEXT_REQUESTS ("Request")
#define JK_LB_METHOD_TEXT_TRAFFIC ("Traffic")
#define JK_LB_METHOD_TEXT_BUSYNESS ("Busyness")
+#define JK_LB_METHOD_TEXT_SESSION ("Session")
#define JK_LB_METHOD_TEXT_DEF (JK_LB_METHOD_TEXT_REQUESTS)
#define JK_LB_LOCK_OPTIMISTIC (1)
#define JK_LB_LOCK_PESSIMISTIC (2)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]