« 後輩が来た | メイン | 重いPC »

2005年6月 3日

EclipseとCVSとダイナミックDNS

カテゴリー: [プログラミング]

自宅のサーバにCVSリポジトリをおいて,Eclipseからアクセスしたりしているのですが,Eclipseを長期間起動しっぱなしにしていると,そのうち,次のようなエラーが出るようになって,CVSリポジトリに全くアクセスできなくなってしまうことが,気になっていました.

認証エラー: com.jcraft.jsch.JSchException: Session.connect: java.net.ConnectException: 
Connection timed out: connect

でも,再起動すると直るのです.
ところが,ふと,実際にどこにつなぎに行っているのか調べてみたら,接続先が全然違うIPアドレスになっていました.サーバはダイナミックDNSなわけですが,そのIPアドレスは,古いIPアドレスでした.

どうも,名前解決の結果をずっとキャッシュしてしまっているようです.

どうしてこんな作りになっているんだろうと思いつつ,ダイナミックDNSみたいなものを使うのいけないのか,そもそもEclipseを動かしっぱなしにしているのがいけないのか,と思っていました.

しかし,どうも,Javaのライブラリ自体がキャッシュしているようです.それも,DNSレコードのTTLを無視して,無期限にキャッシュするようです.

Java's Secret DNS Cache

しっかり読んだわけではないですが,このblogを書いた人はJavaのDNS Cacheに苦労させられたらしく,ちょっと怒ってるようですね.
EclipseのCVS機能がやっているのではなく,Java自体がやっているとすると,あちこちに影響するわけで,知らないと問題の元でしょうね.

試してませんが,この動作は,プロパティを定義することで変えられるようです.

Networking properties from java.sun.com

例えば,JVM起動時に -Dsun.net.inetaddr.ttl=0 の様な引数を渡します.

このデフォルト値が,-1 (cache forever) になっているので,無限にキャッシュしてしまうようです.DNSレコードのTTLを参照するようにさせることはできないらしく,固定の時間を指定する事しかできないようですね.

でも,やっぱりデフォルトが -1 というのは痛いと思います.

投稿者 shingo : 2005年6月 3日 23:28

トラックバック

このエントリーのトラックバックURL:
http://isolinear.info/cgi-bin/mt/mt-tb.cgi/117

コメント

コメントしてください

コメントスパム等の対策のために,大量のURLを含むコメント,古いエントリーに対するコメント,連続したコメントなどは,一旦保留されます.




保存しますか?