I have a Java program running on Windows (Citrix machine) that sends a request to a Java application server on Linux; This dispatch mechanism is common.
The Windows Java program (calling her W ) opens a socket to listen on the port provided by the OS, say 1234 to get the results. Then it calls the โsendโ service on the server with the โbusiness requestโ. This service splits the request and sends it to other servers (call them S1 ... Sn ), and synchronously returns the number of tasks to the client.
In my tests, there are 13 jobs sent to several servers, and within 2 seconds all the servers have finished processing their tasks and will try to send the results back to the W socket.
In the magazines, I can see that 9 jobs are received by W (this number varies from test to test). So I'm trying to find the 4 remaining jobs. If I do netstat in this windows window, I see that 4 sockets are open:
TCP W:4373 S5:48197 ESTABLISHED TCP W:4373 S5:48198 ESTABLISHED TCP W:4373 S6:57642 ESTABLISHED TCP W:4373 S7:48295 ESTABLISHED
If I dump the W stream, I see 4 threads trying to read from these sockets and apparently got stuck in java.net.SocketInputStream.socketRead0(Native Method) .
If I go into each of S and make netstat , I see that some bytes are still in the send queue. This number of bytes does not move for 15 minutes. (Below is a collection of netstat on different machines):
Proto Recv-Q Send-Q Local Address Foreign Addr State tcp 0 6385 S1:48197 W:4373 ESTABLISHED tcp 0 6005 S1:48198 W:4373 ESTABLISHED tcp 0 6868 S6:57642 W:4373 ESTABLISHED tcp 0 6787 S7:48295 W:4373 ESTABLISHED
If I dump the streams on the servers, I see that the streams are also stuck in java.net.SocketInputStream.socketRead0(Native Method) . I would expect to write, but maybe they are waiting for ACK? (Not sure here whether it will be mapped to Java? Should this not directly handle the TCP protocol?)
Now itโs very strange: after 15 minutes (and itโs always 15 minutes), the results are received, the sockets are closed, and everything continues as usual.
It has always worked. S servers have moved to another data center, so W and S no longer in the same data center. In addition, S is located behind the firewall. All ports must be authorized between S and W (I said). Secret is really a 15 minute delay. I thought this could be some protection against DDOS?
I am not an expert on the network, so I asked for help, but no one could help me. I spent 30 minutes with a guy who grabbed packets from Wireshark (formerly Ethereal), but for security reasons I can't look at the result. He must analyze this and return to me. I asked for firewall logs; the same story.
I am not root or the administrator in these blocks, now I do not know what to do ... I do not expect a decision from you guys, but some ideas on how to progress will be wonderful!