日常梳理-DNS缓存

文章目录

  • 请求路径:
  • [一、查看JVM DNS 缓存](#一、查看JVM DNS 缓存)
  • 二、查看操作系统DNS缓存
    • [1. systemd-resolved(主流默认)](#1. systemd-resolved(主流默认))
    • [2. nscd(传统服务)](#2. nscd(传统服务))
    • [3. dnsmasq 缓存的是权威 DNS 返回的原始 TTL(需通过日志查看)](#3. dnsmasq 缓存的是权威 DNS 返回的原始 TTL(需通过日志查看))
    • [4. 无独立缓存服务(仅 glibc 解析器)](#4. 无独立缓存服务(仅 glibc 解析器))
  • [三、查看本地DNS服务器的TTL(由权威 DNS 服务器决定)](#三、查看本地DNS服务器的TTL(由权威 DNS 服务器决定))

请求路径:

JVM DNS缓存->操作系统DNS缓存->本地DNS服务器(默认60s)->权威 DNS 服务器

一、查看JVM DNS 缓存

  1. 查看JVM 启动参数,是否有-Dnetworkaddress.cache.ttl=60

  2. 查看java.security文件,是否设置参数networkaddress.cache.ttl。JDK 1.8 在没有配置 Security Manager 时,networkaddress.cache.ttl 默认为 30 秒,而不是永久有效

  3. java.security 文件路径:

sh 复制代码
JDK8:$JAVA_HOME/jre/lib/security/java.security
JDK11+:$JAVA_HOME/conf/security/java.security(JRE 已合并到 JDK)。
  1. 查看security manager:
    启用方式:启动 JVM 时添加参数 -Djava.security.manager;
    禁用状态:默认无此参数,Security Manager 不生效;

二、查看操作系统DNS缓存

1. systemd-resolved(主流默认)

systemd-resolved 会缓存 DNS 解析结果,并保留原始的 TTL 值(从权威 DNS 服务器获取)。resolvectl query 命令,直接输出缓存的剩余 TTL 和原始 TTL(从权威 DNS 服务器获取)。

sh 复制代码
#查看单个域名的缓存TTL(推荐)
resolvectl query 你的下游域名

你的下游域名: 192.168.1.100 -- link: eth0
              192.168.1.101
              192.168.1.102

-- Information acquired via protocol DNS in 20ms.
-- Data is authenticated: no
-- TTL左:剩余TTL时间 | TTL右:原始TTL时间
-- 缓存状态:cache(来自缓存)/ network(来自网络查询)
   RR type: A
   TTL: 35s (valid for 60s) # 剩余35秒,原始TTL为60秒

2. nscd(传统服务)

nscd 的缓存 TTL 是配置固定值(不是动态的),查看配置文件即可:

sh 复制代码
# 查看 nscd 配置的缓存TTL(正向缓存)
grep "positive-time-to-live" /etc/nscd.conf

# 示例输出
positive-time-to-live   hosts            3600  # 缓存3600秒(1小时)

3. dnsmasq 缓存的是权威 DNS 返回的原始 TTL(需通过日志查看)

sh 复制代码
# 查看 dnsmasq 日志中的缓存TTL
journalctl -u dnsmasq | grep -E "你的域名|TTL" | tail -5

# 示例输出
dnsmasq[1234]: cached 你的域名 is 192.168.1.100 TTL 60  # 缓存60秒

4. 无独立缓存服务(仅 glibc 解析器)

若系统未运行任何 DNS 缓存服务,无持久化 DNS 缓存,仅单次查询临时缓存,无法查看 TTL。可直接查询权威 DNS 的原始 TTL:

sh 复制代码
#查看权威DNS返回的原始TTL
dig +ttlid 你的域名

三、查看本地DNS服务器的TTL(由权威 DNS 服务器决定)

本地 DNS 服务器(如运营商 DNS、路由器 DNS)本身不主动配置 TTL,而是在向权威 DNS 查询时,接收权威 DNS 返回的 "原始 TTL",并以此作为缓存时长。

相关推荐
You丶小明快跑4 小时前
部署redis 集群和redis常用命令
数据库·redis·缓存
学Linux的语莫7 小时前
python创建redis连接池
数据库·redis·缓存
珠穆峰8 小时前
linux清理缓存命令“echo 3 > /proc/sys/vm/drop_caches”
java·linux·缓存
什么都不会的Tristan9 小时前
redis-原理篇-ZipList(压缩列表)
数据库·redis·缓存
IT大白9 小时前
4、Redis核心原理
数据库·redis·缓存
wzy06239 小时前
Redis 集群迁移方案:从三节点到三节点的无缝过渡
数据库·redis·缓存
柚几哥哥9 小时前
Redis 优化实践:高性能设备缓存系统设计
数据库·redis·缓存
indexsunny10 小时前
互联网大厂Java面试实战:核心技术与微服务架构解析
java·数据库·spring boot·缓存·微服务·面试·消息队列
想摆烂的不会研究的研究生10 小时前
并发场景——接口幂等性设计
数据库·redis·后端·缓存