文档章节

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

cloudwiseAPM
 cloudwiseAPM
发布于 2016/11/03 14:43
字数 1970
阅读 27
收藏 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技术栈
2018/05/31
0
0
彻底搞懂JavaScript执行机制

首先我们大家都了解的是,JavaScript 是一门单线程语言,所以我们就可以得出: JavaScript 是按照语句顺序执行的 首先看: 这个显然大家都知道结果,依次输出1,2 然而换一种: 这个时候再看...

架构师springboot
2018/11/11
0
0
Java虚拟机监控指标及监控配置

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/70229653 主要是对Java虚拟机(JVM)的远程监视,如jdk自带的工具j...

smooth00
2017/04/28
0
0
基于 JVMTI 实现 Java 线程的监控

随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能。多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁...

红薯
2009/12/15
1K
1
做软件工程师, 而不是一个C++牛, PHP牛 或者 Python 牛

很多人说宏哥喜欢争论语言, 大多时候, 是宏哥争论的不是语言, 而是如何选择正确的工具, 最快, 最好质量去达到既定目标. 很多人觉得宏哥争论语言, 实际上, 是因为他们自己变成某种语言的附属品...

宏哥
2012/11/06
230
1

没有更多内容

加载失败,请刷新页面

加载更多

虚拟化 - KVM 和 Xen 比较

Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择:Xen和KVM。 作为较早出现的虚拟化技术,Xen是“第一类”运行在裸机上的虚拟化管理程序(Hypervisor),也是当前相当一部分商业...

临江仙卜算子
12分钟前
0
0
给windows server中的“未识别的网络”或“无法识别的网络”设置网络位置类型

在windows server中,如果网络没有被正确的识别,那么就需要手工设置一下网络位置类型。 将“公用网络”指定设置为“专用网络“ 【控制面板】--【系统和安全】--【管理工具】--【本地安全策略...

gugudu
今天
2
0
阿里强制要求的21条Java开发规范,可以避免很多坑

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2. 【强制】所有的覆写方法,必须加@Override注解。 说明:getObject...

天王盖地虎626
今天
10
0
oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time ......

hnairdb
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linux-tao
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部