On 14.09.2009 09:22, balakarthik.baska...@wipro.com wrote:
> - Will the access log contain an entry for each request that is seen in
> the jk log?I can see a corresponding entry in the accesslog for an entry
> in the jk log in my local setup.But I coulnt interpret the same from my
> prod log.I hope getting this will provide some direction on what element
> is creating the timeout as from the prod log I can see one entry haing
> the a timeout in the same time perios as that of the other requests.Pl
> let me know how to interpret the files.I have sent you the prod log file
> in my prev mail.Pl let me know if you would like to resend the same or
> any other details.I too the all entries around 13:44:08 from both logs
> from prod.

Yes, all requests handled by mod_jk will be logged as usual in the
Apache access log (after finishing the request). If mod_jk needs to do
retries or a failover, you still get only one entry in the access log.
The duration logged is the full duration from beginning working on the
request until logging.

You should add a couple of interesting data to your httpd LogFormat:

%d: duration in microsenconds

%P %{tid}P: process and thread id. Those get logged in the mod_jk log
file to, so your can do correlations between access log and mod_jk log.

Maybe the Session Cookie (incoming and outgoing):

%{JSESSIONID}C %{Set-Cookie}o

and a couple of JK notes (details on
http://tomcat.apache.org/connectors-doc/reference/apache.html):

%{JK_LB_FIRST_NAME}n
%{JK_LB_FIRST_STATE}n
%{JK_LB_LAST_NAME}n
%{JK_LB_LAST_ACCESSED}n
%{JK_LB_LAST_ERRORS}n
%{JK_LB_LAST_BUSY}n
%{JK_LB_LAST_ACTIVATION}n
%{JK_LB_LAST_STATE}n


> # Define list of workers that will be used
> # for mapping requests
> # The configuration directives are valid
> # for the mod_jk version 1.2.18 and later
> #
> worker.list=loadbalancer,status
> 
> 
> # Define Node1
> # modify the host as your host IP or DNS name.
> worker.node1.port=8109
> worker.node1.host=localhost
> worker.node1.type=ajp13
> worker.node1.lbfactor=1
> #worker.node1.prepost_timeout=10000 #Not required if using ping_mode=A
> #worker.node1.connect_timeout=80000 #Not required if using ping_mode=A
> worker.node1.ping_mode=A #As of mod_jk 1.2.27
> #worker.node1.activation=a
> #worker.node1.connection_pool_size=55

Let mod_jk decide on the connection_pool_size (when using Apache), do
not activate this line.

> worker.node1.socket_keepalive=True
> worker.node1.socket_timeout=5

I would not use a socket_timeout (personal preference).

> #worker.node1.connection_pool_timeout=30
> #worker.node1.recovery_options=7
> #worker.node1.ping_timeout=80000
> #worker.node1.prepost_timeout=80000
> #worker.node1.max_packet_size=65536
> #worker.node1.reply_timeout=5000
> worker.node1.retries=2

I would add the following (also to node2):

worker.node1.recovery_options=7
worker.node1.ping_timeout=10000
worker.node1.socket_connect_timeout=2000
worker.node1.connection_pool_minsize=0
worker.node1.connection_pool_timeout=600

# CAUTION: you need to set connectionTimeout in your Tomcat
# or JBoss connector to the same value
# as connection_pool_timeout. But for mod_jk it is in
# seconds, for Tomcat or JBoss in milliseconds.
# So add connectionTimeout="600000" to your AJP connectors.

Personally I would also add a reply timeout, but that depends on the
application:

worker.node1.reply_timeout=300000

and then in order to not make nodes fail because of few reply timeouts:

worker.loadbalancer.max_reply_timeouts=20

Finally I would add the following to the balancer,
which was introduced in 1.2.28:

worker.loadbalancer.error_escalation_time=0

> # Define Node2
> # modify the host as your host IP or DNS name.
> worker.node2.port=8209
> worker.node2.host= localhost
> worker.node2.type=ajp13
> worker.node2.lbfactor=1
> #worker.node2.prepost_timeout=10000 #Not required if using ping_mode=A
> #worker.node2.connect_timeout=80000 #Not required if using ping_mode=A
> worker.node2.ping_mode=A #As of mod_jk 1.2.27
> #worker.node2.activation=a
> #worker.node2.connection_pool_size=55
> worker.node2.socket_keepalive=True
> worker.node2.socket_timeout=5
> #worker.node2.connection_pool_timeout=30
> #worker.node2.recovery_options=7
> #worker.node2.ping_timeout=80000
> #worker.node2.prepost_timeout=80000
> #worker.node2.max_packet_size=65536
> #worker.node2.reply_timeout=5000
> worker.node2.retries=2
> 
> 
> 
> # Load-balancing behaviour
> worker.loadbalancer.type=lb
> worker.loadbalancer.method=B
> worker.loadbalancer.balance_workers=node1,node2
> 
> # Status worker for managing load balancer
> worker.status.type=status
> 
> 
> 
> #worker.node1.fail_on_status=304
> #worker.node2.fail_on_status=304
> 
> #worker.node1.socket_connect_timeout=2000
> #worker.node2.socket_connect_timeout=2000

You might also want to use a template like this:

worker.template.host=localhost
worker.template.type=ajp13
worker.template.lbfactor=1
worker.template.ping_mode=A #As of mod_jk 1.2.27
worker.template.socket_keepalive=True
worker.template.retries=2
...

and then remove all of the above attributes form node1 and node2 and
instead use

worker.node1.reference=worker.template
worker.node1.port=8109
worker.node2.reference=worker.template
worker.node2.port=8209

That way you save a couple of lines and it gets easier to keep node1 and
node2 consistent.


> # Load mod_jk module
> # Specify the filename of the mod_jk lib
> LoadModule jk_module modules/mod_jk.so
> 
> # Where to find workers.properties
> JkWorkersFile conf/workers.properties
> 
> # Where to put jk logs
> JkLogFile logs/mod_jk.log

Maybe you want to use rotatelogs here, like

JkLogFile "|/my/path/to/apache/bin/rotatelogs
/my/path/to/apache/logs/mod_jk.log_%Y%m%d%H%M%S

> # Set the jk log level [debug/error/info]
> #JkLogLevel info
> JkLogLevel debug
> #JkLogLevel error

"info" for production

> # Select the log format
> JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

Remoce this one.

> # JkOptions indicates to send SSK KEY SIZE
> # Notes: 
> # 1) Changed from +ForwardURICompat. 
> # 2) For mod_rewrite compatibility, use +ForwardURIProxy (default since 
> 1.2.24)
> # See http://tomcat.apache.org/security-jk.html  
> JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories

Remove "+ForwardURICompatUnparsed" unless you know what you do.
Use the other ones also only if you need them.

> # JkRequestLogFormat
> JkRequestLogFormat "%w %V %T %m %q %s"

Remove that one and use the above tips for improving your access log
logging.

> # Mount your applications
> #JkMount /__application__/* loadbalancer
> # Let Apache serve the images
> #JkUnMount /__application__/images/* loadbalancer
> 
> # You can use external file for mount points.
> # It will be checked for updates each 60 seconds.
> # The format of the file is: /url=worker
> # /examples/*=loadbalancer
> JkMountFile conf/uriworkermap.properties

I hope that file is fine.

> # Add shared memory.
> # This directive is present with 1.2.10 and
> # later versions of mod_jk, and is needed for
> # for load balancing to work properly
> # Note: Replaced JkShmFile logs/jk.shm due to SELinux issues. Refer to 
> # https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225452
> JkShmFile run/jk.shm
> 
> 
> 
> # Add the jkstatus mount point
> JkMount /jkstatus/* status
> JkMount /test/* loadbalancer
> JkMount /PioneerCycling/* loadbalancer

If you are using VirtualHosts in Apache, and your JkMount are not
working, add "JkMountCopy All".

> # Add jkstatus for managing runtime data
> <Location /jkstatus>
> JkMount status

This JkMount line here is somewhat duplicate, because you already
mounted /jkstatus/*.

> Order deny,allow
> Deny from all
> Allow from 127.0.0.1
> </Location>

Regards,

Rainer

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to