View a markdown version of this page

为 DNS 名称查找设置 JVM TTL - Amazon SDK for Java 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SDK for Java 1.x于2025年12月31日达到支撑终止状态。我们建议您迁移到 Amazon SDK for Java 2.x 以继续获得新功能、可用性改进和安全更新。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 DNS 名称查找设置 JVM TTL

Java 虚拟机 (JVM) 缓存 DNS 名称查找。当 JVM 将主机名解析为 IP 地址时,它会在指定时间段内 (称为生存时间 (TTL)) 缓存 IP 地址。

由于 Amazon 资源使用的 DNS 名称条目偶尔会发生变化,因此我们建议您将 JVM 的 TTL 值配置为 5 秒。这可确保在资源的 IP 地址发生更改时,您的应用程序将能够通过重新查询 DNS 来接收和使用资源的新 IP 地址。

对于一些 Java 配置,将设置 JVM 默认 TTL,以便在重新启动 JVM 之前绝不 刷新 DNS 条目。因此,如果在应用程序仍在运行时 Amazon 资源的 IP 地址发生变化,则在您手动重启 JVM 并刷新缓存的 IP 信息之前,它将无法使用该资源。在此情况下,设置 JVM 的 TTL,以便定期刷新其缓存的 IP 信息是极为重要的。

如何设置 JVM TTL

要修改 JVM 的 TTL,请设置 net workaddress.cache.ttl 安全属性值。请注意,networkaddress.cache.ttl这是一个安全属性,而不是系统属性,也就是说,它不能使用-D命令行标志进行设置。

选项 1:在应用程序中以编程方式进行设置

在应用程序启动的java.security.Security.setProperty()早期、创建任何 Amazon SDK 客户端之前和发出任何网络请求之前调用:

import java.security.Security; public class MyApplication { public static void main(String[] args) { Security.setProperty("networkaddress.cache.ttl", "5"); // ... create SDK clients and run application } }

选项 2:将其设置在 java.security 文件中

$JAVA_HOME/jre/lib/security/java.security文件中为 Java 8 或更高版本设置该networkaddress.cache.ttl属性,在 Java 11 或更高版本$JAVA_HOME/conf/security/java.security的文件中设置该属性。

以下是 java.security 文件中的代码段,该代码段显示 TTL 缓存设置为 5 秒。

# # The Java-level namelookup cache policy for successful lookups: # # any negative value: caching forever # any positive value: the number of seconds to cache an address for # zero: do not cache # ... networkaddress.cache.ttl=5 ...

在由$JAVA_HOME环境变量表示的 JVM 上运行的所有应用程序都使用此设置。

选项 3:使用 JDK 系统属性回退(命令行)

如果无法修改安全配置或代码,则可以使用 JDK 系统属性。如果未定义安全属性,则这些属性充当后备选项。

  • sun.net.inetaddr.ttl— 控制成功查找(TTL 为正)

  • sun.net.inetaddr.negative.ttl— 控制失败的查找(负的 TTL)

java -Dsun.net.inetaddr.ttl=5 -Dsun.net.inetaddr.negative.ttl=1 -jar myapp.jar
注意

这些 JDK-internal 属性记录在 Oracle Java 8 网络属性参考文献中,作为 “未来的版本可能不支持” 的私有属性。尽可能使用选项 1-2。