阿里Druid连接池监控的两个坑

转载自 注意:阿里Druid连接池监控的两个坑

阿里的Druid大家都知道是最好的连接池,其强大的监控功能是我们追求的重要特性。但在实际情况中也有不少坑,说下最近遇到的一个坑吧!

问题1:不断打印error级别的错误日志

session ip change too many

下面是其报错的关键源码

com.alibaba.druid.support.http.stat.WebSessionStat#addRemoteAddress

public void addRemoteAddress(String ip) {if (remoteAddresses == null) {this.remoteAddresses = ip;return;}

    if (remoteAddresses.contains(ip)) {return;}

    if (remoteAddresses.length() > 256) {LOG.error("session ip change too many");return;}

    remoteAddresses += ';' + ip;
}

再来看看Druid连接池获取IP的方式

com.alibaba.druid.util.DruidWebUtils

public static String getRemoteAddr(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}

    return ip;
}

分析其源码
这是阿里Druid连接池的session监控功能,会记录同一个会话ID的所有访问IP记录,当超过256个字符长度时就会打印这个错误日志,但实际功能不受影响。

看了下Druid session监控的页面,同一个会话请求次数并不多,但记录的IP却有问题,一个请求最多的会保存多级代理形成的多段IP(如192.168.1.2,192.168.1.3,192.168.1.4),这样一来5、6次请求就会使访问IP超出256长度从而打印这个错误。

解决方案

1、如果用不到session监控,就关闭此功能;

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter

<init-param><param-name>sessionStatEnable</param-name><param-value>false</param-value>
</init-param>

2、修改源码,如果有多段IP,截取第一段,并修改记录访问IP(256位)的长度;

作者去看了阿里最新的包,此问题还存在。

并且Github上的Druid官方错误申报里面也有同样的问题,阿里也没有修复的意思,所以我们已暂时关闭session监控功能。

问题2:DruidStatView类异常

java.util.ConcurrentModificationExceptionat java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:394)at java.util.LinkedHashMap$ValueIterator.next(LinkedHashMap.java:409)at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1067)at com.alibaba.druid.support.http.stat.WebAppStat.getSessionStatDataList(WebAppStat.java:504)at com.alibaba.druid.support.http.stat.WebAppStatUtils.getSessionStatDataList(WebAppStatUtils.java:64)at com.alibaba.druid.support.http.stat.WebAppStatManager.getSessionStatData(WebAppStatManager.java:100)at com.alibaba.druid.stat.DruidStatService.getWebSessionStatDataList(DruidStatService.java:205)at com.alibaba.druid.stat.DruidStatService.service(DruidStatService.java:161)at com.alibaba.druid.support.http.StatViewServlet.process(StatViewServlet.java:162)at com.alibaba.druid.support.http.ResourceServlet.service(ResourceServlet.java:253)

看源码,发现又是session监控的坑

无力吐槽。。

for循环里面重复定义Map,可能在别的地方有元素变动,导致发生ConcurrentModificationException异常。

所以,最后关闭了session监控。

很好奇,阿里工程师都这种水平吗?还是为了偷懒?



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

List集合相关应用

1.定义一个Collection类型的集合&#xff0c;存储以下字符串&#xff1a; “JavaEE企业级开发指南”, “Oracle高级编程”, “MySQL从入门到精通”, “Java基础教程” 完成以下功能 1.删除书名字符小于10个的元素&#xff0c;并打印 2.打印书名中包含“Java”的元素 public cl…

消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型

转载自 消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型&#xff1f; 最近要为公司的消息队列中间件进行选型&#xff0c;市面上相关的开源技术又非常多&#xff0c;如ActiveMQ、RabbitMQ、ZeroMQ、Kafka&#xff0c;还有阿里巴巴的RocketMQ等。 这么多技术&am…

机器学习(周志华)- 第2章模型评估与选择笔记

转自&#xff1a; https://samanthachen.github.io/2016/08/03/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0_%E5%91%A8%E5%BF%97%E5%8D%8E_%E7%AC%94%E8%AE%B02/ 经验误差与过拟合 错误率&#xff1a; 分类错误样本数占样本总数 精度&#xff1a; 1 - 错误率 误差&#xff1a;学习器…

单列集合Set的实现类TreeSet

