XPocket 用户文档

XPocket 是PerfMa为终结性能问题而生的开源的插件容器,它是性能领域的乐高,将定位或者解决各种性能问题的常见的Linux命令,JDK工具,知名性能工具等适配成各种XPocket插件,并让它们可以相互联动一键解决特定的性能问题。 目前XPocket插件生态已经实现了HSDB、JDB、JConsole、Perf、Arthas等多个优秀的开源性能工具的插件化集成,现阶段主要侧重性能领域。

当你遇到以下类似问题时,XPocket可以帮助到你:

  1. 系统存在性能问题?
  2. 问题排查时一头雾水,无从下手?
  3. 使用一个新的工具,下载、文档、安装完就下班了?
  4. 好不容易用起来,只因输出不合理就又要去找新工具?
  5. 有些自己实现的小工具散落各处?
  6. 排查过的问题记不记住全凭脑子?

XPocket支持JDK 8+,支持Linux/Mac/Windows,采用命令行交互模式,提供丰富的 Tab 自动补全功能,支持管道操作。

插件开源生态

XPocket在线教程

XPocket官方网站

XPocket插件中心

快速开始

1.下载模拟程序,解压并运行

wget https://a.perfma.net/xpocket/download/XPocket-demo.tar.gz
tar -xvf XPocket-demo.tar.gz
cd simulator
sh run.sh

2.下载xpocket,然后解压并运行

wget https://a.perfma.net/xpocket/download/XPocket.tar.gz
tar -xvf XPocket.tar.gz
sh xpocket/xpocket.sh

启动成功后如下所示

3.使用插件

1.查看插件列表

plugins

列表如下图所示

2.使用命令 use + pluginName 或者 use + pluginName@NameSpace 来使用插件,例

use jdb@JDK

4.切换插件

  • 查看插件列表
  • 使用 use + pluginName 或者 use + pluginName@NameSpace 来使用插件

5.获取帮助

利用help命令来获取更多帮助信息

  • 获取插件相关的帮助信息 : help + pluginName@NameSpace ,例如。
help jdb@JDK
  • 获取命令相关的帮助信息 : help + pluginName.commandName (如果已经切换到插件的操作空间下,可以直接使用 help + commandName 的方式),例如。
help jdb.cont
  • 切换到某个插件的操作空间下后,可以通过help命令查看当前插件的命令列表。

6.管道操作

场景:当前插件位于JConsole下,需要attach上我们的demo程序。

  • 常规操作(jps -> 获取demo程序的pid -> 使用attach命令attach目标进程)。

  • XPocket的管道操作只需一条命令即可(jps | grep demo | split -i 0 | attach),如下所示。

7.退出插件

XPocket退出插件的方式很简单,只需要使用命令 cd 即可,cd命令可以退出当前插件,使得当前的操作空间回到系统层,如下图所示。

8.退出XPocket

退出XPocket使用命令 quit 即可,如下图所示

运行模式

1. telnet server模式

sh xpocket.sh -run_mode telnet -port 9527
  • 该模式会启动一个静默模式的XPocket,以对应端口的Telnet Server接受外部链接并使用,适用于远程执行操作的场景。

2. run once 模式

sh xpocket.sh -run_mode once "echo test"
  • 该模式是启动XPocket运行完指定命令以后直接退出,适用于外部调用完成单次操作的场景。

3. Java Agent模式

sh xpocket.sh -run_mode agent-launcher -pid 1 -port 9527
  • 该模式与telnet模式类似,但是是将XPocket整体作为一个Java Agent挂载到目标进程上运行,适用于容器类场景,并且可以获取更多JVM运行时信息。

插件开发

详情请见开发者指南

现有插件

HSDB

简介

探索JVM的运行时数据,强大的JVM运行时状态分析工具(注:由于jdk8以上开始实施模块化,导致HSDB与其的运行机制不兼容)。

操作指南

Command-Name                   Command-Description
hsdb hsdb [path of sa-jdi.jar] start hsdb command line Tips:
only support Windows platform

更多操作以及介绍请参考官方介绍

插件仓库

插件概况

JDB

简介

Java调试器(JDB)是Java类在命令行中调试程序的工具, 它实现了Java平台调试器体系结构, 它有助于使用Java调试接口(JDI)检测和修复Java程序中的错误。

操作指南

 Command-Name                   Command-Description
jdb jdb <options> <class> <arguments> Tips:
1.使用jdb -help获取详细帮助信息。
2.使用jdb -listconnectors 获取当前支持的所有连接器。
3.可以使用例如 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8000 链接已经开启debug模式的java进程。
4.使用jdb -classspath .:$CLASS_PATH 来启动jdb会话(windows上需要使用;分隔多个路径),然后通过stop in/at 设置断点并使用run启动一个可以被debug的java进程。
5.启动jdb会话以后也可以通过help命令获取详细帮助。

