[squid-users] Error Resolution (TunnelStateData::Connection:: error )
Amos Jeffries
squid3 at treenet.co.nz
Fri Jun 12 09:44:25 UTC 2015
On 12/06/2015 5:39 p.m., Iruma Keisuke wrote:
> Thank you Amos.
> I really appreciate your response.
>
> We analyzed the trend of FD an error has occurred.
>
> 2015/06/01_08:52:35 nsu01pint-int01 [cache]2015/06/01 08:52:32|
> TunnelStateData::Connection:: error : FD 81: read/write failure: (110)
> Connection timed out
> Active file descriptors:
> File Type Tout Nread * Nwrite * Remote Address Description
> ---- ------ ---- -------- -------- ---------------------
> --------------------- ---------
> 81 Socket 86282 8100* 67977 XXX.XXXX.2.136:49907 Reading
> next request Date: Sun, 31 May 2015 23:32:30 GMT
> 81 Socket 86302 8100* 16753 XXX.XXXX.2.136:49944 Reading
> next request Date: Sun, 31 May 2015 23:37:30 GMT
> 81 Socket 86002 8100* 17395* XXX.XXXX.2.136:49944 Reading
> next request Date: Sun, 31 May 2015 23:42:30 GMT
> 81 Socket 85702 8100* 17395* XXX.XXXX.2.136:49944 Reading
> next request Date: Sun, 31 May 2015 23:47:30 GMT
> 81 Socket 85402 8100* 17395* XXX.XXXX.2.136:49944 Reading
> next request Date: Sun, 31 May 2015 23:52:30 GMT
> 81 Socket 86354 56810* 40697 XXX.XXXX.6.114:49687 Reading
> next request Date: Sun, 31 May 2015 23:57:30 GMT
> ↑
> Error while writing ?
>
> All it seems to have time out in writing.
> And, the time until the timeout is between 10 to 15 minutes.
>
> Are "Write_timeout" and "read_timeout" directive related to the error?
> "write_timeout" is a directive that does not exist in the 3.1 version.
> Though "write_timeout" can not be set, it works and cause a timeout in
> 15 minutes?
There is no write timeout, things either write immediately or as soon as
space on the network pipe becomes available. The processing Job waiting
for the write to finish can timeout, but that is completely different
from sockets layer.
It might be read_timeout, but IIRC that is internal and Squid uses
close() on the socket to send the signal to the other end. Not try to
read() and fail.
>
> I think this is also a relationship.
> http://www.squid-cache.org/Doc/config/half_closed_clients/
>> Squid can not tell the difference between a half-closed connection, and a fully closed one.
> 3.1 version "half_closed_clients" is off by default.
>
> I have this kind of guess.
>
> 1. Change the client to "half_closed".
> 2. squid write to FD.
> 3. Change the client to "fully_losed".
> 4. Since the "fully_losed" squid can not understand, squid attempts to
> write to the FD.
> 5. After 15 minutes, "write_timeout" occurs in squid
>
> Can I get your opinion?
Squid does understand fully closed (the state, no directive). If the
socket/FD were fully closed it would be a "read/write error connection
closed" message in the log.
In the world of sockets a close event by the remote end shows up as a
signal requesting a read(), when that read() is performed an error is
returned which explains what happened. I think this is what you are
seeing (eg "connection timed out" happend).
Why/how its let to get into that state is unclear and may be related to
a bug somewhere. But still unknown whether that place would be Squid,
client or server.
Timeout signalled by the TCP stack is possible and normal, though not
exactly common. As you saw it takes a while and usually connections get
closed when finished with instead of left waiting for a long time like
that, so you dont see this.
The exception is CONNECT tunnels (TunnelStateData) - Squid is not aware
of the protocol inside so must keep them open until the very last bytes
is passed and either the remote end or the client requesting it goes away.
PS. Eliezer packages current versions of Squid unofficially for RHEL.
You may want to try upgrading to that. It is not supported by RHEL, but
by Eliezer and us here. If you want to continue with the RHEL package
then I suggest its best to get in touch with them about problems (if
this is one).
Amos
More information about the squid-users
mailing list