Forum Discussion
mahnsc
Nimbostratus
Jan 13, 2009Selectively Disabling Keep-Alives
This is probably going to be another odd-ball post but there is a good reason for it.
We have a site with a recently discovered bug that sends our app servers into full garbage collec...
hoolio
Cirrostratus
Jan 14, 2009Interesting... I hadn't read that part of the RFC before. I'm surprised that neither HttpFox or Fiddler would show the retry. Are you running tcpdump on the client or LTM? Do you see the retried request on the client VLAN? If you run tcpdump on the client using a tool like Wireshark, do you actually see the request being sent from the client?
Another thing to check is if you have the pool's 'Action on Service Down' set to Reselect. I'm not sure whether this action would be taken if the pool member was marked down by a monitor or if it's also used when the pool member takes longer than the idle timeout to respond. If the latter was true and you had Reselect enabled, LTM would resend the request to a new pool member.
I still don't remember ever seeing a browser automatically retry a request after receiving a RST. If that is indeed what is happening here, is the problem then that the server takes more than the LTM's idle timeout (default of 5min) to start sending the response? So the client retried the request and it eats up server resources? If so, can you test by existing the idle timeout on the client TCP profile to a bit longer than the time you expect the server to take to respond? Tweaking the idle timeout might be more ideal than blocking the client's subsequent retries. If modifying the TCP profile fixes the problem, you could consider using an iRule to dynamically extend the idle timeout for these specific types of requests. You can do this using IP::idle_timeout:
http://devcentral.f5.com/wiki/default.aspx/iRules/ip__idle_timeout
when HTTP_REQUEST {
if {$some_condition == 1}{
log local0. "original timeout: [IP::idle_timeout]"
IP::idle_timeout 1801
log local0. "updated timeout: [IP::idle_timeout]"
}
}
when SERVER_CONNECTED {
log local0. "original timeout: [IP::idle_timeout]"
if {$update_serverside_idle_timeout}{
IP::idle_timeout 1802
log local0. "updated timeout: [IP::idle_timeout]"
}
}
Aaron
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects