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.