現象
Windows 平台使用 `Naming.lookup()` 取得遠端 RMI 物件時,速度極慢(常達數秒至數十秒)。
根因
- RMI 依賴 `java.net.InetAddress` 進行主機名/IP 雙向解析。
- Windows 實作委派給本地 Winsock 庫執行 DNS 查詢。
- 若機器設定使用 DNS 伺服器,但 DNS 無法解析目標主機名 → 查詢超時等待導致延遲。
- 延遲發生於 Windows 系統庫層級,非 RMI 實作本身問題。
解決方案:修改本地 hosts 檔案
將所有 RMI 通訊涉及的主機名/IP 對應寫入本地解析檔,繞過 DNS 查詢。
檔案路徑
- Windows NT/2000/XP:`C:\winnt\system32\drivers\etc\hosts`
- Windows 9x/Me:`C:\Windows\hosts`
格式範例
192.168.1.10 appserver01
192.168.1.11 dbserver01
127.0.0.1 localhost
效果
本地解析毫秒級完成,顯著降低 Naming.lookup 延遲,RMI 連線建立恢復正常速度。
補充建議
- 確認 `/etc/hosts` (Unix/Linux) 同樣適用此原則。
- 生產環境建議部署內部 DNS 並確保記錄完整、TTL 合理,避免單點依賴 hosts 檔維護困難。
- 若使用 IP 直接連線(而非主機名),可完全避開解析延遲,但犧牲部署彈性。