`

本周技术问题总结--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两个方面。王雪婷首先被分配到智能编曲组,并...

    创意创新工作总结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最新老男孩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++编程教材,...

    2017+01+09+PotPlayer+1.6.63891+Public

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

    道路施工总结.docx

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

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

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

    京东2017校招技术类客观题(三).pdf

    这份资料是京东2017年校园招聘技术类的客观题集,主要涵盖了计算机科学和技术领域的多个知识点。让我们逐个解析这些题目所涉及的技术概念。 1. LL(1)、FORTRAN:这是关于编程语言和解析器设计的概念。LL(1)是一种自...

    8、信息学奥赛系列课程之NOI LINUX课程表01.pdf

    - 《啊哈编程星球:一本书入门Python和C++》(2019.09) - C++小游戏开发 - **可以参加的比赛或认证:** - 蓝桥杯大赛青少年创意编程C++组 - [官方网站](http://kid.lanqiao.cn/) - 中国电子协会考评中心 - ...

Global site tag (gtag.js) - Google Analytics