今天要在公司測試 Server 建立測試站台,在完成設定 Application Pool 與站台指定位置後按下啟動,跳出'程序無法存取檔案,因為檔案正由另一個程序使用。(發生例外狀況於HRESULT:0x80070020) 錯誤訊息,訊息內容看似有檔案被 lock 住造成啟動異常,但追根究底之後會發現其異常原因蠻單純的,以下就針對解決此問題的方式做說明,若有問題歡迎提出一起討論或是給予指導。
查詢 PID
測試站台使用 port 號為 6379,在 windows 中可以下 netstat -ano 指令查看哪個 process 咬住 port
PS C:\> netstat -ano可以得知 ProvessID 13276 目前佔用 6379 Port
工作管理員
開啟工作管理員切換到詳細服務 tab,從 PID 13276 得知是 vpnkit.exe,後面參數是 -- ethernet hyperv,vpnkit.exe 是 Docker 的一部分,因此需要在 docker 中下指令確認更多資訊
透過 docker ps 指令確認目前執行的 container 中是否含有佔用 6379 port,得知在測試 server 中 Redis 已佔用此 port,由於 IIS 站台設定的 Port 被佔用,Bingo !! 兇手就是 Redis 了
PS C:\WINDOWS\system32> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e819ea3d7a7b redis "docker-entrypoint.s…" 5 weeks ago Up 37 minutes 0.0.0.0:6379->6379/tcp redis-lab
處理方式
心得
一開始看到錯誤訊息內容時,以為是在佈署檔案時檔案被咬住造成的失敗,但後來仔細思考 IIS 站台根本還沒起來怎麼可能會有咬住檔案的情形發生,因此就從 Port 思考方向去釐清,經驗證後果然猜測沒錯成功解決,但其錯誤訊息文字乍看之下也太容易猜錯方向,也提醒自己在寫 Log 時也是要關注異常時顯示的內容訊息,否則當其他同事在值班時也會遇到類似問題,也會讓追問題的時間拉長造成他人的不變。
0 意見:
張貼留言