日常梳理-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",并以此作为缓存时长。

相关推荐
weixin199701080164 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
hweiyu005 小时前
Redis命令:BLPOP
redis·缓存
小小龙学IT10 小时前
C++ Redis 客户端深度解析(hiredis 与 redis-plus-plus)——工业数采实时缓存 C++ 侧实战
c++·redis·缓存
mengge.cloud10 小时前
Redis
运维·服务器·数据库·redis·缓存·云计算
欣栀♡11 小时前
Redis 缓存穿透、击穿、雪崩,背出定义只是及格线
数据库·redis·缓存
禾小西11 小时前
08丨Redis 哨兵集群:哨兵故障后还能完成切换吗?
数据库·redis·缓存
阿标在干嘛11 小时前
缓存架构的“场景适配“:我们为什么在部分服务中采用了本地缓存?
缓存·架构
需要82611 小时前
缓存与数据库一致性:延迟双删与订阅 binlog 的取舍
数据库·缓存
CV工程师丁Sir15 小时前
ArkWeb 手记 04|DevTools 调试与缓存清理
java·spring·缓存·harmonyos
志尊宝1 天前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js