Tomcat 启用gzip

1. 配置启用gzip 

vi conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
		   compression="on" 
		   compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" 
		   compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />

 

配置说明:

compression="on" 打开压缩功能 

compressionMinSize="2048" 启用压缩的最小内容大小,FileSize>=2048时才压缩

noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩 

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 启用压缩的资源类型

 

2. 测试gzip是否生效 

Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,我们可以用两种方法来验证压缩是否生效。

 

2.1 请求原生内容

curl -I http://xxx:8080/protoweb/test.txt

 

Wireshark抓包分析:

Get

 

HTTP 200 

抓包发现浏览器发送HTTP GET请求,随后接收到211个数据包,第211个包为HTTP 200结束包。请求该文件总耗时达5s。 

 

 

2.2 请求压缩内容

curl -H 'Accept-Encoding: gzip,deflate' -I http://xxx:8080/protoweb/test.txt

抓包发现与2.1发送数据包一致,压缩未生效?

谷歌搜索发现与NIO零拷贝有关,正如nginx会默认开启 sendfile on,Tomcat也是默认开启useSendfile="true",sendfile属性原型见Linux下系统调用sendfile(),sendfile()高效的原因是因为避免文件多次在内核态用户态间的拷贝(零拷贝方式),直接在内核中通过socket发送至网络。

WEB服务器启用压缩功能虽说可节省网络宽带,加快网络传输速度,但却对服务器带来了CPU压力,大文件压缩对服务器而言得不偿失。

Tomcat 默认>48kb,不启用压缩。

 

解决方案:

全局配置,关闭sendfile特性。

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
		   useSendfile="false"
		   compression="on" 
		   compressionMinSize="50" noCompressionUserAgents="gozilla, traviata" 
		   compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />

 设置useSendfile=false。

 

sevlet配置:

限制sendfile文件大小。

<servlet>
	<init-param>
		<param-name>sendfileSize</param-name>
		<param-value>96</param-value>
	</init-param>
</servlet>

 

由于是静态资源,采用全局配置关闭sendfile特性,测试:
gzip 200

 

 通过抓包发现,现在只有14个响应包,请求总耗时才0.06s,的确很快。 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值