cancel
Showing results for 
Search instead for 
Did you mean: 

javax.jms.JMSException: Packet length

Former Member
0 Kudos

Hi all,

running SP16 on HPUX PA 11.11 I try to check if the server node is running and responding by

telnet 50010

the response is:

Packet length (1702390132) bigger than the max specified!öö¿javax.jms.JMSException: Packet length (1702390132) bigger than the max specified!

at com.sap.jms.protocol.MultiPacketImpl.createPackets(MultiPacketImpl.java:160)

at com.sap.jms.protocol.MultiPacketImpl.getNotCompletePacket(MultiPacketImpl.java:106)

at com.sap.jms.server.protocol.manager.PacketManagerImpl.processData(PacketManagerImpl.java:77)

at com.sap.jms.dispatcher.JMSDispatcherFrame.parseRequest(JMSDispatcherFrame.java:509)

at com.sap.engine.core.manipulator.TCPRunnableConnection.sleepRead(TCPRunnableConnection.java:806)

at com.sap.engine.core.manipulator.TCPRunnableConnection.access$700(TCPRunnableConnection.java:26)

at com.sap.engine.core.manipulator.TCPRunnableConnection$ReadThread.run(TCPRunnableConnection.java:1140)

at com.sap.engine.frame.core.thread.Task.run(Task.java:64)

at com.sap.engine.core.thread.impl6.SingleThread.execute(SingleThread.java:78)

at com.sap.engine.core.thread.impl6.SingleThread.run(SingleThread.java:148)

Any one an idea how to change the defined package size?

On the second server node it runs fine.

Best regards,

Michael

Accepted Solutions (0)

Answers (1)

Answers (1)

0 Kudos

Hi Michael,

50010 is the default port the JMS Provider service is listening to on the dispatcher nodes of the cluster. Connecting to it via telnet is not a valid operation - JMS interprets the incoming data on this port as JMS protocol communication. It expects a packet with specific structure - it interprets the value at a certain offset within the stream as the packet's length. In your case this happened to be an extremely large value (1702390132) and the JMS Provider simlpy refused to allocate memory for a packet with this size:) This is a precaution against denial-of-service attacks on the JMS port. The limitation is hard-coded (10 MB) and cannot be configured.

So pinging the JMS port is not a correct way to check server node availability. The reason you get exception on one node and on another not is that the JMS port is opened on the dispatcher nodes. I suppose you have been "successful" in pinging the server nodes.

Cheers,

Stoyan

Former Member
0 Kudos

Hi Stoyan,

thanks a lot for the explenation.

But why did I get this error only with server0 and not with server1?

Just doing a ping is only on phyical or logical IP and not on the port.

So how to check the server node is responding and working fine?

Best regards,

Michael

0 Kudos

Hi Michael,

As I understood, you are trying to check the server availability by executing

telnet <hostname> 50010

which obviously includes port number.

What do you mean by getting this error with server0 and not with server1? How do you ping one particular cluster node? A remote request passes through the dispatcher and it on its turn dispatches the request to one of the available server nodes behind it. The exception you are getting accessing the JMS port is thrown on the dispatcher (see the stack trace), it does not reach any server.

I don't think you can check the availability of a particular server node by any remote request.

You can check the general cluster availability by pinging some safe and well-defined port as the HTTP port (50000). You can also create and deploy a servlet and "ping" the cluster by accessing it.

Regards,

Stoyan

Former Member
0 Kudos

Hi Stoyan,

well, doing

telnet hostname 50010 gets the error

telnet hostname 50020 runs fine

so server0 (port xxx10) gets the error but not server1 (port xxx20).

ping is not dealing with a port so I do not do a ping but a telnet on a defined port.

ping will result by the server and not by the j2ee in no way

Best regards,

Michael

0 Kudos

Hi Michael,

When I said "ping", I meant the telnet access, not the ping DOS command, sorry.

But you are wrong about the telnet command and the ports.

The telnet command syntax is

telnet [host [port]]

and 50010 in your case is definitely interpreted as port number. The correct usage of the telnet command should be

telnet host 50008

as 50008 is the telnet port.

Second, you make an incorrect association between cluster elements (server0, server1) and port numbers (50010, 50020). There is absolutely no relation between these.

You cannot telnet to a single server node. You always telnet to the dispatcher, and only after you have established a telnet connection to the dispatcher, you can "jump" to particular server nodes by the J2EE telnet commands

jump 0

jump 1

etc. If you do not believe me, open the SAP Management Console (MMC) and you will see that the "J2EE Telnet" command is available only right-clicking dispatchers, and on the servers it is disabled. Server nodes are not directly accessible from the "outside world", they are hidden behind dispatchers.

It is the dispatcher that has open ports and the suffix of the port number is related to the port type/service (and it has nothing to do with index numbers of server nodes):

50000 is the HTTP port

50004 is the P4 (RMI) port

50008 is the telnet port

50010 is the JMS port

and so on.

Regards,

Stoyan