构建高性能web之路------web服务器长连接

web服务器都提供长连接的方式,所谓长连接就是客户端一次请求完后,不关闭连接,保持一段时间的连接,下次此客户端再次请求时,不用创建新连接,复用所保持的连接即可。从理论上,长连接可以免去大量建立和关闭连接的资源消耗,但同时也有大量连接被占用的代价。因此可以初步判断长连接比短连接能带来更高的TPS,更低的CPU消耗,更少的IO,更高的内存占用,下面通过实战来验证。

服务器环境和测试工具可以见工具和环境准备篇

本次web服务器选用apache prefork模式,apache长短连接的选择可以配置httpd.conf里的KeepAlive选项,如:

KeepAlive On:长连接

KeepAlive Off:短连接

另外如果选择长连接还需配置KeepAliveTimeout和MaxKeepAliveRequests,其中KeepAliveTimeout为每个长连接服务端保持时长,默认配置为15秒,MaxKeepAliveRequests为每个长连接服务请求最大数,默认配置为100次,本次试验保持默认配置。

使用ab来压apache,如:

短连接环境下: /usr/alibaba/install/httpd-2.0.63-prefork/bin/ab -c 100 -n 1000000 http://localhost/

长连接环境下: /usr/alibaba/install/httpd-2.0.63-prefork/bin/ab -c 100 -n 1000000 -k http://localhost/

同时都已100个并发请求apache默认首页1000000次

然后通过ab测试结果、nmon收集资源消耗和strace跟踪实际调用三个维度来考察短连接和长连接的区别。

1)ab测试结果

短连接:

长连接:

从中不然发现,在其他参数和环境相同的情况下,长连接比短连接的TPS高很多,16804.02/sec vs 5242.33/sec,另外也不难发现长连接在connection上花的时间几乎为0

2)nmon 的测试结果

cpu消耗:

短连接

构建高性能web之路------web服务器长连接_第1张图片

长连接

构建高性能web之路------web服务器长连接_第2张图片

以上数据表明长连接比短连接消耗CPU较少

IO占用:

短连接

构建高性能web之路------web服务器长连接_第3张图片

长连接

构建高性能web之路------web服务器长连接_第4张图片

以上数据表明长连接比短连接IO占用更少

内存空闲:

短连接

长连接

以上数据表明长连接比短连接占用更多内存

3)strace结果

apache的prefork模式是每个请求由单独的子进程来响应,因此通过对其中的一个子进程跟踪来比较调用系统资源的次数

短连接:

长连接:

以上数据表明,长连接accept和shutdown次数仅为100次,而短连接为9997次,近100倍的差距,从这里就不难发现为什么长连接的TPS那么高了,省了这么多次系统调用,不快才怪啊。

本次试验得出验证来开始的理论分析:长连接比短连接能带来更高的TPS,更低的CPU消耗,更少的IO,更高的内存占用,更少的系统调用

你可能感兴趣的:(apache,Web)