性能测试的监控部署(五)——大话性能测试(19)

发表于:2022-7-15 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:胡通    来源:51Testing软件测试网原创

  2.应用JVM层的监控和方法
  虚拟机在物理上主要划分为两个,即新生代(YoungGeneration)和老年代(OldGeneration)。
  -新生代:绝大多数最新被创建的对象会被分配到这里,因为大部分对象在创建后会很快变得不可到达,所以很多对象被创建在新生代,然后消失。对象从这个区域消失的过程我们称之为MinorGC或者YoungGC(YGC)。
  -老年代:对象没有变得不可到达,并且从新生代中存活下来,会被复制到这里。其占用的空间要比新生代多。也正由于其占用了相对较大的空间,发生在老年代上的GC要比新生代少得多。对象从这个区域消失的过程我们称之为M哲orGC或者FullGC(FGC)。
  新生代用来保存那些第一次被创建的对象,它可以被分为3个区:1个Eden区(EdenSpace)和2个Survivor区(SurvivorSpace)。
  绝大多数刚刚被创建的对象会存放在Eden区。此后,在Eden区执行了第一次GC之后,存活的对象被移动到其中一个Survivor区。当这个Survivor区达到饱和,还在存活的对象会被移动到另一个Survivor区。之后会清空已经饱和的那个Survivor区。在以上的步骤中重复几次依然存活的对象,就会被移动到老年代。
  (1)监控指标。
  JVM内存使用率。
  YGC和YGCT(YoungGC的次数与时间)。
  FGC和FGCT(FullGC的次数与时间)。
  GCT(总的GC时间)。
  (2)监控方法。
  虚拟机常出现的问题包括内存泄漏、内存溢出和频繁GC导致性能下降等。导致这些问题的原因可以通过下面虚拟机内存的监视手段来进行分析,具体实施时可能需要灵活选择这些手段,同时借助两种甚至更多的手段来共同分析。例如,通过GC日志可以分析出哪些GC较为频繁导致性能下降、是否发生内存泄漏;jstat工具和GC日志类似,同样可以用来査看GC情况、分析是否发生内存泄漏;判断发生内存泄漏后,可以通过结合使用jmap和MAT等分析工具来查看虚拟机内存快照,分析发生内存泄漏的原因;通过査看内存溢出快照可以分析出内存溢出发生的原因等。
  GC日志记录。将JVM每次发生GC的情况记录下来,通过观察GC日志可以看出来GC的频度,以及每次GC都回收了哪些区域的内存,从而可以判断是否有内存泄漏发生,并以这些信息为依据来调整JVM相关设置,减小MinorGC发生的频率以及减少FGC发生的次数。
  JDK自带命令工具如下。
  jmap+MAT常用来定位内存溢出问题。
  jstack常用来定位线程、死循环、死锁问题。
  JVisualVM可以用来进行本地和远程可视化监控,比较直观。
  命令具体的使用方法如表1-4所示。
表1-4JDK自带命令使用方法
  提示
  MAT(MemoryAnalyzerTool)是Eclipse的一个插件,使用起来非常方便。尤其是在分析大内存的dump文件时,使用MAT可以非常直观地看到各个对象在堆空间中所占用的内存大小、类实例数量和对象引用关系,可以利用对象查询语言(OQL)査询,以及可以很方便地找出对象GCRoots的相关信息,最吸引人的是它能够快速为开发人员生成内存泄漏报表,方便开发人员定位和分析冋题。
  在macOS的命令行中直接输入jvisualvm命令,或在Windows下找到对应的exe文件双击即可打开JavaMsualVM,如图1-7所示。另夕卜,建议安装UsualGC和BTYaceWwtbench,便于定位问题。
图1-7macOS下的JavaVisualVM工具界面
  这是本地的Java进程监控界面,JavaVsualVM还可以进行远程的监控。在图1-7左侧导航栏的Applications视图下的Remote处用鼠标右键单击,选择AddRemoteHost选项,输入主机IP地址即可添加监控主机。在IP地址上用鼠标右键单击会发现有两种连接Java进程进行监控的方式,jmx和jstatdo一般如果是Tomcat修改启动脚本catalina.sh,需添加如下参数配置:
  启动Tomcat,以JMX为例,在IP地址上用鼠标右键单击并选择AddJMXConnection选项,输入IP地址和端口号即可,如图1-8所示。
图1-8macOS下配置远程应用监控
  这里重点推荐一款小巧的代码定位性能的工具——阿里开源工具TProfilero该工具小巧,安装简便,对代码没有任何侵入性,同时对性能影响也较小,甚至可以用在生产环境进行问题排查。我们只需要在启动参数中加入-javaagent:/xx/tprofiler.jar,即可监控想要监控的方法耗时,并且可以输出报告,非常方便。
  首先,访问TProfiler的GitHub主页,单击Code按钮打开下载菜单,选择该菜单下的DownloadZIP选项将TProfiler-master.zip下载到本地。
  然后,在本地将下载的TProfiler-master.zip解压缩,将dist目录下的profile.pr(枣erties,以及dist/lib目录下的Iprofiler-l.O.l.jar通过FTP上传到远程服务器/opt/gafiler目录下。
  最后,按如下方式编辑服务器上/opt/tpro句er/profile.properties文件的内容:
查看《大话性能测试》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号