CN109726078B - 一种无侵入jvm线程堆栈采集的方法及装置 - Google Patents

一种无侵入jvm线程堆栈采集的方法及装置 Download PDF

Info

Publication number
CN109726078B
CN109726078B CN201811623149.XA CN201811623149A CN109726078B CN 109726078 B CN109726078 B CN 109726078B CN 201811623149 A CN201811623149 A CN 201811623149A CN 109726078 B CN109726078 B CN 109726078B
Authority
CN
China
Prior art keywords
thread stack
jvm
channel
request
acquiring
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811623149.XA
Other languages
English (en)
Other versions
CN109726078A (zh
Inventor
王沛文
周宏江
詹先
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Eshore Technology Co Ltd
Original Assignee
Guangdong Eshore Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangdong Eshore Technology Co Ltd filed Critical Guangdong Eshore Technology Co Ltd
Priority to CN201811623149.XA priority Critical patent/CN109726078B/zh
Publication of CN109726078A publication Critical patent/CN109726078A/zh
Application granted granted Critical
Publication of CN109726078B publication Critical patent/CN109726078B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种无侵入JVM线程堆栈采集的方法及装置,所述方法包括:用户端在部署应用时,通过设置javaAgent参数加载Agent包;初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间;将通道ID以及通道建立时间保存到通道缓存;向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。本发明的技术效果在于:通过JVM的javaAgent机制为JVM线程堆栈采集提供了无侵入模式的技术实现,通过与注册中心的联动,实现了快速定位目标JVM进程,无需登录目标服务器,降低采集门槛以及运维风险。

Description

一种无侵入JVM线程堆栈采集的方法及装置
技术领域
本发明涉及一种JVM线程堆栈采集的方法及装置,尤其是指一种无侵入JVM线程堆栈采集的方法及装置。
背景技术
随着Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子。系统运行发生异常时,通过查看打印JVM线程堆栈可以协助开发人员或者运维人员快速进行性能瓶颈分析,找到问题根源。
一般在打印JVM线程堆栈信息时,需要先登陆到目标服务器,然后调用JDK提供的jstack工具来打印。这种方法在应用规模和服务器数据不多的情况下没什么问题,但如果是大型的分布式复杂应用,服务器数量庞大,再加上采用当前流行的docker部署模式,需要找到目标服务器并登陆上去是一件麻烦的事情;另外在大型应用中,服务器部署安全管控严格,一般的开发人员不具备登陆服务器的权限,要想获取JVM线程堆栈信息,只能向运维人员申请操作,往往错过了获取信息的最佳时机。
另一种获取JVM线程堆栈信息的方法是可以利用JDK提供的ManagementFactory.getThreadMXBean()接口方法来采集,但这种方法需要开发人员事先编写代码并暴露接口来实现采集,,比如开放JMX接口;而开放接口同样存在安全隐患,很多大型应用不允许私自开放进程接口;另外要找到对应目标进程的IP和端口来调用也存在第一种方法中登陆目标服务器的问题,即如何在大量应用进程下确定目标IP和端口。因此需要对该获取JVM线程堆栈信息的方法进行改进。
发明内容
本发明所要解决的技术问题是:提供一种无侵入JVM线程堆栈采集的方法及装置。
为了解决上述技术问题,本发明采用的技术方案为:一种无侵入JVM线程堆栈采集的方法,包括步骤,
S10、用户端在部署应用时,通过设置javaAgent参数加载Agent包;
S20、初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间;
S30、将通道ID以及通道建立时间保存到通道缓存;
S40、向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;
S50、根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;
S60、根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。
进一步的,所述方法还包括,
在连接通道建立后,通过心跳机制维持连接通道有效。
进一步的,所述初始化Agent包,还包括加载JVM线程堆栈采集接口。
进一步的,所述步骤S60具体包括,
根据获取线程堆栈的请求,调用本地方法通过JVM线程堆栈采集接口,读取线程堆栈信息返回用户端。
为了解决上述技术问题,本发明采用的另一个技术方案为:一种无侵入JVM线程堆栈采集的装置,包括,
Agent包加载模块,用于用户端在部署应用时,通过设置javaAgent参数加载Agent包;
Agent包初始化模块,用于初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间;
通道ID保存模块,用于将通道ID以及通道建立时间保存到通道缓存;
JVM线程堆栈请求模块,用于向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;
线程堆栈信息请求模块,用于根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;
线程堆栈信息返回模块,用于根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。
进一步的,所述装置还包括心跳维持模块,用于在连接通道建立后,通过心跳机制维持连接通道有效。
进一步的,所述Agent包初始化模块,
还用于加载JVM线程堆栈采集接口。
进一步的,所述线程堆栈信息返回模块,
还用于根据获取线程堆栈的请求,调用本地方法通过JVM线程堆栈采集接口,读取线程堆栈信息返回用户端。
本技术方案的技术效果在于:本发明通过JVM的javaAgent机制为JVM线程堆栈采集提供了通用无侵入模式的技术实现,避免开发人员在应用开发中采用硬编码采集逻辑,即插即用,降低了使用门槛;同时通过与注册中心的联动,实现了一种快速定位目标JVM进程的方法,无需登录目标服务器,降低采集门槛,同时降低了运维风险。
附图说明
下面结合附图详述本发明的具体结构。
图1为本发明的线程堆栈采集流程图;
图2为本发明的线程堆栈采集框架图;
图3为本发明的线程堆栈采集的应用实例图。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
参阅图1,一种无侵入JVM线程堆栈采集的方法,包括步骤,
S10、用户端在部署应用时,通过设置javaAgent参数加载Agent包;
S20、初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间;
S30、将通道ID以及通道建立时间保存到通道缓存;
S40、向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;
S50、根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;
S60、根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。
参阅图2,本技术方案实现了一种通用无侵入式采集JVM线程堆栈的方法,主要通过整合JVM字节码增强技术和长连接技术来实现无侵入采集。使用的逻辑架构包括:JavaAgent、注册中心和通道缓存;
JavaAgent:主要跟随应用进程JVM一起启动并实现了JVM线程堆栈采集的接口功能,其主要利用java的Instrumentation功能,在JVM启动时会优先加载JavaAgent包,然后执行JavaAgent包中预置的业务逻辑,包括跟注册中心建立连接通道,并向JVM注入线程堆栈采集的接口方法。
注册中心:主要负责与应用JVM进程建立长连接通道,并将通道列表保存到通道缓存,同时提供接口供用户(开发/运维人员)实时查询JVM线程堆栈;
通道缓存:主要负责保存当前所有跟注册中心建立连接的通道列表,缓存使用应用JVM进程的名称作为Key,以通道ID加上通道创建时间作为value,用户在向注册中心获取某个JVM线程堆栈时,传入JVM进程的名称,注册中心就从通道缓存找到对应的通道ID和创建时间,创建时间主要用于验证通道是否一致,避免通道ID冲突的问题,然后根据通道ID找到对应的长连接通道请求JVM线程堆栈信息。
本方案的javaAgent是跟随应用一起启动的,是同一个进程,另一种替代方案是采用独立的javaAgent,以独立的进程方式启动,当需要获取JVM线程堆栈时通过jstack+pid(应用进程ID)方式来读取信息,这种方式主要是需要实现一种额外能获取进程pid的方法,比如约定在应用进程启动时将pid写入某个约定的文件,或者是通过ps方法来检索。
实施例一
在一具体实施例中,所述方法还包括,
在连接通道建立后,通过心跳机制维持连接通道有效。
本实施例中,通过循环心跳维持JVM进程与注册中心之间的连接通道有效。
实施例二
在一具体实施例中,所述初始化Agent包,还包括加载JVM线程堆栈采集接口。
进一步的,所述根据获取线程堆栈的请求,读取线程堆栈信息返回用户端具体包括,
根据获取线程堆栈的请求,调用本地方法通过JVM线程堆栈采集接口,读取线程堆栈信息返回用户端。
本实施例中,调用本地方法,经过JVM线程堆栈采集接口,获取线程堆栈信息,返回用户端,用户就可以及时获得线程堆栈信息。
一种无侵入JVM线程堆栈采集的装置,包括,
Agent包加载模块,用于用户端在部署应用时,通过设置javaAgent参数加载Agent包;
Agent包初始化模块,用于初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间;
通道ID保存模块,用于将通道ID以及通道建立时间保存到通道缓存;
JVM线程堆栈请求模块,用于向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;
线程堆栈信息请求模块,用于根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;
线程堆栈信息返回模块,用于根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。
实施例三
在一具体实施例中,所述装置还包括心跳维持模块,用于在连接通道建立后,通过心跳机制维持连接通道有效。
实施例四
在一具体实施例中,所述Agent包初始化模块,
还用于加载JVM线程堆栈采集接口。
进一步的,所述线程堆栈信息返回模块,
还用于根据获取线程堆栈的请求,调用本地方法通过JVM线程堆栈采集接口,读取线程堆栈信息返回用户端。
实施例五
参阅图3,在一具体应用实例中,某电信CRM分布式系统有多个进程服务,如客户服务进程、订单服务进程、账号服务进程等,当这些应用进程启动时,会自动与注册中心服务建立通道并将本应用进程的Agent名称和通道号保存到通道缓存中;当用户需要查询CRM客户服务的线程堆栈信息时,直接通过“crm-cust”名称即可直接访问到CRM客户服务的进程内部,从而直接获取到目标信息。
综上所述,技术效果在于:本发明通过JVM的javaAgent机制为JVM线程堆栈采集提供了通用无侵入模式的技术实现,避免开发人员在应用开发中采用硬编码采集逻辑,即插即用,降低了使用门槛;同时通过与注册中心的联动,实现了一种快速定位目标JVM进程的方法,无需登录目标服务器,降低采集门槛,同时降低了运维风险。
此处第一、第二……只代表其名称的区分,不代表它们的重要程度和位置有什么不同。
此处,上、下、左、右、前、后只代表其相对位置而不表示其绝对位置。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (6)

1.一种无侵入JVM线程堆栈采集的方法,其特征在于:包括步骤,
S10、用户端在部署应用时,通过设置javaAgent参数加载Agent包;
S20、初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间,加载JVM线程堆栈采集接口;
S30、将通道ID以及通道建立时间保存到通道缓存;
S40、向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;
S50、根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;
S60、根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。
2.如权利要求1所述的无侵入JVM线程堆栈采集的方法,其特征在于:还包括,
在连接通道建立后,通过心跳机制维持连接通道有效。
3.如权利要求1所述的无侵入JVM线程堆栈采集的方法,其特征在于:所述步骤S60具体包括,
根据获取线程堆栈的请求,调用本地方法通过JVM线程堆栈采集接口,读取线程堆栈信息返回用户端。
4.一种无侵入JVM线程堆栈采集的装置,其特征在于:包括,
Agent包加载模块,用于用户端在部署应用时,通过设置javaAgent参数加载Agent包;
Agent包初始化模块,用于初始化Agent包,以在JVM进程与注册中心之间建立连接通道,生成通道ID以及通道建立时间,加载JVM线程堆栈采集接口;
通道ID保存模块,用于将通道ID以及通道建立时间保存到通道缓存;
JVM线程堆栈请求模块,用于向注册中心发送查询JVM线程堆栈的请求,所述请求包含JVM进程名称;
线程堆栈信息请求模块,用于根据JVM进程名称,向通道缓存获取对应的通道ID,并向目标JVM进程发送获取线程堆栈信息的请求;
线程堆栈信息返回模块,用于根据获取线程堆栈的请求,读取线程堆栈信息返回用户端。
5.如权利要求4所述的无侵入JVM线程堆栈采集的装置,其特征在于:还包括心跳维持模块,用于在连接通道建立后,通过心跳机制维持连接通道有效。
6.如权利要求4所述的无侵入JVM线程堆栈采集的装置,其特征在于:所述线程堆栈信息返回模块,
还用于根据获取线程堆栈的请求,调用本地方法通过JVM线程堆栈采集接口,读取线程堆栈信息返回用户端。
CN201811623149.XA 2018-12-28 2018-12-28 一种无侵入jvm线程堆栈采集的方法及装置 Active CN109726078B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811623149.XA CN109726078B (zh) 2018-12-28 2018-12-28 一种无侵入jvm线程堆栈采集的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811623149.XA CN109726078B (zh) 2018-12-28 2018-12-28 一种无侵入jvm线程堆栈采集的方法及装置

Publications (2)

Publication Number Publication Date
CN109726078A CN109726078A (zh) 2019-05-07
CN109726078B true CN109726078B (zh) 2022-12-06

Family

ID=66297479

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811623149.XA Active CN109726078B (zh) 2018-12-28 2018-12-28 一种无侵入jvm线程堆栈采集的方法及装置

Country Status (1)

Country Link
CN (1) CN109726078B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1761944A (zh) * 2003-03-21 2006-04-19 英特尔公司 用于虚拟机的动态服务注册中心
CN104503891A (zh) * 2014-12-10 2015-04-08 北京京东尚科信息技术有限公司 对jvm线程进行在线监控的方法和装置
CN105306433A (zh) * 2015-09-10 2016-02-03 深圳市深信服电子科技有限公司 一种访问虚拟机服务器的方法和装置
CN107273186A (zh) * 2017-06-28 2017-10-20 深信服科技股份有限公司 访问虚拟机服务器的方法、物理主机以及虚拟机
CN108874624A (zh) * 2018-05-31 2018-11-23 康键信息技术(深圳)有限公司 服务器、监控Java进程的方法及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6757895B1 (en) * 1998-07-31 2004-06-29 International Business Machines Corporation Method and apparatus to selectively define java virtual machine initialization properties using a browser graphical user interface
CN102722415B (zh) * 2012-05-22 2014-11-05 广州晶锐信息技术有限公司 基于堆栈体系结构Java SoC系统的垃圾收集方法
CN105227395B (zh) * 2015-08-28 2018-09-28 北京奇艺世纪科技有限公司 一种分布式jvm性能分析的方法、装置及系统
CN106326017A (zh) * 2016-08-17 2017-01-11 广东亿迅科技有限公司 基于Annotation使用的调用链的实现系统
CN107797901A (zh) * 2017-10-25 2018-03-13 四川长虹电器股份有限公司 一种堆栈分析以及邮件实时报警的实现方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1761944A (zh) * 2003-03-21 2006-04-19 英特尔公司 用于虚拟机的动态服务注册中心
CN104503891A (zh) * 2014-12-10 2015-04-08 北京京东尚科信息技术有限公司 对jvm线程进行在线监控的方法和装置
CN105306433A (zh) * 2015-09-10 2016-02-03 深圳市深信服电子科技有限公司 一种访问虚拟机服务器的方法和装置
CN107273186A (zh) * 2017-06-28 2017-10-20 深信服科技股份有限公司 访问虚拟机服务器的方法、物理主机以及虚拟机
CN108874624A (zh) * 2018-05-31 2018-11-23 康键信息技术(深圳)有限公司 服务器、监控Java进程的方法及存储介质

Also Published As

Publication number Publication date
CN109726078A (zh) 2019-05-07

Similar Documents

Publication Publication Date Title
WO2018006789A1 (zh) 一种参数校验方法和装置、以及网管服务器和计算机存储介质
US8949399B2 (en) Dynamic configuration of virtual machines
US20060190579A1 (en) Assisted command script template creation
US8996668B2 (en) Method and system for storing configuration information for network nodes in a network management system
US20090300180A1 (en) Systems and methods for remote management of networked systems using secure modular platform
US20040177361A1 (en) Generic application program interface for native drivers
CN105162646B (zh) 一种多协议接口测试系统及方法
US20080301143A1 (en) Automatic Update System and Method for Using a Meta Mib
CN111858375B (zh) 软件测试方法、装置、电子设备和介质
CN110764980A (zh) 日志处理方法和装置
CN112148610A (zh) 测试用例执行方法、装置、计算机设备和存储介质
US20130124570A1 (en) Registration of cim agent to management agent and system
CN112286705A (zh) 一种基于Kubernetes的容器web服务接口聚合系统
CN109726078B (zh) 一种无侵入jvm线程堆栈采集的方法及装置
WO2005103915A2 (en) Method for collecting monitor information
US6842781B1 (en) Download and processing of a network management application on a network device
Santos et al. Evaluating SNMP, NETCONF, and RESTful web services for router virtualization management
US8516094B2 (en) Method and network management apparatus for implementing information service level inheritance in network management system
US8200823B1 (en) Technique for deployment and management of network system management services
CN111858199A (zh) 一种自适配硬盘日志采集方法、系统、终端及存储介质
US20100191857A1 (en) Method and system for discovering the topology of the communications between applications of a computer network
CN112448854B (zh) 一种kubernetes复杂网络策略系统及其实现方法
EP1654653B1 (en) Active storage area network discovery system and method
US7260621B1 (en) Object-oriented network management interface
CN110061886B (zh) 一种基于snmp的印前网络管理系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant