`

本周技术问题总结--2017.09.01

阅读更多

目录

 

一、idea打包关闭test

二、log4jslf4j包冲突

三、user.name配置与系统环境变量重名失效

四、jvm内存报警

 

日常工作中经常会遇到一些问题,会花大量时间去解决,但时间一长又会遗忘,以后不定期收集每周遇到问题,进行整理收集。以下是本周遇到的几个问题:

 

一、idea打包关闭test

本周项目处于调试阶段,在调试过程中经常出现数据库表里的测试数据被删、或被修改的情况。严重影响测试进度,刚开始是怀疑有同事人为的对数据进行修改,几经排查发现是由于在使用idea编译打包过程中,会自动执行代码工程中单元测试方法,单元测试方法中有对数据库表记录的增删改查操作。部分精心准备的测试数据,在每次执行maven package的时候被篡改。解决办法:在打包时关闭单元测试,关闭方法点开ideamaven面板,点击一个闪电标记即可,如下图:



 

 

 

二、log4jslf4j包冲突

 

冲突包为log4j-over-slf4j.jarslf4j-log4j12.jar,现象为tomcat启动失败,错误日志内容为:

java.lang.StackOverflowError

Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path

 

从日常上看是log4j-over-slf4j.jarslf4j-log4j12.jar冲突了,冲突原因分析:

首先看下slf4j-log4j12.jar(转接到log4j日志框架,正向过程,官网:官网https://www.slf4j.org/manual.html#swapping

slf4j不是日志框架,而是日志打印规范,log4j是日志框架负责具体的日志打印(类似流行的还有logback,据说比log4j的性能更好)。他们的关于有点类似于jvm规范和Hotspot的关系,一个是规范,一个是具体的实现。

 

这里slf4j是规范,封装了各种日志打印规范,比如可以使用占位符打印日志: logger.error("{}登陆成功,登陆时间{}",userid“2017-09-01”)。最终具体的日志打印操作交给log4j处理。

这时就需要引入slf4j-log4j12.jar,依赖关系为:slf4j-api.jaràslf4j-log4j12.jaràlog4j.jar

如果有一天你想切换到性能更好的logback日志框架,只需把slf4j-log4j12.jar包替换为logback即可。

 

再来看下log4j-over-slf4j.jarlog4j调回slf4j,逆向过程,官网:https://www.slf4j.org/legacy.html

使用log4j-over-slf4j取代log4j,这样log4j接口输出的日志就会通过log4j-over-slf4j路由到SLF4J上,这样即使系统(包含使用的第三方jar库,比如dubbo)都可以将日志最终路由到SLF4J上,进而集中输出。这个依赖关系为:log4j-over-slf4j.jar à slf4j-api.jar,可以看到这个依赖关系刚好与上述相反,导致出现无限相互递归依赖,最终导致溢出。

 

参考:

http://blog.csdn.net/kxcfzyk/article/details/38613861?utm_source=tuicool

http://blog.csdn.net/john1337/article/details/76152906

 

 

三、user.name配置与系统环境变量重名失效

 

好心网友sxp2558SkySchedulehttp://moon-walker.iteye.com/blog/2386504)过程中发现一个bug:笔者在配置netty连接使用的用户名时,在properties文件中配置的key” user.name”,代码中配置的值为“moon” 但实际使用的时候通过spring上下文Environment获取到的值为当前服务器的主机名,导致SkySchedule的客户端无法与服务端连接成功。

 

根本原因为:” user.name”为默认系统常量,配置在properties中的值会被覆盖,导致读取到的是主机名,而不是properties文件中配置的用户名。

 

目前已经改为“sky.user.name”,代码已提交到github。再次感谢sxp2558

 

四、jvm内存报警

 

本周项目所属系统出现几次jvm内存报警,内存使用率超过80%

首先分析系统采用垃圾回收算法:年轻代采用的ParNew收集器,年老代采用的Parallel Old收集器,都是采用的并行收集器,jdk版本是1.8

 

再看下GC情况,没有触发full gc,只有少量young GC,系统访问量也不高。初步分析是每次年轻代GC存活下来的对象较多,堆积到年老代的对象日益增加,同时有没有触发full GC导致。

 

解决办法:

1、可以写个定时任务,每晚凌晨2点,业务闲时调用system.gc() 触发full gc

2、当内存使用到达一定的百分比时,自动触发full GC

 

第一种办法,需要重新上线,暂时没有采纳。

第二种办法,可以把年老代改用CMS收集器,CMS收集器有个CMSInitiatingOccupancyFraction参数,可以控制当年老代内存使用到达一定的比值,自动触发full GCParallel收集器没有找到类似的参数。同事最终把参数改为:

-XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=65

具体含义为:采用cms垃圾收集器;开启碎片整理;5full GC后进行一次碎片整理;年老代内存超过65%,自动进行full GC

 

 

由于cms垃圾收集器都cpu要求很敏感,修改jvm参数后,再进一步观察下 根据情况决定是否切回Parallel垃圾收集器。

  • 大小: 14.3 KB
0
0
分享到:
评论

相关推荐

    互联网金融--X科技.商业计划书.pdf

    - 总收入1.92亿元(已确定),4.17亿元(未确定),总计6.09亿元。 - 总计交易量934亿元(已确定),2475亿元(未确定),总计3409亿元。 - 总计客户数量35家(已确定),115家(未确定),总计150家。 **2018年...

    王雪婷 2017.09.201

    王雪婷 2017.09.2017周报,主要介绍了智能编曲相关技术,包括RNN和Wavenet的应用。 一、概述 该周报的主要内容是王雪婷对智能编曲技术的学习和实践,包括RNN和Wavenet两个方面。王雪婷首先被分配到智能编曲组,并...

    最新医疗废物、污水处理处理自查及总结2017.09.16.pdf

    通河县中医院在医疗废物与污水处理方面的工作进行了一次全面的自查与总结,针对日益严峻的医疗废物管理及环境保护问题,医院采取了一系列细致入微的措施,旨在提高医疗废物处理的安全性,防止环境污染及传染病传播的...

    医疗废物、污水处理处理自查及总结2017.09.16.doc

    随着医疗技术的不断进步和医疗活动的日益频繁,医疗废物和污水处理作为医疗活动中不可或缺的一环,其重要性日益凸显。医疗废物若处理不当,不仅会导致环境污染,还会对公众健康构成直接威胁;而污水处理的不合格,则...

    创意创新工作总结PPT模板-16.pptx

    【创意创新工作总结PPT模板-16.pptx】是一个设计精美的PPT模板,适合用于年终总结、新年计划以及商务报告。以下是基于这个模板可能包含的一些关键知识点和内容建议: 1. **年度工作概述** (01部分) - 在这部分,你...

    程序员简历模板 100.docx

    - 时间:2005.09-2009.06 - 专业:计算机科学与技术 - 主修课程: - C语言 - 数据结构 - 离散数学 - 数据库 - 编译原理 - 操作系统 - 计算机组成原理 - 计算机网络 - 数字电路 - 模拟电路 - **研究生...

    求职简历模板.docx

    - **2014.09-2017.06**:湖南信息大学,软件工程专业,获得本科学位。 - **主修课程**: - 程序设计 - 数据结构 - 计算方法 - 编译原理 - 软件工程 - 操作系统原理 - 计算机网络技术 - 微机原理及汇编语言...

    任务书_基于SSH的校园二手书交易系统word文档良心出品.pdf

    3. 2017.01.01至2017.03.14:进行毕业设计初期工作,初步搭建系统架构。 4. 2017.03.15:毕业设计中期检查。 5. 2017.03.15至2017.05.16:继续开发系统功能,完善细节。 6. 2017.05.17:毕业设计第一次答辩。 7. ...

    杨文泽-Java.pdf

    - **时间**:2017.10-2018.09 - **职责**: - 负责多屏拼接交互系统的后台代码编写。 - 使用Linux、Shell、WebUI框架等技术。 - 进行现有产品的功能测试与Bug修复。 综上所述,杨文泽在多年的IT行业工作中积累...

    2017+01+09+PotPlayer+1.6.63891+Public

    总结起来,2017年1月9日发布的PotPlayer 1.6.63891 Public版本,以其全面的解码能力、直接播放ES流的特性、丰富的自定义选项以及出色的性能优化,确立了其在多媒体播放器领域的领先地位。无论你是日常观影爱好者,...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    09-数据库产品排名及发展大事记.avi 10-MySQL数据库产品介绍.avi 11-数据库基础内容小结.avi 12-为什么选择MySQL数据库即MySQL优势介绍.avi 13-MySQL数据库分类与版本升级知识讲解.avi 14-MySQL数据库商业版与社区版...

    deep learning 书籍分享ppt

    2017-04-09-chap9-convlution.pdf可能涵盖了卷积层、池化层、全连接层和激活函数(如ReLU)等关键概念,以及CNN在图像分类和目标检测中的应用。 3. **章节5:机器学习基础** - 这部分可能涉及监督学习、无监督学习...

    TensorRT试用总结1

    【TensorRT试用总结1】 在本试用中,我们的主要任务是利用TensorRT(GIE)的单精度模型转换来加速OpenPose模型的推理过程,以达到实际应用的性能水平。TensorRT是一个由NVIDIA开发的高性能深度学习推理(Inference...

    2009-2017系统分析师历年真题.zip

    接下来,"09-17 完整系统分析师 真题 .zip"是核心的学习材料。这个压缩包内包含的历年真题集,是每一位准备系统分析师考试的人必须掌握的。每一套真题都是对系统分析师所需技能的实战检验,涵盖了从需求获取到系统...

    质量体系文件记录表格汇编(2017).pdf

    此外,计量器具的检定周期表(SPJA-JL09-01)和标准物质的管理(SPJA-JL10-01至SPJA-JL10-04)保证了检测数据的可靠性。资料借阅、归还记录(SPJA-JL11-01)以及质量管理体系文件的修改和作废记录(SPJA-JL12-01、...

    任务书_基于SSH的校园二手书交易系统word文档良心出品.docx

    5. **系统优化与完善阶段**(2017.06.03~2017.06.09):根据测试结果进行系统优化和完善,准备最终版本。 #### 五、参考文献 1. **狄文辉**,《JavaWeb基于SSH框架与AJAX技术的应用开发》,**谌湘倩**,2009年。 2...

    小学生C++入门班与提高班(2021.07.17).pdf

    逻辑的挑战》(修订版)(2017.01):这本书是专门针对C语言逻辑挑战方面的教材,它能够帮助学生加强在逻辑思维和解决问题方面的能力。 2. 《小学生C++趣味编程》(2017年11上册):这是面向小学生的C++编程教材,...

    三次架构典范项目-图书管理系统

    总结来说,"三次架构典范项目-图书管理系统"是一个很好的学习资源,可以帮助开发者掌握软件架构设计的基本原则,以及如何利用Winform和SQL Server 2008来构建和管理一个完整的图书管理系统。通过深入研究和实践,...

    道路施工总结.docx

    - **施工时间**:2017年7月12日至2017年10月09日。 - **项目意义**:改善三都区农村公路网,便利居民出行,助力脱贫工作,促进民族团结和社会稳定。 #### 二、工程概况 - **技术标准**: - 公路等级:四级公路。 ...

Global site tag (gtag.js) - Google Analytics