文档章节

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

cloudwiseAPM
 cloudwiseAPM
发布于 2016/11/03 14:43
字数 1970
阅读 21
收藏 0
点赞 0
评论 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
粉丝 26
博文 135
码字总数 278629
作品 0
海淀
5月份值得一看的 Java 技术干货!

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

Java技术栈 ⋅ 05/31 ⋅ 0

甲骨文开源Java 性能监控调试工具 JMC

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

marsdream ⋅ 05/07 ⋅ 0

深入理解JVM学习笔记(一、总览)

1、JVM历史 2、JVM内存结构 3、JVM垃圾回收机制 4、JVM性能监控工具 5、JVM性能调优案例时间 6、JVM类文件结构 7、JVM类加载机制 8、JVM字节码执行引擎 9、JVM虚拟机编译及其运行时优化 10、...

jintaohahahaha ⋅ 05/28 ⋅ 0

百词斩Java程序员面试11个问题,你会几个?2018-04-10

近日,我们在w3cschool app开发者头条上,可以看到百词斩Java程序员面经。 在分享百词斩Java面经前,w3cschool特别给程序员小伙伴们带来一些Java学习干货: 0、学习Java必备的3大神器 如果你...

W3Cschool ⋅ 04/10 ⋅ 0

重磅!Java 性能监控调试工具 JMC 宣布开源

JRockit JVM 创始人之一、Oracle Java 产品组成员 Marcus Hirt 昨日在其博客上宣布,Java Mission Control(JMC)的源代码已正式开源。 JMC 是源自 JRockit JVM 的一套监控和管理工具,Oracl...

王练 ⋅ 05/07 ⋅ 6

从Java小白到架构师必须要看的书籍,真正的“武林秘籍”!

少年,我看你骨骼精奇,将是未来万中无一的IT精英,很是适合学JAVA。维护世界和平就看你的了,我这里有能让你成为IT精英的办法!还不来看看! 基础类 1、《Thinking in Java》,入门第一位是...

启示录是真的 ⋅ 05/25 ⋅ 0

云计算高级培训,Tomcat运维JVM 虚拟机常识

云计算高级培训,Tomcat运维JVM 虚拟机常识,作为了解JVM 虚拟机的开始。我们很有必要弄明白以下问题。 所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大...

长沙千锋 ⋅ 05/17 ⋅ 0

编写高性能 Java 代码的最佳实践

摘要:本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译...

这篇文章 ⋅ 06/20 ⋅ 0

Java研发大学毕业后为何找不到理想的工作

现在大学生在大学学习Java技术,毕业后直接工作,我想在大家心里这只是再平常不过的事情了,可是为啥刚一毕业的Java应聘工程师会遭到各个研发企业的拒绝,这是刚毕业的每个大学生心中的疑虑,...

我爱编程学习 ⋅ 06/07 ⋅ 0

2018年Java编程学习面试最全知识点总结

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部