轉自:https://www.cnblogs.com/aizj/p/7593209.html
request.getRemoteAddr()是獲得客戶端的ip地址。
request.getRemoteHost()是獲得客戶端的主機名。
關於request.getRemoteHost的性能問題
在一個業務系統中使用request.getRemoteHost(),會造成使用該方法使用該功能模塊時速度特別慢
(測試功能時發現該功能模塊中對應的域名獲取的是host文件中從前往后第一個與本機IP一致的域名)
解釋如下:
一個客戶應用,在運行過程中反映出現性能問題,經定位,性能瓶頸出現在應用代碼中的request.getRemoteHost()這一行,執行這一行需要花費大約5秒。通過CTRL+BREAK輸出當前堆棧,發現底層代碼有去作dns查詢的動作java.net.InetAddress.getHostFromNameService(InetAddress.java:532),從而導致慢。
解決辦法有2個:
1、將request.getRemoteHost()改為request.getRemoteAddr() 。
2、提供apusic的優化patch,並在啟動腳本中添加參數。
按方法1修改后並在現場驗證問題已解決,第二種方法沒有試驗有待考證。