Apache-如何理解keepalive参数的这种工作状态?

WordPress 开发 WordPress 开发 主题:1098 回复:2322

Apache-如何理解keepalive参数的这种工作状态?

夜无邪 发布于 2017-03-17 字数 1596 浏览 1113 回复 1

测试环境:
客户端并发100线程访问(超过webserver负荷上限)
单页处理时间10秒

设置 thread-max=1 keepalive=0 结果很好理解:
thread-max=1,thread-keepalive=0
process... [12:05 34]
process... [12:05 44]
process... [12:05 54]

10秒处理一页,然后下一页
不开启keepalive情况下:
thread-max=2,thread-keepalive=0
process... [13:44 15]
process... [13:44 15]

process... [13:44 25]
process... [13:44 25]

thread-max=3,thread-keepalive=0
process... [13:46 45]
process... [13:46 45]
process... [13:46 45]

process... [13:46 55]
process... [13:46 55]
process... [13:46 55]

都是没有问题的

在开启keepalive后就不太好理解了:
thread-max=3,thread-keepalive=2
process... [14:02 46]
process... [14:02 46]
process... [14:02 46]

process... [14:02 56]

process... [14:03 06]
process... [14:03 06]
process... [14:03 06]

process... [14:03 16]
process... [14:03 16]
process... [14:03 16]

thread-max=3,thread-keepalive=1
process... [16:39 25]
process... [16:39 25]
process... [16:39 25]

process... [16:39 35]
process... [16:39 35]

process... [16:39 45]
process... [16:39 45]
process... [16:39 45]

process... [16:39 55]
process... [16:39 55]

我认为这是线程复用(keepalive)导致的IO阻塞,是否正确?
能否详细解释处理流程以帮助加深理解keepalive的这种工作状态?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

瑾兮 2017-09-30 1 楼

Keepalive 是由TCP/IP协议栈内部实现的一种连接检测机制,网络应用程序不会参与到其实现,只是引用其接口功能而已.默认情况下,协议栈将会在连接建立后2小时后发送KEEPALIVE包检测连接状况,并有一个超时时间,这些参数都是可以用应用程序接口进行修改的.一般情况下这些东西不会影响到上层应用的功能,因为应用程序并不关系其具体实现.