文章采集调用 直观:深入浅出JProfiler

优采云 发布时间: 2022-11-02 07:14

  文章采集调用 直观:深入浅出JProfiler

  由于最近的工作,我使用 JProfiler(8) 来分析性能瓶颈。我发现这个工具用起来真的很方便。下面我就整理一下JProfiler的相关知识。

  1.什么是JProfiler

  JProfiler 是由 ej-technologies GmbH 开发的性能瓶颈分析工具(该公司还开发部署工具)。

  其特点:

  2.数据采集

  Q1。既然 JProfiler 是一个性能瓶颈分析工具,那么这些分析的相关数据是从哪里来的呢?

  Q2。JProfiler 如何采集和显示这些数据?

  (图2)

  A1。分析的数据主要来自以下两部分

  1.来自jvm的部分解析接口JVMTI(JVM Tool Interface),JDK必须>=1.6

  JVMTI 是一个基于事件的系统。分析代理库可以为不同的事件注册处理函数。然后它可以启用或禁用选定的事件

  例如:对象生命周期、线程生命周期等信息

  2、部分来自instruments类(可以理解为类的重写)

  例如:方法执行时间、次数、方法栈等信息

  A2。数据采集​​原理如图2所示

  1.用户在JProfiler GUI中发出监控命令(通常通过点击按钮)

  2. JProfiler GUI JVM通过socket(默认端口8849)向被分析JVM中的JProfile Agent发送指令。

  3. JProfiler Agent(如果不了解Agent,请看文章第三部分“启动模式”)收到指令后,将指令转换成相关事件或需要监控的指令注册到JVMTI或直接让JVMTI执行一个功能(比如dump jvm内存)

  4、JVMTI根据注册的事件采集当前jvm的信息。例如:线程的生命周期;jvm的生命周期;类的生命周期;对象实例的生命周期;堆内存的实时信息等

  5、JProfiler Agent将采集好的信息保存在内存中,并按照一定的规则进行统计(如果数据全部发送,对被分析的应用网络会有比较大的影响)

  6. 返回 JProfiler GUI Socket。

  7. JProfiler GUI Socket将接收到的信息返回给JProfiler GUI Render

  8. JProfiler GUI Render 渲染最终显示效果

  3.data采集方法及启动方式

  A1。JProfier采集 方法分为两种:Sampling (sample采集) 和 Instrumentation

  注意:JProfiler 本身并没有指明 采集 类型的数据,这里的 采集 类型是 采集 类型用于方法调用。因为JProfiler的大部分核心功能都依赖于方法调用采集的数据,所以可以直接认为是JProfiler的数据采集类型。

  A2:启动模式:

  四。JProfiler 核心概念

  过滤器:需要分析什么类。有两种类型的过滤器收录和不收录。

  (图4)

  Profiling Settings: Receipt 采集 strategy: Sampling and Instrumentation,一些数据采集细节可以自定义。

  (图5) Triggers:一般用在离线模式下,告诉JProfiler Agent什么时候触发什么行为来采集指定的信息。

  (图 6)实时内存:关于类/类实例的信息。比如对象的数量和大小,对象创建的方法执行栈,对象创建的热点。

  (图7) Heap walker:静态分析一定时间内采集到的内存对象信息,强大实用。传出引用、传入引用、最大对象等。

  

  (图8)CPU视图:CPU消耗分布和时间(cpu时间或运行时间);方法执行图;方法执行统计(最大值、最小值、平均运行时间等)

  (图9)线程:当前jvm所有线程的运行状态,持有锁的线程的状态,线程可以dump。

  (图10) Monitors & locks:所有线程持有锁和锁信息

  (图11) Telemetries:趋势图(遥测视图)包括堆、线程、gc、类等。

  5. 练习

  为了方便实践,使用JProfiler8自带的一个例子来帮助理解上述相关概念。

  JProfiler 自带的例子如下: 模拟内存泄漏和线程阻塞的场景:

  (图 12)

  (图 13)

  A1。首先,我们来分析一下内存泄漏的场景:

  1、在Telemetries->Memory视图中,会看到大致如下图的场景(查看过程中可以间隔执行Run GC功能):老年代gc后内存大小慢慢增加(理想情况下,这个值应该是稳定的)

  (图 14)

  点击Live memory->Recorded Objects**中的记录分配数据按钮,开始统计一段时间内创建的对象信息。执行一次Run GC后,查看当前对象信息的大小,点击工具栏中的Mark Current**按钮(其实就是标记当前对象个数。执行一次Run GC,然后继续观察;执行一次运行GC,然后继续观察....最后看看GC后哪些对象在不断增加,最后看到的信息可能类似于下图

  (图15)分析刚刚记录在Heap walker中的对象信息

  (图 16)

  (图17)点击上图中实例最多的类,右键Use Selected Instances->Reference->Incoming Reference。

  发现Long数据最终保存在bezier.BeierAnim.leakMap中。

  (图 18)

  在 Allocations 选项卡中,右键单击其中一种方法以查看特定的源代码信息。

  (图 19)

  【注】:至此,问题就很清楚了,明白为什么图17的instance数一样,为什么fullgc后内存无法回收(老区的一个对象leakMap,的信息put也会进入老区,如果leakMap无法回收,则map中收录的对象也无法回收)。具体源码参考:/jprofiler install path/demo/bezier

  A2。模拟线程阻塞的场景

  为了方便区分线程,我将Demo中BezierAnim.java的L236的线程命名为test

  公共无效开始(){

  线程 =newThread(this,"test");

  thread.setPriority(Thread.MIN_PRIORITY);

  线程.start();

  }

  正常情况下,如下图所示

  (图 20)

  在Demo中勾选“模拟阻塞”选项后,如下图(注意下图中的状态图标),测试线程的阻塞状态明显增加。

  (图 21)

  在 Monitors & locks->Monitor History 中观察一段时间后,会发现出现锁的情况有 4 种。

  首先:

  AWT-EventQueue-0 线程持有对象锁,处于等待状态。

  

  下图代码表示Demo.block方法调用了object.wait方法。这还是比较容易理解的。

  (图 22)

  第二:

  AWT-EventQueue-0 持有 bezier.BezierAnim$Demo 实例上的锁,测试线程等待线程释放它。

  注意下图底部的源代码。这个锁的原因是Demo的blcok方法在AWT和测试线程中。

  将被执行并且方法被同步。

  (图 23)

  第三和第四:

  测试线程会继续向 Event Dispatching Thread 提交任务,从而导致对 java.awt.EventQueue 对象锁的竞争。

  提交任务的方式如下代码:repaint()和EventQueue.invokeLater

  公共无效运行(){

  Threadme =Thread.currentThread();

  而(线程==我){

  重绘();

  如果(块){

  块(假);

  }

  尝试{

  线程.sleep(10);

  }catch(异常){

  休息;

  }

  EventQueue.invokeLater(newRunnable() {

  @覆盖

  公共无效运行(){

  onEDT方法();

  }

  });

  }

  线程=空;

  }

  (图 24)

  6. 最佳实践

  JProfiler会给出一些特殊操作的提示,此时最好仔细阅读说明。“标记当前”功能在某些场景下非常有效。Heap walker一般静态分析Live memory->Recorder objects中的对象信息。此信息可能会被 GC 回收,导致 Heap walker 中不显示任何内容。这种现象是正常的。您可以在工具栏中的开始录制中配置一次采集的信息

  免费获取:关键词查询-精准关键词查询-网站整站关键词分析工具免费

  关键词查询功能:输入关键词实时查询网站排名

  关键词 查询,网站 的流量是由 关键词 带来的,所以 关键词 的优化对提高 网站 的权重有重要作用,我们已经知道关键词有很强的目的性,也就是说用户对这种性质的关键词有一定的需求,所以很容易让用户准确找到自己想要的内容,以及如何拓展相关行业的流量关键词。今天给大家分享一款免费的关键词挖矿工具,设置收录词只挖行业相关词。详情请看图片!!!

  Peer关键词采集功能:输入网站,一键采集Peer关键词解析

  SEO优化不提升,网站关键词排名上不去,感觉不错!被迫说话,让我安静!搜索引擎优化给你分析分析,别着急,找对方法,关键词查询关键词排名接近首页!

  很多情况下,我们发布的外部链接的位置是否有很强的用户浏览体验,即页面的清洁度、打开的速度,尤其是完整性、关键词查询和稳定的加载速度都可以有待提高 搜索引擎抓取的速度。提高用户访问效率。

  随着在线时间的积累,网站内容的持续跟进和更新,域名的使用时间,流量的稳定性,用户回访率的稳定性,用户的持续推荐都会提高网站 信任。关键因素。网站信任度的提高是搜索引擎排名网站的重要依据。

  

  一是持续更新优质网站内容

  网站内容的持续更新对网站的截图、采集、排名有很大的影响。如果 网站 要增加其在搜索引擎中的权重并保持 网站 快照更新和收录,则 关键词 查询必须保持 网站 内容不断更新。必须每天更新,三天不钓,两天不晒网,否则会导致抓网效率低下。

  二是及时提升网站用户体验

  用户体验也很重要。通过SEO优化网站、关键词查询时,一定要考虑用户体验。在优化过程中,我们可以注意及时改善和提升网站的用户体验。

  三是兑换优质网站链

  构建外链,我们要尽量选择高权重的网站,这对你的网站权重也有帮助。请勿发送垃圾链接添加外部链接,关键词查询对您的网站 非常危险。

  四、网站服务器空间的安全稳定

  服务器是 网站 的基础设施之一。它不仅考虑了服务器的稳定性和性能速度,还考虑了相同的网站类型的服务器。网站域名必须匹配网站主题。关键词这样查询,应该用百度来评价你的网站。

  流行一句话:内容为王,链接为王。近年来,搜索引擎一直在变化,外部链接的作用已经不是那么重要了,但是对于内容为王的说法,因为搜索引擎的功能就是将用户搜索到的词或者问题的答案呈现给用户用户,所以高质量的内容是搜索引擎喜欢的。

  

  那么如何呈现高质量的 网站 内容呢?seo文章 的写作技巧。其实SEO文章的写作技巧并不难,只是一些琐碎的点,可能你没有注意到,或者你忘了这里。

  一、内容操作分类

  SEO文章的内容操作可以分为两类:一类是一次性操作;这是什么意思?关键词查询即我们添加后不需要修改内容,例如我们的网站中的公司简介和联系我们等部分。这些列只是固定在基础上的内容。尝试一下子做完,然后我们就不用担心了。二是持续操作,比如我们的列表页,在列表页中,我们需要为变化的列编辑很多文章,不断更新内容,这就是我们所说的持续内容操作。

  2. 可延续的内容

  对于连续的内容,也就是我们需要每天更新的栏目文章,需要注意以下几点:

  1、标题可以说是文章的重要组成部分。标题是收录 关键词 的句子描述。关键词查询这是我的定义。首先,您需要在 网站 主页或部分的标题中收录 关键词。另外,如果你描述一个完整的句子,你不能只是堆叠关键词,你可以陈述事实,或者你可以提问。

  2.说到字数,有的小伙伴说200-500字比较合适。我在这里纠正它。这是片面的看法。我们提供的内容旨在满足用户的需求。只要满足用户的需求,100字也行。如果一个话题需要详细解释,关键词query then 2000 words就可以了。另外还需要注意的是,文章的内容要符合当前栏目的风格。简单来说,新闻内容应该放在“新闻中心”栏目下,产品介绍内容应该放在“产品介绍”栏目下,产品FAQ应该放在“问答”栏目下。

  3、图片是文字内容的形象展示,起到辅助作用。它也是用户相关需求的规范。需要注意的是,图片应该提供alt属性,但并不是所有的图片都应该提供alt属性。图片的alt属性应该收录标题中要展开的内容并描述为一个句子,关键词查询而不是堆叠关键字。

  4.相关推荐是一种内链方式。优化内链可以解决用户跳出率高的问题,增加网站浏览的PV量。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线