Set接口 [Collection】的子类 TreeSet a.特点【无序&#xff0c;不可重复&#xff0c;查询快&#xff0c;可自动排序】&#xff0c;但需要指定排序规则&#xff0c;API中有一些类已经实现了Comparable接口],给出了默认排序规则&#xff0c;如:Integer:数值大小[升序] String:…

关于Java你不知道的10件事

转载自 关于Java你不知道的10件事 作为 Java 书呆子&#xff0c;比起实用技能&#xff0c;我们会对介绍 Java 和 JVM 的概念细节更感兴趣。因此我想推荐 Lukas Eder 在 jooq.org 发表的原创作品给大家。 你是从很早开始就一直使用 Java 吗&#xff1f;那你还记得它的过去吗&…

模型评估与选择 ( Bias(偏差),Error(误差),和Variance(方差) )

转自&#xff1a; https://github.com/familyld/Machine_Learning/blob/master/02model_evaluation_and_model_selection.md 机器学习中的Bias(偏差)&#xff0c;Error(误差)&#xff0c;和Variance(方差)有什么区别和联系&#xff1f; 参见 https://www.zhihu.com/question…

单列集合Set的实现类HashSet

Set接口 [Collection】的子类 HashSet 特点【无序&#xff0c;不可重复,不能排序】 默认比较地址值【地址相同的值相同】&#xff0c;重写后可比较内容【内容相同的值相同】 1.比较地址值【默认】 public class Demo1 {public static void main(String[] args) {HashSet<…

双列集合Map的实现类

Map接口【和Collection接口并列】 Map接口 成员方法【实现于Map接口&#xff0c;TreeMap也可实现&#xff0c;这里以HashMap为例】 //HashMap实现类 :无序[HashSet底存原理] 哈希表 public class Demo1 {public static void main(String[] args) {HashMap<String, Intege…

机器学习指标大汇总

转自&#xff1a; http://www.36dsj.com/archives/42271 作者&#xff1a;无影随想 在使用机器学习算法的过程中&#xff0c;针对不同场景需要不同的评价指标&#xff0c;在这里对常用的指标进行一个简单的汇总。 一、分类 1. 精确率与召回率 精确率与召回率多用于二分类问题。…

到底什么是分布式系统

转载自 到底什么是分布式系统分布式系统背景 说分布式系统必须要说集中式系统&#xff0c;集中式系统中整个项目就是一个独立的应用&#xff0c;整个应用也就是整个项目&#xff0c;所有的东西都在一个应用里面。 如下图所示如一个网站就是一个应用&#xff0c;最后是多个增加多…

Map集合相关应用

1.键盘录入一个字符串&#xff0c;求该字符串中每一个字符出现的次数。 要求&#xff1a;按照字母顺序打印 如: 录入的字符串为"apple"&#xff0c;打印 a(1) e(1) l(1) p(2) public class Demo4 {public static void main(String[] args) {//键盘录入Scanner sc n…

机器学习算法常用指标总结

转自&#xff1a; http://www.cnblogs.com/maybe2030/p/5375175.html#_label2 阅读目录 1. TPR、FPR&TNR 2. 精确率Precision、召回率Recall和F1值 3. 综合评价指标F-measure 4. ROC曲线和AUC 5. 参考内容 考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positi…

SLA服务可用性4个9是什么意思?怎么达到?

转载自 SLA服务可用性4个9是什么意思&#xff1f;怎么达到&#xff1f;SLA&#xff1a;服务等级协议&#xff08;简称&#xff1a;SLA&#xff0c;全称&#xff1a;service level agreement&#xff09;。是在一定开销下为保障服务的性能和可用性&#xff0c;服务提供商与用户间…

ROC和AUC介绍以及如何计算AUC

转自&#xff1a; http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线和AUC常被用来评价一个二值分类器&#xff08;binary classifier&#xff09;的优劣&#xff0c;对两者的简单介绍见这里。这篇…

为什么Netty这么火?与Mina相比有什么优势?

转载自 为什么Netty这么火&#xff1f;与Mina相比有什么优势&#xff1f;Netty是什么&#xff1f;为什么这么火&#xff1f; Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架&#xff0c;Netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发…

一张图告诉你为什么是服务网关

转载自 一张图告诉你为什么是服务网关&#xff0c;文末有现金抽奖。网关服务是单一访问点&#xff0c;并充当多项服务的代理。服务网关启用了跨所有服务的路由转发、过滤和公共处理等。在微服务实践中远不止这点功能&#xff0c;它可以做到统一接入、流量管控、安全防护、业务隔…

offer复习日志

&#xff08;1&#xff09;复习mysql&#xff0c;只需要 2.5 个小时&#xff1b;

File类对文件的操作应用

1.在不存在的文件夹下创建文件 //在当前模块下aaa文件下ddd下eee中创建一个e.txt文件 public class Demo2 {public static void main(String[] args) throws IOException {File file new File("day11_myFile\\aaa\\ddd\\eee");//createNewFile()建立文件需要文件夹…

一张图告诉你什么是系统架构师

转载自 一张图告诉你什么是系统架构师这张图从架构师的综合能力、岗位认识、岗位职责等方面&#xff0c;清楚的画出了作为一个架构的基本准则。人人都想成为架构师&#xff0c;可作为架构你达到了上面的要求了吗&#xff1f; 系统架构师是个神奇的岗位。为什么这么说&#xff0…

机器学习和统计里面的auc怎么理解?

转自&#xff1a; https://www.zhihu.com/question/39840928 作者&#xff1a;小小丘 &#xff08;该作者对 auc的意义 讲得非常棒, 感谢付出&#xff09; 链接&#xff1a;https://www.zhihu.com/question/39840928/answer/84906286 来源&#xff1a;知乎 著作权归作者所有。…