软件性能测试(连载21)

简介: 软件性能测试(连载21)

3.7 JVM调优


      在第2.5 节介绍了JVM性能监控,本节介绍一下JVM调优[29]


1)配置jstatd的远程RMI服务。

如果要看远程服务器上Java程序的GC情况需要执行这个步骤,允许JVM工具查看JVM使用情况。

将下面的代码存为文件jstatd.all.policy,放到%JAVA_HOME%/bin目录下,其内容如下。


grant codebase"file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};


执行命令。


>jstatd-J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.0.12&


192.168.0.12为服务器的IP地址。


2jVisualVM控制台

执行%JAVA_HOME%\bin\jvisualvm.exe,打开JVM控制台。通过菜单“工具->插件”中找到Visual GC插件进行安装。


3)对要执行Java程序进行调优

my.jar为例,在该jar包所在目录下建立一个start.sh文件,文件内容如下。


java -server -Xms4G -Xmx4G -Xmn2G -XX:SurvivorRatio=1-XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1100-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false -jar my.jar&


配置后,使用JVM控制台即可查看JVMCPU/内存)及垃圾回收的状况。


4控制台配置

打开\jvisualvm.exe,通过菜单“远程->添加远程主机->输入远程IP->添加JMX连接”。


5JVM调优核心为调整年轻代、老年代的内存空间大小以及使用GC的类型。在start.sh文件内容。


首先确认这台机器是一个4G内存的机器。

-Xms4GJVM启动时整个堆(包括年轻代,年老代)的初始化大小。

-Xmx4GJVM启动时整个堆的最大值。

-Xmn2G指年轻代的空间大小,剩下的是年老代的空间。

-XX:SurvivorRatio=1是指年轻代空间的2Survivor空间与Eden空间的大小比例。


官方通过增大Eden区的大小,来减少YGC发生的次数,有时虽然次数减少了,但Eden区满的时候,由于占用的空间较大,导致释放缓慢,此时stop-the-world的时间较长,所以需要按照程序实际情况去调优。


-XX:+UseConcMarkSweepGC指使用GC的回收类型。这里是CMS类型,JDK1.7以后推荐使用+UseG1GC,被称为G1类型(GarbageFirst)的回收器。

6)当设定start.sh的参数值完毕后,执行./start.sh此时就可以启动了。


通过jvisualvm.exe中的Visual GC插件查看GC的图形,也可以在服务器上执行:jstat -gc  1000,看到每1秒钟Java进程号JIDGC回收情况。

# jstat -gc 15016 1000
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGCFGCT GCT
699008.0 699008.0 29980.4 0.0 699136.0 116881.62097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272
699008.0 699008.0 29980.4 0.0 699136.0 118344.82097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272
699008.0 699008.0 29980.4 0.0 699136.0 119895.52097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272
699008.0 699008.0 29980.4 0.0 699136.0 121383.12097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272
••S0C。


Survivor0区分配空间。

S0U

Survivor1区中已经使用的空间。

EC

Eden区中所使用的空间。

EU

Eden区的当前使用空间。

OC

老年代分配的空间。

OU

老年代当前使用的空间。

PC

持久代的分配的空间。

PU

持久代的当前使用的空间。

YGC

年轻代发送的次数。

YGCT


年轻代发送的总时长。因此每次年轻代发生GC,即平均每次stop-the-world的时长为YGCT/ YGC ,单位为秒。


FGC

年老代回收的次数,或者成为FullGC的次数。

FGCT

年老代发生回收的总时长。

GCT


包括年轻代YGC及年老代FGC的总时间长。


通常结合图形或数据,可以看到当EU即将等于EC的时候,会发生YGC,所以YGC次数+1YGCT时间会增加。


当发生YGC的时候,如果S0US1U区如果有任意一个区域为0的时候,此时YGC的速度很快,相反如果S0U或者S1U中都有数据,或相对满的时候,此时YGC的时间偏长,这就是因为S0/S1Eden区的比例问题导致的。


7)经过一定时间的调优,基本上可以使得YGC的次数非常少,时间非常快,很长时间,数天都不会发生FGCJVM调优结束。


顾翔老师与云测学院联合推出:软件测试分析与设计,请点击https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不同观念欢迎与顾翔老师交流!


投票已过期

1.以下你用过哪些集中配置管理系统?(多选)

  • puppet
  • Chef
  • ansible
  • saltstack
  • Cfengine
  • Capistrano
  • Resque
  • Rundeck
  • Rundeck
  • 其他

2.以下你用哪些过虚拟机或容器?(多选)

  • VMware
  • Vagrant
  • Amazon EC2
  • AMI(亚马逊云机器镜像)
  • Vagrant
  • Docker
  • Rkt
  • 裸金属服务器
  • 其他

3.以下你用哪些操作系统自动化配置工具?(多选)

  • Solaris10 JumpStart
  • Kickstart
  • Debian-Preseed
  • 其他

4.以下你用哪些云平台?(多选)

  • Amazon Web Services
  • Google App Engine
  • Windows Azure
  • OpenShift
  • Cloud Foundry
  • AWS CloudFormation
  • Microsoft Azure Stack
  • OpenStack Heat
  • 百度云
  • 阿里云
  • 腾讯云
  • 其他

5.以下你用哪些CI/CD工具?(多选)

  • Jenkins
  • ThoughtWorks GoCD
  • Atlassian Bamboo
  • Microsoft Team Foundation Server
  • TeamCity
  • GitLab CI
  • Travis CI
  • SNAP CI
  • Pivotal的Concourse
  • Etsy的Morgue
  • 其他

6.以下你用哪些管理工具?(多选)

  • JIRA
  • LeanKit
  • Mingle
  • 禅道
  • 其他

7.以下你用哪些安全工具?(多选)

  • Vault
  • Keywhiz
  • credstash
  • Red October
  • Metasploit
  • OSSEC
  • Tripwire
  • Unhide
  • OWASP ZAP Zed Attack Proxy Project
  • Lynis
  • The Browser Exploitation Framework
  • OWASP Xenotix XSS Exploit Framework
  • OWASP Offensive Testing Framework
  • Brakeman
  • WPScan
  • nmap
  • Burp Suite
  • AWVS
  • AppScan
  • CSRFTester
  • SQL Map
  • Pangolin
  • DirBuster
  • 其他

8.以下你用哪些静态扫描工具?(多选)

  • Sonar
  • Brakeman
  • Codeclimate
  • CheckStyle
  • 其他



