S
SS
Has anyone come across this before:
I am pacing out a load of traffic from multiple clients to a
multi-threaded server (one thread/client), and back again.
As I add more clients, at some point I *think* I reach the limitation
of the network bandwidth. Anyway, at this point the server and clients
all eventually enter OutputStream.write() (where the OutputStream is
the stream attached to the relevant socket) and never return. No
exceptions are thrown either, and everything just sits there.
Each client is only active while it sends a specific amount of data
(eg. 10MB), then it ceases execution. I would have thought therefore,
that if the bandwidth limit was passed, the individual transmission
speeds would be reduced until clients start to finished their
transmissions and the bandwidth would be regained. The transmissions
should be ultimately successful, assuming the network buffers were not
flooded (in which case I would expect an exception from write()).
But, it never finishes, no matter how long I leave it.
If I then start to kill individual clients, exceptions are thrown in
the server as the sockets are closed, and these exceptions can be seen
to come from OutputStream.write(), indicating that the server had
entered write(), and never left until the client died.
It seems to me like write() should either throw an exception or return
pretty much immediately, but it does neither, therefore locking up the
server.
Anyone know what this problem is?
Thanks a lot,
SS
It's a Linux platform btw, using Kaffe and Sun VMs and Sun compiler.
I am pacing out a load of traffic from multiple clients to a
multi-threaded server (one thread/client), and back again.
As I add more clients, at some point I *think* I reach the limitation
of the network bandwidth. Anyway, at this point the server and clients
all eventually enter OutputStream.write() (where the OutputStream is
the stream attached to the relevant socket) and never return. No
exceptions are thrown either, and everything just sits there.
Each client is only active while it sends a specific amount of data
(eg. 10MB), then it ceases execution. I would have thought therefore,
that if the bandwidth limit was passed, the individual transmission
speeds would be reduced until clients start to finished their
transmissions and the bandwidth would be regained. The transmissions
should be ultimately successful, assuming the network buffers were not
flooded (in which case I would expect an exception from write()).
But, it never finishes, no matter how long I leave it.
If I then start to kill individual clients, exceptions are thrown in
the server as the sockets are closed, and these exceptions can be seen
to come from OutputStream.write(), indicating that the server had
entered write(), and never left until the client died.
It seems to me like write() should either throw an exception or return
pretty much immediately, but it does neither, therefore locking up the
server.
Anyone know what this problem is?
Thanks a lot,
SS
It's a Linux platform btw, using Kaffe and Sun VMs and Sun compiler.