台北使用者使用系統很快,但外縣市使用者使用系統卻是超慢的

伺服器是放在台北總部,而當您收的訊息是「台北使用者使用系統很快,但外縣市使用者使用系統卻是超慢的」時,

您覺得會是什麼問題呢?

台北 3秒 ,外縣市使用者使用系統時,用Fiddler錄的結果如下(約 35 秒),

嗯…. 直覺就是應該是網路問題吧!!!

可是使用 ping serverip (10ms以內) 及 pathping serverip 的結果都很快,狀況很良好,頻寬也都夠。

系統的效能狀況看起來也都很好 …

IIS也有設定壓縮,防毒軟體也關掉試試看 …

還是慢 …

 

回到基本面,使用簡單的程式來測試,對照一下,

筆者用只有UI的aspx(分body多跟少各一支)放在 wwwroot 目錄跟應用程式目錄從外縣市的電腦來測試反應卻是超快的 …..

那就不是下載內容大小的問題了 …

 

加上有資料庫存取吧~~

再來在 aspx 中使用我們公司的元件去存取資料庫來試看看。

結果放在 wwwroot 中的程式很快,在應用程式目錄中的程式卻變慢了 !!!

在我們的應用程式中的程式,如果使用元件存取資料庫 會變慢 … 在不同的應用程式目錄之中卻不會 …

那會是有什麼 Firewall or WAF 嗎? 詢問網管人員也沒有呀 …

 

會是應用程式名稱的問題嗎?

Copy原有應用程式的檔案,然後在 IIS 上建立一個TEST應用程式來測試,還是一樣 …

拿另一個模組的 web.config 放過去測試,變快了 !!!

那就是 config 的問題了 (鎖定在 web.config 中到底有什麼設定影響呢?)

一步步去刪除 config 的內容,在 AppSettings 中有個設定,當存取資料時,同時會記錄一份 Log 到 DB 之中,

將 Flag 設定成 N,外縣市的速度就跟台北一樣快了。

Yeap … 灑花… 收工 …

But …可是客戶說一定要記錄哦~~~  不可以停 …

 

那是否程式中有針對 外縣市 的 IP 去做 Filter 然後記錄嗎???

不然應該不會有這種不同的狀況才對呀!

錄一下台北跟外縣市使用的 SQL ,都有去記Log呀! 而且 DB 的回應也不慢 …

那應該是程式的問題了… 查看記Log的那一段程式碼,如下,

看了之後,心中一驚 … 該不會是 Dns.GetHostEntry 吧?

於是在 Dns.GetHostEntry 中給台北使用者的 IP 跟 外縣市使用者的 IP ,

台北可以解析出 HostName,而外縣市則解析不出來 HostName,而且花費約 4~5秒 的時間。

於是在 AP Server 上下 ping -a 台北使用者的 IP ,跟 ping -a 外縣市使用者的 IP ,果然也是一樣的狀況!

 

所以一支程式中會有多個Query,就會用 Dns.GetHostEntry 去試著取得電腦名稱,

外縣市使用者的 IP 解析不出來,做了多次,於是那支程式的就需要等很久很久才會有反應!

35 秒或是1分鐘的等待時間就是這樣出來的 …

 

找出這問題後,跟網管討後,網管說他需要查一下為何會解析不出來。

所以就先調整程式,不要使用 Dns.GetHostEntry 來及時解析出電腦名稱。

以上是筆者在查問題的過程,後來還好有到現場去觀察整個的過程,才能一步步的狀問題釐清。

希望對於大家在查問題時,有所幫忙。

結論

如果將來真的需要解析出 Client 的電腦名稱的話,要先讓 ping -a IP 可以解析的出來。

再以批次 Job 的方式去解析即可.

用 Dns.GetHostEntry 要小心,當解析不出來時,就會花費很久的時間哦!

 

參考資訊

What is difference between nslookup and GetHostEntry?

GetHostEntry is very slow

Diffrence in “Ping -a”, “nslookup”, and “[System.Net.DNS]::GetHostEntry”?

 

本文也發表於亂馬客Blog

作者: 亂馬客

亂馬客 @叡揚資訊 rainmaker_ho@gss.com.tw https://rainmakerhoblog.wordpress.com https://www.slideshare.net/rainmakerho

台北使用者使用系統很快,但外縣市使用者使用系統卻是超慢的 有 “ 2 則迴響 ”

  1. 為什麼Server就一定要有Public DNS entry?
    為什麼Internal Client PC/NB要有DNS entry ?
    誰家的PC/NB會寫進進DNS的A record?
    先搞清楚充分必要關係
    紀錄IP就好啦 真的

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *