博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xstream对象使用不当导致CPU居高不下
阅读量:7106 次
发布时间:2019-06-28

本文共 1514 字,大约阅读时间需要 5 分钟。

hot3.png

公司内某开放平台集群服务出现了些许用户投诉,起初我们不以为意,直到看到了一个很有意思的用户反馈。

开放平台会给根据用户的行为不同推送消息,本来按照正常逻辑,A消息推送永远都会在B消息之前的。 但是用户反馈先收到的B消息,大约十分钟之后收到的A消息,这就有问题了。

我们的消息都是走的kafka,看了下日志的确发生了B消息先推送,A消息后推送的情况,这就不科学了。

首先想到的就是kafka消息积压了,因为A,B两种消息不在一个topic

看了下集群里的机器都会陆续出现CPU暴涨的情况,而且居高不下,一个个接着出现这种情况,

马上看zabbix,找到CPU暴涨的时间段的机器查看它的jstack日志

发现了那台机器有166个RUNNABEL的一样的堆栈信息,别的时间段CPU暴涨的机器的jstack日志也有一模一样的这样的日志,平均都是160+左右。

"pool-5-thread-95881" #174383 prio=5 os_prio=0 tid=0x00007 nid=0xce runnable [0x0000010]   java.lang.Thread.State: RUNNABLE	at java.lang.Class.forName0(Native Method)	at java.lang.Class.forName(Class.java:348)	at com.thoughtworks.xstream.XStream.registerConverterDynamically(XStream.java:929)	at com.thoughtworks.xstream.XStream.setupConverters(XStream.java:898)	at com.thoughtworks.xstream.XStream.
(XStream.java:574) at com.thoughtworks.xstream.XStream.
(XStream.java:496) at com.thoughtworks.xstream.XStream.
(XStream.java:465) at com.thoughtworks.xstream.XStream.
(XStream.java:411) at com.thoughtworks.xstream.XStream.
(XStream.java:350) at com.xx.xxx.xxxx.util.XmlUtil.xml2Object(XmlUtil.java:13) ......

马上找到这个 XmlUtil的代码。

......XStream xstream = new XStream();......return xstream.fromXML(inputXml);

XStream是线程安全的,不需要重复初始化xstream对象,每一种类型实例化一个对象即可,而正是由于开发人员错误地在每次处理时都实例化一个新的xstream对象,才导致了该问题

只需要将它写成一个单例就好了。

XStream xstream = XStreamUtil.getInstance();

至于 getInstance() 单例怎么写,在这里就不叙述了。

转载于:https://my.oschina.net/110NotFound/blog/2987017

你可能感兴趣的文章
KSFramework:Unity3D开发框架快速入门
查看>>
Daikon Forge GUI 制作UI面板
查看>>
转载:百度百科经典算法集合
查看>>
4.2、Android Studio压缩你的代码和资源
查看>>
如何将简单CMS后台管理系统示例转换为Java、Php等不同后台语言的版本
查看>>
Ext JS添加子组件的误区
查看>>
【js jQuery】map集合 循环迭代取值---以及 map、json对象、list、array循环迭代的方法和区别...
查看>>
新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
查看>>
juery解决获取浏览器可视区域的兼容性问题
查看>>
Android中如何使用JUnit进行单元测试 eclipse
查看>>
微信硬件设备接入接口协议
查看>>
html+js实现四则元算计算器
查看>>
冒泡排序
查看>>
命名空间与use
查看>>
阅读和提问3 - 期中作业
查看>>
iphone 加速器demo
查看>>
Weblogic反序列化漏洞补丁更新解决方案
查看>>
.The server quit without updating PID file (/var/lib/mysql/pc.pid).
查看>>
tornado异步请求非阻塞
查看>>
Centos下找不到eth0设备的解决方法
查看>>