--- workspace/mod_jk/native/common/jk_ajp_common.c 2014-08-19 12:21:41.482639285 +0200 +++ workspace/mod_jk/native/common/jk_ajp_common.c 2014-08-19 12:35:48.971260070 +0200 @@ -1041,6 +1041,10 @@ int ajp_connect_to_endpoint(ajp_endpoint return JK_FALSE; } ae->worker->s->connected++; + /* Update maximum number of connections + */ + if (ae->worker->s->connected > ae->worker->s->max_connected) + ae->worker->s->max_connected = ae->worker->s->connected; /* set last_access only if needed */ if (ae->worker->cache_timeout > 0) --- workspace/mod_jk/native/common/jk_shm.h 2014-07-24 11:34:00.491471625 +0200 +++ workspace/mod_jk/native/common/jk_shm.h 2014-08-19 12:31:58.082915741 +0200 @@ -97,6 +97,8 @@ struct jk_shm_ajp_worker /* current error state (runtime) of the worker */ volatile int state; /* Statistical data */ + /* Maximum number of connected channels */ + volatile int max_connected; /* Number of currently connected channels */ volatile int connected; /* Number of currently busy channels */ --- workspace/mod_jk/native/common/jk_status.c 2014-07-24 11:34:00.498471696 +0200 +++ workspace/mod_jk/native/common/jk_status.c 2014-08-19 12:32:06.162997834 +0200 @@ -263,7 +263,7 @@ "State" \ "Acc" \ "ErrCERE" \ - "WrRdBusyMaxConLRLE" \ + "WrRdBusyMaxConMxConLRLE" \ "\n" #define JK_STATUS_SHOW_AJP_ROW "" \ "%s" \ @@ -277,6 +277,7 @@ "%d" \ "%d" \ "%d" \ + "%d" \ "%s" \ "\n" #define JK_STATUS_SHOW_LB_HEAD "" \ @@ -308,7 +309,7 @@ "DFM" \ "VAccSess" \ "ErrCERE" \ - "WrRdBusyMaxCon" \ + "WrRdBusyMaxConMxCon" \ "" JK_STATUS_ARG_LBM_TEXT_ROUTE "" \ "RRCdRsLRLE" \ "\n" @@ -329,6 +330,7 @@ "%d" \ "%d" \ "%d" \ + "%d" \ "%s" \ "%s" \ "%s" \ @@ -1849,6 +1851,7 @@ static void display_worker_ajp_details(j aw->s->busy, aw->s->max_busy, aw->s->connected, + aw->s->max_connected, wr->route, wr->redirect ? (*wr->redirect ? wr->redirect : " ") : " ", wr->domain ? (*wr->domain ? wr->domain : " ") : " ", @@ -1871,6 +1874,7 @@ static void display_worker_ajp_details(j aw->s->busy, aw->s->max_busy, aw->s->connected, + aw->s->max_connected, delta_reset, rc_time > 0 ? buf_time : " "); } @@ -1928,6 +1932,7 @@ static void display_worker_ajp_details(j jk_print_xml_att_int(s, off+2, "busy", aw->s->busy); jk_print_xml_att_int(s, off+2, "max_busy", aw->s->max_busy); jk_print_xml_att_int(s, off+2, "connected", aw->s->connected); + jk_print_xml_att_int(s, off+2, "max_connected", aw->s->max_connected); if (lb) { jk_print_xml_att_int(s, off+2, "time_to_recover_min", rs_min); jk_print_xml_att_int(s, off+2, "time_to_recover_max", rs_max); @@ -1995,6 +2000,7 @@ static void display_worker_ajp_details(j jk_printf(s, " busy=%d", aw->s->busy); jk_printf(s, " max_busy=%d", aw->s->max_busy); jk_printf(s, " connected=%d", aw->s->connected); + jk_printf(s, " max_connected=%d", aw->s->max_connected); if (lb) { jk_printf(s, " time_to_recover_min=%d", rs_min); jk_printf(s, " time_to_recover_max=%d", rs_max); @@ -2059,6 +2065,7 @@ static void display_worker_ajp_details(j jk_print_prop_att_int(s, w, ajp_name, "busy", aw->s->busy); jk_print_prop_att_int(s, w, ajp_name, "max_busy", aw->s->max_busy); jk_print_prop_att_int(s, w, ajp_name, "connected", aw->s->connected); + jk_print_prop_att_int(s, w, ajp_name, "max_connected", aw->s->max_connected); if (lb) { jk_print_prop_att_int(s, w, ajp_name, "time_to_recover_min", rs_min); jk_print_prop_att_int(s, w, ajp_name, "time_to_recover_max", rs_max); @@ -3726,6 +3733,7 @@ static void display_legend(jk_ws_service "BusyCurrent number of busy connections\n" "MaxMaximum number of busy connections\n" "ConCurrent number of backend connections\n" + "MxConMaximum number of backend connections\n" "RRRoute redirect\n" "CdCluster domain\n" "RsRecovery scheduled in app. min/max seconds\n"