Search This Blog

Tuesday, 22 October 2013

T3 Protocol

Handling weblogic T3 protocol message size issues
Do not be surprised when you see an error like below in weblogic server logs.
Incoming message of size: '10000080' bytes exceeds the configured maximum of: '10000000' bytes for protocol: 't3

In nutshell, above error happens when weblogic server is trying to process a message of size more than 10MB.
Most of the times it is JMS message processing of course, it  need not be always JMS.

First lets understand what is T3 and how it works.

T3 is a proprietary communication protocol being used by WLS to handle data traffic between java to java applications or JVM to JVM
WLS has a mechanism to keep track of JVMs with which it is connected and always creates just one connection to the connected JVM.
These connected JVMs could be server JVM to server JVM or client JVM to server JVM.

For example, if a Java client accesses JSP page  and a JDBC connection pool on WebLogic Server, a single network connection is established between the WebLogic Server JVM and the client JVM. This eliminates the need of creating multiple connections and managing them.T3 protocol also does multiplexing data packets invisibly on the single connection

Features of T3 protocol
·         High performance for various above said reasons
·         Multiplexes various data sources data packets into single connection
·         Minimizes the packet size
By default T3 protocol is configured to handle messages of size 10 MB, if server receives messages more than 10 MB size then it can not handle.

As per my knowledge there are three options to handles this.

Option#1(Preferable)

Try to analyze why server is receiving that huge payload, who is sending it.In general it is not advisable to handle huge messages unless really really required.
10 MB set by WLS is reasonable value and most appropriate for many environments.
so solution is try to reduce the payload size.
Before sending  huge message I suggest transform it to condensed form.
XML is verbose.So lets be very careful about it.

Solution to reduce paylaod size:
Transform from source element to target element only if source element has data in it.This has to be done for each element.This will reduce the size.

Option#2(Chunked messages)
There are some ways to send big messages in small pieces.For example in http, we can use chunked mode transfer and OSB also supports transferring messages in chunked mode.

Option#3(Increasing message size)

If option#1 and 2 does not help you then you can try out this.

1. Go to servers--->protocols--->general--->max message size--->change it to required value (Do it for both the admin and the soa servers)

2. Go to servers--->configuration--->server start--->arguments--->-Dweblogic.MaxMessageSize = same value given in previous step

bounce the servers.