文档章节

干货|宏巍软件之Java线程监控之旅

cloudwiseAPM
 cloudwiseAPM
发布于 2016/11/03 14:43
字数 1970
阅读 24
收藏 0

 

宏巍软件 许向

大家好,我是上海宏巍信息技术有限公司(简称:宏巍软件)的许向,宏巍软件成立于2005年,是一家以电商ERP软件开发为主的高新技术科技型软件公司,致力于为大型网商和电子商务企业提供专业、全面、量身订制的企业ERP管理软件和应用解决方案。

 

宏巍电商ERP软件是在阿里体系内使用他们的SLB,然后在ECS上用haproxy JBOSS(多进程)做的集群,ERP端和接口系统都是使用Java语言实现的。随着近年来电商业务量的爆发式增长,Java在性能上的问题逐渐突出,ERP端有时候会无故的卡顿,接口系统跑着跑着没了,或者进程出现卡死情况。

 

宏巍电商ERP软件架构

我们尝试过很多方法来进行Java线程状态的监控,比如开始时使用jstat、jps等工具来读取JVM的状态,同时也尝试用过Zabbix的Java proxy,但都不能满足电商ERP产品性能监控需求。后来通过脚本来调用这些工具读取状态后,通过API回写给Zabbix来记录与报警,但仍然不能完全解决Java线程卡死的问题,因为这些数据只有常态的内存状态,GC回收状态,线程到底在干什么,运维压根是不知道的。

于是我们尝试用JProfile来对具体的情况进行分析,但是JProfile非常耗资源,没法在生产环境上进行调试,这就导致了很多系统没有数据通过就无法调试,而这种情况持续了很长一段时间。最后我们的解决办法就是写一个监控的爬虫,跑在每台机器上,发现钩子爬不到了就触发重启Java进程,并且进行邮件告警。

后来遇到了云智慧应用性能管理产品透视宝http://www.toushibao.com 的工程师 ,给我们定制了基于电商ERP任务系统的Java线程APM监控,与原有定时任务所使用的Java Quartz实现无缝对接。

 

 

在JBoss启动过程中插入透视宝的Agent,并由业务启动脚本通过配置文件来判断业务是不是要启动监控,当监控启动以后,我们在透视宝的Dashboard里就可以看到每个Java进程的详细运行情况,从主进程到其派生出来的子进程,能准确了解到底哪个环节的哪些方法慢,什么方法卡死了。

 

 

透视宝实现了对运行时代码、SQL执行、API调用过程的性能数据采集与分析,深入到代码层面定位性能瓶颈,分析性能下降的原因,帮助技术和运维人员从大量的业务请求中抓取及分析真实用户操作背后的代码执行逻辑关系与状态如执行时间最长的方法、慢查询。

与传统  Agent  安装与配置模式不同,透视宝提供的Smart  Agent实现了真正一键安装,针对不同操作系统版本及各种服务,用户无需面对各种复杂的下载和参数配置,Smart  Agent会自动发现本机所有的服务、应用及运行时代码环境,用户确认后系统会自动安装对应版本的监控插件,整个过程全自动化实现,用户不需要进行任何手动配置操作。针对复杂系统的维护与升级,透视宝同样提供方便的更新解决方案,可对Smart Agent的健康状态进行实时监测,当系统环境发生变化时,无需重新安装与部署,可有效降低集群环境中系统的总体维护成本。

QA:

问:透视宝的Agent插入简单吗?

答:

 

 

透视宝Agent插入非常简单,只要是支持的Java版本,无需手动配置和下载就能自动匹配对应的探针文件,插入过程完全自动化。

 

当然你可以根据需要决定是否插入探针,这是我们在脚本里面做的开关,供参考。

问:你的爬虫爬取哪些内容?

答:

 

 

 

 

我们的爬虫会根据配置文件,爬自己的健康页面,每台机器上的集群配置文件是由我们的运维系统创建并分发下去的,同时每台机器上都会通过slat来同步脚本。

问:怎么实现Java Quartz定时的?刚看你说的爬的钩子都是健康页面,定时任务也算吗?

答:定时任务监控一直是我们很头疼的一个问题,我们用了一个妥协的办法,把Quartz跑到JBoss的serverlet里面去,在没有透视宝之前我只能知道进程没了,或者进程僵死了,如果Quartz的调度任务内部代码出现问题,我们是不知道的,因为这个时候返回都是正常的,我们只能通过转化任务的池来比对判定。

问:利用python爬取健康页面,有没有具体策略?比如如何触发报警,什么时候报警?