更多操作以及介绍请参考官方介绍

插件仓库

插件概况

Perf

简介

Perf功能强大,它可以检测CPU性能计数器,跟踪点,kprobes和uprobes(动态跟踪),它能够进行轻量级分析。它也包含在Linux内核的tools / perf下,并且经常更新和增强,

Perf最初是在Linux中使用性能计数器子系统的工具,并且进行了各种增强以添加跟踪功能,更详细的内容请参考Perf介绍

操作指南

  Command-Name                   Command-Description
config Get and set variables in a configuration file.
context-switches process context-switches detail
page-faults process page-faults detail
lock Analyze lock events
ftrace simple wrapper for kernel's ftrace functionality
report Read perf.data (created by perf record) and display the profile
analyze analyze process cpu usage
record Run a command and record its profile into perf.data
sched Tool to trace/measure scheduler properties (latencies)
probe Define new dynamic tracepoints
script Read perf.data (created by perf record) and display trace output
version display the version of perf binary
list List all symbolic event types
annotate Read perf.data (created by perf record) and display annotated code
create-java-perf-map generate /tmp/perf-<pid>.map files for just-in-time(JIT)-compiled methods for use with perf
stat Run a command and gather performance counter statistics
proc-stat process performance stats

Perf插件集成了PerfMa自己增加的几条命令如:analyze命令:

analyze -p [pid] (-p 指定进程采集热点)

analyze -detail 查看进程CPU热点抓取结果

同时支持perf原生的命令和参数,并且针对java程序集成了perf-map-agent 这个工具,可以协助显示java的调用栈信息.具体使用方式见命令的帮助信息(如 help analyze)

插件仓库

插件概况

Arthas

简介

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱,支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

操作指南

 Command-Name                   Command-Description
attach attach [pid],attach a java process and start the Arthas server in localhost 3658,then connect it Tips:
Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.

XPocket管控了Arthas在attach进程之前的输入输出,attach之后的具体使用请参考Arthas官方文档

Arthas

插件仓库

插件概况

JConsole

简介

JConsole 是一个内置Java性能分析器,用于对JVM中内存,线程和类等的监控,这款工具的好处在于,占用系统资源少,而且结合Jstat,可以有效监控到java内存的变动情况,以及引起变动的原因。在项目追踪内存泄露问题时,很实用。

操作指南

 Command-Name                   Command-Description
attach attach <local jvm pid> Tips:
1.使用help获取帮助信息。
2.更详细的功能,请attach一个进程后使用

注:插件化后的JConsole相比gui版本的JConsole在显示与操作上有所区别,但是数据的采集方式是一样的。

插件仓库

插件概况

VJMap

简介

分代版的jmap(新生代,存活区,老生代),是排查内存缓慢泄露,老生代增长过快原因的利器。因为jmap -histo PID 打印的是整个Heap的对象统计信息,而为了定位上面的问题,我们需要专门查看OldGen对象,和Survivor区大龄对象的工具。

vjmap的原始思路来源于R大的TBJMap ,翻新后支持JDK8,支持Survivor区大龄对象过滤。

注意:因为VJMap的原理,只支持CMS和ParallelGC,不支持G1。

操作指南

 Command-Name                   Command-Description
vjmap vjmap 1.0.9 - prints per GC generation (Eden, Survivor, OldGen) object details of a given process. Tips:
Usage: vjmap <options> <PID>
Usage: vjmap <options> <executable java path> <coredump file path>
Usage "help vjmap" show options info Example:
打印整个堆中对象的统计信息,按对象的total size排序:
vjmap -all PID > /tmp/histo.log 推荐,打印老年代的对象统计信息,按对象的oldgen size排序,比-all快很多,暂时只支持CMS:
vjmap -old PID > /tmp/histo-old.log 推荐,打印Survivor区的对象统计信息,默认age>=3
vjmap -sur PID > /tmp/histo-sur.log 推荐,打印Survivor区的对象统计信息,查看age>=4的对象
vjmap -sur:minage=4 PID > /tmp/histo-sur.log 推荐,打印Survivor区的对象统计信息,单独查看age=4的对象:
vjmap -sur:age=4 PID > /tmp/histo-sur.log

VJMap

插件仓库

插件概况

Doraemon

简介

Doraemon是PerfMa开发的一款链接性能分析产品的体验工具,操作简单,功能强大,提供jvm参数分析,线程离线分析以及内存离线分析的功能

操作指南

  Command-Name                   Command-Description
