这几天新项目每次发布,都发现load在jetty重启过程中突然load会从0.1突然升高到15以上,3分钟后慢慢降到正常非常,cpu使用率也升高了一些,但是jvm内存线程,gc都比较正常,所以怀疑应用已启动,执行了一些耗CPU的处理过程,查看了代码之后,应用已启动,执行最多的方法是dowork,而这个方法里面会有解析xml的过程:

    public OfferInfo parseXml(String content) throws NumberFormatException, XMLStreamException {if (content == null || content.isEmpty()) {return null;}XMLInputFactory factory = XMLInputFactory.newInstance();XMLStreamReader reader = null;try {reader = factory.createXMLStreamReader(new StringReader(content));} catch (XMLStreamException e1) {return null;}if (reader == null) {return null;}OfferInfo offerInfo = new OfferInfo();while (reader.hasNext()) {int event = 0;try {event = reader.nextTag();} catch (Exception e) {}switch (event) {case XMLStreamConstants.START_ELEMENT:if (reader.getLocalName().equalsIgnoreCase(OFFER_ID)) {offerInfo.setOfferId(Long.parseLong(reader.getElementText()));} else if (reader.getLocalName().equalsIgnoreCase(MEMBER_ID)) {offerInfo.setMemberId(reader.getElementText());} else if (reader.getLocalName().equalsIgnoreCase(ACTION)) {offerInfo.setAction(reader.getElementText());}break;case XMLStreamConstants.END_ELEMENT:break;}}return offerInfo;}

这段代码会解析整个xml文档,只取出里面三个字段,这里的应用场景是异步消息处理,因为应用在重启过程中,消息堆积,应用启动完后会处理比较多的堆积消息,导致load和cpu升高,开始怀疑这段解析xml的过程耗性能,因为xml内容很大,达到1m以上,而且消息堆积量一下子也可能上万,然后就开始进行优化,

在while循环中加入以下代码:

            //如果已经解析完需要的字段,则跳过剩余xml内容的解析,提高性能if(offerInfo.getOfferId() != null && offerInfo.getMemberId() != null && offerInfo.getAction() != null){return offerInfo;}

只要解析出我们需要的三个字段,剩余的xml内容就不需要解析了,返回。

加上这段代码后,线上果然正常了。

因为在发布过程中来不及用jstack dump线程信息,用jstack dump线程信息,查看下当前线程处理状况,也应该很快能诊断出问题。

解析xml时解析完需要的数据就需要返回了,剩下的xml内容不需要解析,xml解析很耗性能。

我们看下修改这段代码前后的load和cpu的图

其他jvm指标都比较正常。

转载于:https://www.cnblogs.com/secbook/archive/2012/08/15/2655144.html

发布过程5分钟内load飙升问题排查相关推荐

  1. 微信回应“取消两分钟内删除功能”;甲骨文裁撤北京中心;Redis 6.0.6 发布| 极客头条

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 扫描二 ...

  2. 如何在一分钟内解决Windows系统崩溃问题

    投资万千种,关键在于实践和自身努力,几种证书挂靠挣钱方法,提供给大家,资料和考试科目.可以参见:http://hi.baidu.com/new/gaofeiservice http://gaofeis ...

  3. 10分钟内基于gpu的目标检测

    10分钟内基于gpu的目标检测 Object Detection on GPUs in 10 Minutes 目标检测仍然是自动驾驶和智能视频分析等应用的主要驱动力.目标检测应用程序需要使用大量数据集 ...

  4. 以太坊区块链同步_以太坊69:如何在10分钟内建立完全同步的区块链节点

    以太坊区块链同步 by Lukas Lukac 卢卡斯·卢卡奇(Lukas Lukac) Ethereu M 69:如何在10分钟内建立完全同步的区块链节点 (Ethereum 69: how to ...

  5. es6 ... 添加属性_如何在10分钟内免费将HTTPS添加到您的网站,以及为什么您现在不止需要这样做......

    es6 ... 添加属性 by Ayo Isaiah 通过Ayo Isaiah 如何在10分钟内免费将HTTPS添加到您的网站,以及为什么现在比以往更需要这样做 (How to add HTTPS t ...

  6. 异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题

    作者 | 千风 本文分为三个部分:概述中引入了积压问题,并介绍了函数计算异步调用基本链路:并在指标介绍部分详细介绍了指标查看方式,分类解读了不同的指标含义:最后以一个常见的异步请求积压场景为例,介绍如 ...

  7. erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...

    机器之心发布 机器之心编辑部 百度飞桨的 Paddle Serving 能够实现服务器端快速部署,最近,随着飞桨更新到 1.7 版本,Paddle Serving 也有了新变化.更新后的 Paddle ...

  8. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 开发人员 ...

  9. 服务器创建多个dhcp服务_如何在15分钟内创建无服务器服务

    服务器创建多个dhcp服务 by Charlee Li 通过李李 如何在15分钟内创建无服务器服务 (How to create a serverless service in 15 minutes) ...

最新文章

  1. @程序员,如何“终身成长”与跨界?
  2. oracle导出一个表数据库,excel怎么导出多个表格数据库数据-一个excel表格中有多个sheet,如何将其导入oracle数......
  3. windows安全模式_Winclone 8 for Mac(Windows分区备份迁移和还原工具)
  4. php判断绝对路径文件是否存在,php – 如何确定文件路径是否绝对?
  5. 一切事物皆对象_基础篇
  6. Spring 入门程序
  7. 调试阶段 获取微信小程序openid
  8. html自动适应布局,用纯CSS实现自适应布局表格
  9. /var/run/yum.pid 已被锁定,PID 为 XXXX 的另一个程序正在运行。
  10. STC学习:可同步显示歌词的ABC英文歌
  11. eova(JFinal)项目一键式部署方法
  12. 修改AspNetPager的CustomInfoHTML,添加自定义样式
  13. ubuntu16.04登录后只有蓝色背景解决方法
  14. redis 附近的人_Redis怎么实现查找附近的人,请看特殊数据类型Geospatial
  15. java:JDBC的使用与封装
  16. java apache 日志_了解Apache的访问日志
  17. 图片浏览(点击放大缩小支持多张图片浏览)
  18. Proteus报错:External model DLL “ADC083X.DLL“ not found. GLE=0x000036B1
  19. Enounce MySpeed 变速播放网页视频
  20. 2018FSNet: An Identity-Aware Generative Model for Image-based Face Swapping论文阅读笔记

热门文章

  1. perfdog 性能狗之Jank
  2. ECMAScript:客户端脚本语言的标准
  3. selenium 定位方式4-xpath
  4. 计算机程序设计社团,学生社团管理系统
  5. 计算机设备管理规定是什么,计算机设备管理制度
  6. sonarqube没有html插件,spring-boot – 找不到id为’org.sonarqube’的插件
  7. java中某对象的引用什么意思_在java中,引用对象变量和对象间有什么关系?()
  8. Fatal Python error: pycurl: libcurl link-time version is older than compile-time version
  9. java利用redis实现排行榜_Java简单使用redis-zset实现排行榜
  10. STM32系列单片机在进入main函数前都在干些什么?