答:页面钩子,脚本通过Cron或者跑在后台,脚本都能支持。

问:报警后有没有进程恢复策略?

答:简单粗暴,干掉重启。因为前端有LB,当掉一台问题不大,我们有另外一套业务在测试TBSchedule,Taobao开源的一套任务系统:https://github.com/taobao/TBSchedule,后来发现换了这个任务还是卡死,为了深挖代码问题,就强推了一把透视宝。运维现在用的是Tornado Flower Celery,用的很开心也很稳定。我觉得关键不在于用什么框架,而是在于代码性能到底怎么样,所以要发现代码问题,APM一定要上。

问:服务器上jvm堆外内存是怎么监控的?

答:目前堆外内存并没有监控,因为我们运维人少事情多,简单粗暴能处理掉问题就行了。

问:如果服务器jvm堆内存很稳定,可是内存一点点上涨的话,这个会不会有问题呢?

答:这个要结合业务来看,如果与业务增长曲线是同步的,也没有太多问题。如果没有业务增长,内存却还是在增加,然后full gc ,就要考虑代码上有内存泄露了。一般说linux内存慢慢被占用很正常, full gc的话也不是很频繁。很缓慢的增长,运行几天都可能不会发生,如果运行太长时间 jvm 突然间来一次full gc的话,那应用就会突然卡住。

问:在服务集群部署的情况下,会不会运行一段时间就自动重启应用,释放jvm占用的内存?

答: 不会,jvm本身会回收,只要找到自己业务合适的内存配置就可以。

问:你们集群会不会定时重启部分应用呢?

答:我们集群并没有定期重启,但是我们发布很频繁,一周有2个发布窗口,等于一周重启了2次。

云智慧是业务运维解决方案服务商,旗下产品监控宝(www.jiankongbao.com)、透视宝(www.toushibao.com)、压测宝(www.yacebao.com),已累计为电商、移动互联网、广告传媒、在线游戏、教育医疗、金融证券、政企等行业的几十万用户提供了一站式的应用性能监控、管理及测试服务。

 

© 著作权归作者所有

共有 人打赏支持
cloudwiseAPM
粉丝 27
博文 135
码字总数 278629
作品 0
海淀
5月份值得一看的 Java 技术干货!

5月又即将要离我们远去了,这个月有小长假51劳动节,有54青年节,有513母亲节,更有坑爹的520神马节?!! 废话不说,又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,都是...

Java技术栈
05/31
0
0
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/79220184 Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器 ...

你的猫大哥
01/31
0
0
系统优化怎么做-JVM优化之开篇

大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/youhua 思否专栏:https://segmentfault.com/bl...

昌松
08/21
0
0
JVM Management API

JVM本 身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据、JVM当前所有线程及其栈相关信息等等。各种 JDK自带的剖析工具,包括jps、jstack、jin...

今幕明
2014/09/09
0
0
甲骨文开源Java 性能监控调试工具 JMC

JMC (Java Mission Control) 是Oracle开源的Java 性能监控调试工具, 源自 JRockit JVM , 主要由三个组件构成:Java 进程浏览器、JMX 控制台和 Java Flight 记录器。 主要特性: Java 进程浏览...

marsdream
05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Delphi 常用API 函数(好多都没见过)

AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 AttachThread...

dillonxiao
24分钟前
1
0
阿里云ubuntu配置Android开发环境编译Apk

1.命令行下载Android SDK $ wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz $ tar zxvf android-sdk_r24.4.1-linux.tgz 2.列出可以现在的SDK ./android list sdk  -a 3......

SuShine
24分钟前
1
0
maven导出项目依赖的jar包

一、导出到默认目录 targed/dependency 从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下,执行如下命令: mvn dependency:copy-dependencies 二、导出到自定义目录中 在mav...

来来来来来
25分钟前
1
0
Win10下React Native环境安装教程及错误处理办法(实测)

https://blog.csdn.net/zhangatle/article/details/53289471 准备工作 注意:小米手机MIUI有坑,文末有解决方法 1 首先,你需要先安装Node.js并进行环境变量的配置,具体可以参考我的另一篇文...

james_laughing
25分钟前
1
0
IDEA2018 Mybatis plugin破解

IDEA2018 Mybatis plugin破解 Mybatis Plugin 一、Mybatis Plugin插件是什么 提供Mapper接口与配置文件中对应SQL的导航 编辑XML文件时自动补全 根据Mapper接口, 使用快捷键生成xml文件及SQL...

DemonsI
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部