? ? ? 最近在工作中遇到一個神奇的小問題刹缝,我決定好好記錄一下排故過程碗暗,以免別人被這個小問題絆住很久,也希望排故的過程細節(jié)和最終的解決方案能對被絆倒的同學有所幫助梢夯。
? ? ? ?我們打好了一個springboot的web 應用jar包言疗,上傳到windows server上測試,用java -jar xxx.jar啟動我們的應用颂砸。
? ? ? ?啟動后我看著滾動輸出的日志噪奄,一切正常,打開系統(tǒng)登錄頁面也正常人乓,登錄時卻一直轉圈圈勤篮,始終無法登錄。這是大多數遇到這個問題的常見現(xiàn)象色罚,無論是我的登錄頁面碰缔,還是在登錄后的任一請求后端的操作,都可能點擊后一直等待后端響應戳护。
? ? ? ? 因為是前后端分離的項目金抡,登錄頁面是由nginx運行的vue編譯后的靜態(tài)頁面,能打開腌且,說明前端代碼沒有問題梗肝。打開chrome debug模式,從network欄看到請求 502 報錯铺董,分析是后端api的問題巫击。
? ? ? ?登錄測試服務器查看應用日志,因為cmd界面也會輸出日志精续,我就沒有查看應用生成的log file坝锰,我看到cmd日志記錄未輸出,以為是應用的問題驻右,因為本地運行無異常什黑,想著是環(huán)境問題,就先考慮關閉cmd窗口堪夭,再來一遍java -jar xxx.jar愕把。這次就正常輸出日志拣凹,也能正常登錄。
? ? ? 就在我以為問題解決了的時候恨豁,我需要查看導出功能的SQL 和參數情況嚣镜,看是否正常,就點開服務器上cmd應用運行窗口橘蜜,選中日志中的sql語句菊匿,檢查一下入參和結果,都還正常计福。
? ? ? ?我返回網頁再輸入個單號測試下一單跌捆,這時神奇的事情發(fā)生了,查詢由是沒響應象颖,從chrome debug中查看佩厚,又是502超時,我想著不能一直重啟吧说订,前面的重啟也許并沒有真正定位到問題抄瓦,干脆這次就不重啟了,保留故障場景陶冷,嘗試搞清楚是什么問題導致的钙姊,全程操作我反思了一下,好像都是日常操作埂伦,在我本地idea run/debug模式都未曾遇到過這個情況煞额,以前在 centos服務器上java -jar啟動應用或 Nohup java -jar 啟動應用也未曾遇到過這個問題,在我另外一臺windows 10的電腦上啟動應用沾谜,本地訪問后臺應用也是能正常查詢和導出的立镶,怎么放到測試服務器上就時好時壞呢?這種問題說大不大类早,但真是令人費解,業(yè)務在緊鑼密鼓地配合測試嗜逻,開發(fā)這邊又感到無厘頭涩僻,各種技術原理分析也覺得沒問題,真是搞得人哭笑不得栈顷。
? ? ? ? 我在工作中習慣了先做原理分析和照單排查逆日,不想一碰到問題就問度娘,沒法萄凤,只能上網搜索一番室抽。很快發(fā)現(xiàn)了第一種方法,將cmd的屬性-【選項】-【編輯選項】-【快速編輯模式(C)】和【插入模式(I)】這兩項取消靡努,點擊【確定】坪圾,再關閉cmd運行框晓折,重新運行一下。
? ? ? ?這種解決方案的原理是windows cmd 默認開啟了“快速編輯模式”兽泄,當鼠標點擊了cmd任何區(qū)域時漓概,就自動進入了編輯模式,控制臺會等待你的輸入病梢,在等待期間整個進程都會被阻塞胃珍,也就造成我們看到的后臺httpservletrequest沒有響應,前端chrome debug收到 504 錯誤異常蜓陌。這時候也想清楚為何看了下日志就導致程序卡住了觅彰,原來一不小心選中了幾個日志中的數據,讓控制臺以為你要輸入字符钮热,而平時沒有遇到填抬,大多是因為啟動完就最小化,或者直接去看log file了霉旗,無形中也就避開了這個小問題痴奏。不過生產服務器也這么運行的話,萬一運維人員不小心關閉了窗口怎么辦厌秒?
? ? ? ?我找到了第二種辦法读拆,就是在jdk bin目錄下的javaw命令和 javaws 命令,平時我們都是通過java -jar來啟動應用鸵闪,就會出現(xiàn)開頭看到的cmd運行框檐晕,通過javaw -jar xxx.jar啟動我們的應用,就可以將后臺應用轉入后臺運行蚌讼,windows 任務管理器中仍然可以看到我們的java 進程辟灰。
? ? ? ?javaws命令啟動的是分布式網絡應用,適用于分布式啟動場景篡石,我們測試過程中無此需求芥喇,各位同學遇到此問題時可以嘗試用用。更多關于java javaw javaws命令的使用和區(qū)別凰萨,搜索引擎一搜就有很多帖子继控,在此就不再贅述。
? ? ? ?到此為止胖眷,問題根本原因已找到武通,解決方案也找到兩種,很完美的解決了問題珊搀,也提醒運維同事改變生產應用的部署方式冶忱,免得那天運維還弄出不安全事件。同時也發(fā)現(xiàn)建立解決方案的過程中境析,其實問題也在那里囚枪,解決方法也在那里派诬,中間這個橋梁就是我們搜索的關鍵詞、對技術的理解與分析過程眶拉∏О#或許開發(fā)同學的使命就是不斷找到這個橋梁,敲開一道道看似關閉的門忆植,這需要我們的耐心放可、技術積累和回到原點檢查分析的意識。
? ? ? 本著教學相長的原則朝刊,謹以此文記錄自己踩過的坑(排故過程的彎彎繞和操作過程的蹊蹺)耀里,問題雖小,但短期內要排故拾氓,也考驗著排故人的抗壓能力和深入分析的能力冯挎。寫得不完美,如果有一點點能幫助到各位技術同學咙鞍,也就挺好房官。