Tomcat 启用gzip

阅读更多

1. 配置启用gzip 

vi conf/server.xml

 

配置说明:

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抓包分析:

Tomcat 启用gzip_第1张图片

 

Tomcat 启用gzip_第2张图片 

抓包发现浏览器发送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特性。

 设置useSendfile=false。

 

sevlet配置:

限制sendfile文件大小。


	
		sendfileSize
		96
	

 

由于是静态资源,采用全局配置关闭sendfile特性,测试:
Tomcat 启用gzip_第3张图片

 

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

 

 

 

 

 

 

  • Tomcat 启用gzip_第4张图片
  • 大小: 57.6 KB
  • Tomcat 启用gzip_第5张图片
  • 大小: 53.5 KB
  • Tomcat 启用gzip_第6张图片
  • 大小: 41.5 KB
  • 查看图片附件

你可能感兴趣的:(tomcat8,gzip)