attach attach <local jvm pid>
detach detach
analyse use 'analyse <AbsolutePath>' to analyse memory dump file
help command help info Tips:
1.更丰富的操作,请先attach一个进程

插件概况

插件中心

更丰富的内容,建议您前往插件中心

Tips

  • sa-jdi.jar 主要用于支持插件VJMap的正常使用(注:由于jdk8以上开始实施模块化,导致VJMap的运行机制不兼容)。
  • 框架扩展开发的包依赖: com.perfma.xlab:xpocket-framework-spi:2.0.0-RELEASE

镜像仓库

官方文档 | 【JVM调优体系】「GC底层调优实战」XPocket为终结性能问题而生—开发指南的更多相关文章

  1. 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)

    前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...

  2. JVM - Java虚拟机规范官方文档

    Java虚拟机规范官方文档    

  3. 【知识体系】Kafka文档汇总、组成及架构,配置,常见名词解释,命令行及api操作,官方文档内容,各部分深入,zookeeper和security,监控和运维

    〇.相关资料 1.快速搭建文档: 2.详细讲义 3.在线官方文档:http://kafka.apache.org/documentation/ 4.Kafka知识个人总结 5.KafkaPPT汇报 链 ...

  4. cassandra 3.x官方文档(7)---内部原理之如何读写数据

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  5. hbase官方文档(转)

    FROM:http://www.just4e.com/hbase.html Apache HBase™ 参考指南  HBase 官方文档中文版 Copyright © 2012 Apache Soft ...

  6. HBase 官方文档

    HBase 官方文档 Copyright © 2010 Apache Software Foundation, 盛大游戏-数据仓库团队-颜开(译) Revision History Revision ...

  7. HBase官方文档

    HBase官方文档 目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. Apache HBase (TM)配置 2.1. 基础条件 2.2. HBase 运行模式: 独立和分布式 2.3. ...

  8. HBase 官方文档0.90.4

    HBase 官方文档0.90.4 Copyright © 2010 Apache Software Foundation, 盛大游戏-数据仓库团队-颜开(译) Revision History Rev ...

  9. Akka Typed 官方文档之随手记

    ️ 引言 近两年,一直在折腾用FP与OO共存的编程语言Scala,采取以函数式编程为主的方式,结合TDD和BDD的手段,采用Domain Driven Design的方法学,去构造DDDD应用(Dom ...

  10. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

随机推荐

  1. 2022 ICPC沈阳合肥游记

    选赛区的时候很争议,除了沈阳是确定要选,队友对于合肥新赛区的看法很质疑,但我想选合肥,一是觉得人少,二是觉得强队会少,因为隔壁CCPC.然后就选了合肥,看情况选合肥确实很对. 一开始也不认为会拿牌,后 ...

  2. JS实现中英文混合文字友好截取功能

    众所周知,一个汉字等于两个英文字母的长度.那么,从汉字或者英文字母中截取相同长度文字则显示的长度则不一样.此时用户体验会不好.那么怎么解决呢?往下看 <script> /** * JS实现 ...

  3. [api自动化]快速导出接口到jmeter脚本

    [场景]在项目做接口自动化的时候,大家一般找接口文档或者其他接口资料,逐一编写脚本.这样效率低,且容易由于文档未更新导致接口调试不通 [解决方案]页面上操作对应功能,直接捕获用到的接口,导出到jmet ...

  4. javascript原型,继承

    //普通对象 //函数对象(有原型 prototy 的属性) //原型的应用 继承 function Amial(){ this.type = '小于' } function cat(name){ t ...

  5. element ui动态生成表单数据与校验(后台传入数据)

    前言 最近有一个需求是通过后台返回的数据,生成表单并添加校验.在做的过程中,动态表单挺好做,关键是校验.困扰了我2天,最后通过查找资料和"运气"终于解决了.解决问题关键点:vue的 ...

  6. [Leetcode 111]二叉树的最短深度 BFS/DFS

    题目 给定二叉树,求最短路径包含的节点个数 https://leetcode.com/problems/minimum-depth-of-binary-tree/ Given a binary tre ...

  7. CentOS 7(Linux)安装docker,执行yum install docker-io -y报错

    CentOS 7(Linux)安装Docker,执行yum install docker-io -y报错 一.执行yum install docker-io -y报错 Error: docker-ce ...

  8. 几个Python线程坑,和连接池的坑

    urlretrieve 没有超时,需要通过socket来设置 socket.setdefaulttimeout(10) 而且还需要为他设置连接池,所以直接改用requests来下载文件 def dow ...

  9. 剑指Offer2---------替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   重点: ...

  10. Rename a Local and Remote Git Branch

    Renaming Git Branch Follow the steps below to rename a Local and Remote Git Branch: 01 Start by swit ...