BUG解决:部分JS等资源文件直接加载失败

记一次BUG解决

问题描述

近期用户反映系统经常页面加载不全,功能按钮失效,需要多次刷新才可用,失败率极高,已经影响了用户的使用,我们在本地使用却没有任何问题。后面跟踪发现,部署在服务器上的应用我们访问时,很多JS和资源文件会加载失败,而且失败概率较高,用户的问题就是因为缺少了JS文件和一些样式文件导致的。

排查及解决

猜测一:是不是网络原因?
因为客户使用的商密网,还是VPN,故网络不稳定的情况时有发生。但是进一步分析,就算网络较差,应该也只是加载较慢,不会直接加载失败。
猜测二:是否资源文件的路径不对?
因为每次加载失败的资源文件不固定,而且多次刷新之后就能成功了。所以这个可能性排除。
猜测三:Tomcat配置问题?
因为在本地访问是没有问题的,而一放到服务器上就会出现这个问题,故怀疑是否tomcat的配置有问题,后面果然在tomcat里面发现了一个奇怪的配置:
tomcat配置
去掉这个keepAliveTimeout=0的配置之后,BUG迎刃而解。

后续

后面查阅资料,keepAliveTimeout 这个字段是设置下次请求过来之前,持久连接保持的时间,如设置为0,则保持时间为0。这个参数如果不设置,则默认取connectionTimeout 这个参数的值。
这里写图片描述

持久连接(Keep-Alive)也叫做长连接,它是一种 TCP 的连接方式,连接会被浏览器和服务器所缓存,在下次连接同一服务器时,缓存的连接被重新使用。由于 HTTP 的无状态性,人们也一直很清楚“一次性”的 HTTP 通信。持久连接则减少了创建连接的开销,提高了性能。HTTP/1.1 已经支持长连接,大部分浏览器和服务器也提供了长连接的支持。
keepAliveTimeout:表示在下次请求过来之前,tomcat保持该连接多久。这就是说假如客户端不断有请求过来,且未超过过期时间,则该连接将一直保持。
maxKeepAliveRequests:表示该连接最大支持的请求数。超过该请求数的连接也将被关闭(此时就会返回一个Connection: close头给客户端)。

发布了40 篇原创文章 · 获赞 27 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章