通过JAVA反射修改JDK1.6*当中DNS缓存内容

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 时间 2012-05-28 17:09:03  Taobao QA Team原文  http://qa.taobao.com/?p=15523 为了实现性能压测时的域名动态绑定功能,尝试通过java反射修改JDK1.6×当中的DNS缓存,感谢在此过程中林轩同学的大力帮助。

 

为了实现性能压测时的域名动态绑定功能,尝试通过java反射修改JDK1.6×当中的DNS缓存,感谢在此过程中林轩同学的大力帮助。

网上也存在着修改DNS缓存的方法,但是都是基于jdk1.5的,无法应用。另外,大部分都是修改的缓存过期时间,而没有真正去尝试修改dns 的cache内容,所以尝试了很多种方法,并且查看了jdk的源代码,终于实现了修改dns缓存内容和时间,如下,欢迎大家一起探讨

修改缓存时间可以采用修改java security manage文件和增加jvm参数的方法,以下是在代码中动态修改dns的缓存时间:

public boolean addressCache(Map<String, String> addressMap) {

// 以下内容修改缓存失效时间,单位秒(-1,永久缓存;0,不缓存;其它>0的值为缓存的秒数) 
Class<?> iacp = sun.net.InetAddressCachePolicy.class;

Field cachePolicyFiled = null; 
Field setEnable = null; 
try { 
cachePolicyFiled = iacp.getDeclaredField(“cachePolicy”); 
setEnable = iacp.getDeclaredField(“set”); 
} catch (NoSuchFieldException e) { 
logger.error(“Get cachePolicyFiled or setEnable failed!”, e); 

cachePolicyFiled.setAccessible(true); 
setEnable.setAccessible(true);

try { 
cachePolicyFiled.set(null, -1); 
setEnable.set(null, true); 
} catch (IllegalArgumentException e) { 
logger.error(“Set cachePolicyFiled and setEnable failed!”, e); 
} catch (IllegalAccessException e) { 
logger.error(“Access cachePolicyFiled and setEnable failed!”, e); 

// 以下内容修改DNS的缓存数据,实现域名动态绑定 
Class<?> inetAddressClass = java.net.InetAddress.class; 
Field cacheField = null; 
Object addressCache = null; 
InetAddress ia = null; 
try { 
cacheField = inetAddressClass.getDeclaredField(“addressCache”); 
} catch (SecurityException e) { 
logger.error(“Get addressCache security failed!”, e); 
} catch (NoSuchFieldException e) { 
logger.error(“Get addressCache field failed!”, e); 
}

cacheField.setAccessible(true);

try { 
addressCache = cacheField.get(inetAddressClass); 
} catch (IllegalArgumentException e) { 
logger.error(“Get cacheField IllegalArgument failed!”, e); 
} catch (IllegalAccessException e) { 
logger.error(“Get cacheField Access failed!”, e); 

Class<?> cacheClazz = addressCache.getClass();

Method m_put = cacheClazz.getMethod(“put”, new Class<?>[] { 
String.class, Object.class }); 
m_put.setAccessible(true);

try { 
for (String domain : addressMap.keySet()) { 
ia = Inet4Address.getByName(addressMap.get(domain)); 
m_put.invoke(addressCache, new Object[] { domain, 
new InetAddress[] { ia } }); 
}

} catch (IllegalArgumentException e) { 
logger.error(“Put addressCache IllegalArgument failed!”, e); 
} catch (IllegalAccessException e) { 
logger.error(“Put addressCache IllegalAccess failed!”, e); 
} catch (InvocationTargetException e) { 
logger.error(“Put addressCache InvocationTarget failed!”, e); 
} catch (UnknownHostException e) { 
logger.error(“Put addressCache UnknownHost failed!”, e); 

// 修改缓存数据结束 
return true; 
}

在性能压测时,采用JAVA的DNS缓存有以下好处

1.无需关心dns解析时间,dns解析消耗0毫秒,几乎无消耗,这样使得压测更加关注服务器响应,压测更充分

2.可以动态修改DNS缓存,无需修改hosts文件和http链接等不灵活的方式。

3.一个jvm进程可以对应一套域名绑定,相互之间不影响,可以实现多场景,多域名绑定的需求压测。

最后,做一下广告:欢迎支持淘宝自主研发的高并发集群性能压测工具 Trunner ,更多精彩继续。

云帅  技术质量部–测试平台与发展–压测工具

目录
相关文章
|
20天前
|
机器学习/深度学习 存储 缓存
LLM高效推理:KV缓存与分页注意力机制深度解析
随着大型语言模型(LLM)规模和复杂性的增长,高效推理变得至关重要。KV缓存和分页注意力是优化LLM推理的两项关键技术。KV缓存通过存储键值对减少重复计算,而分页注意力则通过将序列分割成小块来降低内存消耗,从而有效处理长序列。本文深入剖析这些技术的工作原理及其在仅解码器模型中的应用,探讨其优势与挑战,并展示其实现示例。
67 16
LLM高效推理:KV缓存与分页注意力机制深度解析
|
3月前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
4月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
4月前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
4月前
|
存储 缓存 网络协议
如何防止DNS缓存中毒攻击(一)
DNS缓存中毒也称为DNS欺骗
84 10
|
4月前
|
缓存 网络协议 安全
如何防止DNS缓存中毒(Ⅱ)
服务器应该配置为尽可能少地依赖与其他DNS服务器的信任关系
80 10
|
4月前
|
Java
Java的反射
Java的反射。
52 2
|
4月前
|
缓存 网络协议 安全
如何防止DNS缓存中毒(Ⅱ)
防止DNS缓存中毒的方法包括:减少DNS服务器与其它服务器的信任关系;限制DNS服务器上的服务;使用最新版DNS;加强用户安全教育,如识别可疑网站,仅访问HTTPS网站等。部署SSL证书并选择符合国际Webtrust标准的CA机构,可进一步提高安全性。
79 1
|
5月前
|
存储 Java
[Java]反射
本文详细介绍了Java反射机制的基本概念、使用方法及其注意事项。首先解释了反射的定义和类加载过程,接着通过具体示例展示了如何使用反射获取和操作类的构造方法、方法和变量。文章还讨论了反射在类加载、内部类、父类成员访问等方面的特殊行为,并提供了通过反射跳过泛型检查的示例。最后,简要介绍了字面量和符号引用的概念。全文旨在帮助读者深入理解反射机制及其应用场景。
77 0
[Java]反射
|
5月前
|
安全 Java 测试技术
🌟Java零基础-反射:从入门到精通
【10月更文挑战第4天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
71 2

相关产品

  • 云解析DNS
  • 推荐镜像

    更多