[99s-extend] cowboy and chromium

Loïc Hoguin essen at ninenines.eu
Wed Apr 10 17:07:18 CEST 2013


It's running from the moment Cowboy starts expecting a new request up to 
the moment it got the request in full (excluding the body), then it's 
reset for the next request.

On 04/10/2013 05:05 PM, Sasa Juric wrote:
> Ok, just to make sure I understand:
> When I serve a request, and the connection is not closed due to keep-alive, will this timeout also apply?
>
>
> On Apr 10, 2013, at 5:01 PM, Loïc Hoguin wrote:
>
>> Means it's not a read timeout, but a timeout for the whole request up to and excluding the body (so an intentionally slow client will get disconnected at 5s).
>>
>> On 04/10/2013 04:56 PM, Sasa Juric wrote:
>>> Thanks!
>>>
>>> I was looking at the option, but was confused by description which states:
>>> Time in milliseconds a client has to send the full request line and headers.
>>>
>>> I'll give it a try and see how it works.
>>>
>>> Best regards,
>>> Sasa
>>>
>>> On Apr 10, 2013, at 4:51 PM, Loïc Hoguin wrote:
>>>
>>>> 'timeout' protocol option, in milliseconds.
>>>>
>>>> On 04/10/2013 04:50 PM, Sasa Juric wrote:
>>>>> I agree with you. In addition, I can't reproduce without the proxy, which confirms the suspicion.
>>>>>
>>>>> Looking at the code of mochiweb which I was using, the connection timeout is set to 5 minutes.
>>>>> The other factor, which I can confirm is that when the server terminates the connection, the proxy doesn't forward this to the client. Hence, the client and proxy probably "think" that connection is still active, and try to reuse it, but this doesn't work until timeout.
>>>>> Other browsers probably can gracefully handle this situation, but for some reason chromium is stuck to 60 seconds and after retry it presumably opens new connection and succeeds.
>>>>>
>>>>> Question: can I configure keep-alive timeout in Cowboy?
>>>>>
>>>>>
>>>>> On Apr 10, 2013, at 4:41 PM, Loïc Hoguin wrote:
>>>>>
>>>>>> On 04/10/2013 02:00 PM, Sasa Juric wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have recently in my production system replaced mochiweb with cowboy. The server generally works fine, except for a bizarre behavior which I cannot quite explain, so I post here, hoping to get some pointers.
>>>>>>>
>>>>>>> After replacing mochiweb with cowboy, I noticed that in chromium (other major browsers work fine) often (but not always) a request lasts a little more than a minute. Further inspection in chrome://net-internals showed that browser tries to send a request, times out after 60 sec, retries and then succeeds immediately. The key point is that it doesn't happen always. First couple of requests work fine, then all of a sudden one doesn't work. At the same time requests from other browsers (including chrome) on the same machine work fine.
>>>>>>>
>>>>>>> If I revert to mochiweb, the problem disappears. Other than web server related code, everything else is the same: the rest of my code, the server setup etc... In addition, I return same responses and headers in both versions.
>>>>>>>
>>>>>>> After many attempts and failures, I might have worked around the issue. Namely, I included <<"connection">>, <<"close">> in all responses. After this change, it seems that long requests are not occurring. In any case, I can't reproduce it anymore, whereas before the change I could have reproduce it easily.
>>>>>>>
>>>>>>> However, I'm not sure if I have really resolved the issue, I'm also not happy with connection closes since it degrades performance. And finally, I'm not sure if I quite understand the problem.
>>>>>>> The only theory I have is that due to keep-alive, chromium holds the connection, while cowboy closes it (I read somewhere that hardcoded timeout is 5 seconds, right?). In this case it might happen that chromium sends a request to a non existing socket and then hangs for a minute, waiting for the response which never arrives.
>>>>>>> This might further be amplified by the fact that in production, between browser and cowboy, there is a proxy/load balancer, so maybe load balancer still holds the connection despite the fact that server had closed it.
>>>>>>>
>>>>>>> This is the only theory I currently have, and I would like to hear if you guys have some other idea or any kind of helpful pointer?
>>>>>>
>>>>>> Haven't seen this happen on plain Cowboy. The proxy might be the culprit. See if you can reproduce without the proxy.
>>>>>>
>>>>>> --
>>>>>> Loïc Hoguin
>>>>>> Erlang Cowboy
>>>>>> Nine Nines
>>>>>> http://ninenines.eu
>>>>>
>>>>
>>>>
>>>> --
>>>> Loïc Hoguin
>>>> Erlang Cowboy
>>>> Nine Nines
>>>> http://ninenines.eu
>>>
>>
>>
>> --
>> Loïc Hoguin
>> Erlang Cowboy
>> Nine Nines
>> http://ninenines.eu
>


-- 
Loïc Hoguin
Erlang Cowboy
Nine Nines
http://ninenines.eu



More information about the Extend mailing list