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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章