相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
3天前
|
XML 数据管理 测试技术
深入探索软件自动化测试框架的设计与实现
【4月更文挑战第26天】 随着软件开发周期不断缩短,传统的手动测试方法已难以满足快速迭代的需求。本文聚焦于自动化测试框架的构建与优化,旨在提供一种高效、可维护且可扩展的软件测试解决方案。文章从自动化测试的必要性出发,详细阐述了自动化测试框架设计的核心要素,包括模块化设计、数据驱动测试以及关键词驱动测试等概念。同时,结合实例分析了如何利用流行的测试工具进行框架搭建,并提出了针对常见问题的创新解决方法。最后,通过案例研究展示了该框架在实际项目中的应用效果和潜在改进空间。
|
3天前
|
设计模式 测试技术 持续交付
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第20天】 在软件开发的复杂世界中,确保产品的质量和性能始终是至关重要的任务。白盒测试,作为软件测试领域的重要分支,提供了对程序内部结构和逻辑的深入分析手段。本文将探讨如何通过有效的白盒测试策略来优化软件性能,减少缺陷,并最终提高用户满意度。通过剖析代码检查、单元测试、集成测试等白盒测试技术,我们将了解这些方法如何揭示潜在的问题点,并为改进提供方向。
|
3天前
|
设计模式 前端开发 测试技术
软件质量的守门人——接口测试
接口作为API,是后端预定义的函数,用于系统间通信和数据交换。接口测试验证不同组件间的交互,确保其准确、可靠。常见应用场景包括集成测试、版本迭代测试、性能测试、安全测试和错误场景测试。随着服务端复杂性的增加,传统测试方法面临挑战,因此引入分层测试(如马丁福勒的测试金字塔模型)和自动化测试,以降低成本并提高效率。接口测试成为确保后端服务质量的关键,学习接口测试可从理解其价值、协议、工具使用及Mock测试等方面逐步进阶。
4 1
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
深入探索软件自动化测试的未来趋势
【5月更文挑战第12天】 随着软件开发周期的不断缩短和市场需求的快速变化,传统的手动测试方法已经难以满足现代软件质量保证的需求。自动化测试作为一种高效、可靠的解决方案,正逐渐成为行业标配。本文将深入探讨自动化测试的最新发展,分析其在持续集成/持续部署(CI/CD)环境中的作用,以及人工智能(AI)如何重塑测试实践。同时,我们还将展望自动化测试工具和技术的未来演进路径。
|
3天前
|
机器人 测试技术 语音技术
LabVIEW使用软件定义进行汽车电子测试
LabVIEW使用软件定义进行汽车电子测试
12 0
|
3天前
|
程序员 测试技术
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。
【5月更文挑战第11天】程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。复杂的系统易产生意外问题,需求变化导致初始设计难完备,测试无法覆盖所有情况,而技术更新和个体能力差异也会引入错误。因此,持续调试和优化是保证软件质量的关键步骤。
16 0
|
3天前
|
人工智能 大数据 测试技术
深入探索软件自动化测试的未来
【5月更文挑战第8天】随着科技的不断发展,软件测试领域正经历着前所未有的变革。本文将深入探讨软件自动化测试的现状与未来,从人工智能、大数据和云计算等方面分析其对软件测试的影响,以及如何利用这些技术提高测试效率和质量。
|
3天前
|
机器学习/深度学习 人工智能 算法
深入探索软件自动化测试的优化策略
【5月更文挑战第4天】 随着软件开发周期的不断缩短和发布频率的增加,传统的手动测试方法已无法满足快速迭代的需求。因此,本文聚焦于自动化测试流程的优化,旨在提高测试效率和质量。文章首先回顾了自动化测试的基本概念与实施条件,随后分析了当前自动化测试面临的主要挑战,包括维护成本高、测试用例设计复杂等问题。在此基础上,提出了一系列优化策略:持续集成环境下的自动化测试、数据驱动测试、关键字驱动测试、以及基于人工智能的测试用例生成和维护等。通过案例分析和性能评估,验证了这些策略在提升测试覆盖率和减少人工干预方面的有效性。
|
3天前
|
机器学习/深度学习 敏捷开发 人工智能
探索软件自动化测试的未来趋势
【5月更文挑战第4天】 在快速发展的信息时代,软件已成为支撑现代社会运行的核心力量。随之而来的是软件测试领域面临的挑战和机遇,特别是自动化测试技术。本文将深入探讨自动化测试的最新发展,分析其对提高软件开发效率、降低维护成本的重要性,同时预测未来可能的技术趋势。通过实际案例分析和最新研究动态的梳理,旨在为读者呈现一个清晰的自动化测试技术蓝图。
|
3天前
|
测试技术 持续交付 数据安全/隐私保护
深入理解软件自动化测试中的数据驱动策略
【5月更文挑战第1天】 在软件测试领域,自动化测试已经成为提高测试效率和质量的重要手段。其中,数据驱动测试(DDT)作为一种高效实施自动化测试的策略,允许测试用例与测试数据分离,增强了测试脚本的可维护性和灵活性。本文将详细探讨数据驱动测试的核心概念、实现方式以及在实际中的应用案例,帮助读者更深入地理解如何利用数据驱动策略优化自动化测试流程。

热门文章

最新文章