CN109726078B - 一种无侵入jvm线程堆栈采集的方法及装置 - Google Patents
一种无侵入jvm线程堆栈采集的方法及装置 Download PDFInfo
- 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
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线程堆栈采集的方法及装置。
背景技术
随着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线程堆栈采集接口,读取线程堆栈信息返回用户端。
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)
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)
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 | 四川长虹电器股份有限公司 | 一种堆栈分析以及邮件实时报警的实现方法 |
-
2018
- 2018-12-28 CN CN201811623149.XA patent/CN109726078B/zh active Active
Patent Citations (5)
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 |