Java即时编译:不仅仅是一个流行词

最近的Java生产性能问题迫使我重新审视并真正欣赏Java VM即时(JIT)编译器。 大多数Java开发人员和支持人员都听说过这种JVM运行时性能优化,但是有多少人真正理解并欣赏它的好处? java_vm_JIT_buzzword

本文将与您分享在添加新的虚拟服务器(容量改进和水平扩展项目)之后我所涉及的故障排除练习。

有关JIT的更深入介绍,我推荐以下文章:

  • ##即时编译: http : //en.wikipedia.org/wiki/Just-in-time_compilation
  • ## Java HotSpot性能引擎体系结构: http : //www.oracle.com/technetwork/java/whitepaper-135217.html
  • ##了解即时编译和优化: http : //docs.oracle.com/cd/E15289_01/doc.40/e15058/underst_jit.htm
  • ## JIT编译器如何优化代码: http : //pic.dhe.ibm.com/infocenter/java7sdk/v7r0/index.jsp?topic=%2Fcom.ibm.java.zos.70.doc%2Fdiag%2Funderstanding% 2Fjit_overview.html

JIT编译概述

JIT编译本质上是一个在运行时提高Java应用程序性能的过程。

下图说明了不同的JVM层和交互。 它描述了以下高级过程:

  1. Java编译器将Java源文件编译为平台无关的字节码或Java类文件。
  2. 在触发Java应用程序之后,JVM在运行时加载编译的类,并通过Java解释器执行适当的计算语义。
  3. 启用JIT后,JVM将分析Java应用程序方法调用并将字节码(在达到某些内部阈值之后)编译为本机的,更有效的机器代码。 通常,最繁忙的方法调用首先确定JIT进程的优先级。
  4. 将此类方法调用编译为机器代码后,JVM将直接执行它,而不是“解释”它。
  5. 随着时间的流逝,上述过程导致了运行时性能的提高。

JVM_JIT_interraction

案例分析

现在这里是我之前提到的项目的背景。 主要目标是在生产环境中添加新的IBM P7 AIX虚拟服务器(LPAR),以提高平台的容量。 查找以下平台本身的规格:

  • Java EE服务器 : IBM WAS 6.1.0.37和IBM WCC 7.0.1
  • 操作系统 :AIX 6.1
  • JDK :IBM J2RE 1.5.0(SR12 FP3 + IZ94331)@ 64位
  • RDBMS :Oracle 10g
  • 平台类型 :中间层和批处理

为了达到现有的应用程序性能水平,购买了完全相同的硬件规格。 还使用与现有产品相同的版本安装了AIX OS版本和其他IBM软件。

为了确保应用程序具有相同的性能水平,对以下各项(清单)均进行了验证:

  • 硬件规格(#CPU内核,物理RAM,SAN…)。
  • 操作系统版本和补丁程序级别; 包括AIX内核参数。
  • IBM WAS和IBM WCC版本,补丁程序级别; 包括调整参数。
  • IBM JRE版本,补丁程序级别和调整参数(启动参数, Java堆大小 ……)。
  • 还正确评估了网络连接性和性能。

新的生产服务器构建完成后,将执行功能测试,该测试还确认了联机和批处理应用程序的正确行为。

但是,在生产运营的第一天就发现了主要的性能问题。 您将在下面找到所观察到的性能问题的摘要矩阵。

生产服务器
运行时间
处理量(#个订单)
中央处理器 %
(平均)
中间件健康
现有服务器 10个小时 25万(基线) 20% 健康
*新*服务器 10个小时 5万-500% 80%+ 400% 高线程利用率

从上面的视图中可以看到,性能结果在生产的第一天就非常糟糕。 与现有生产服务器相比,新生产服务器不仅处理了更少的订单,而且物理资源利用率(例如CPU%)也要高得多。

考虑到确保新服务器的构建与现有服务器完全相同所花费的时间,这种情况令人感到困惑。 那时,另一个核心团队参与进来,以执行额外的故障排除并确定性能问题的根源。

故障排除:寻找罪魁祸首…

故障排除团队分为两部分,以专注于以下项目:

  • 从IBM WAS容器中识别CPU%的来源,并将CPU占用空间与现有生产服务器进行比较。
  • 在现有生产服务器和新生产服务器之间执行更多数据和文件比较。

为了了解CPU%的来源,我们确实从运行IBM WAS和IBM WCC的IBM JVM中对每个线程执行了AIX CPU分析 。 从下面的屏幕快照中可以看到,发现许多线程各自使用5-20%。 在现有生产服务器上执行的相同分析确实显示出更少的线程数,CPU占用率始终在5%左右。

JIT_CPU_per_Thread_analysis

结论:

相同类型的业务流程使用的CPU是现有生产服务器的3-4倍。

为了了解执行的处理类型,每个线程数据在CPU的同时捕获了JVM线程转储 。 现在,在查看了JVM线程转储(Java内核)之后,我们意识到的第一件事就是JIT确实被禁用了! 通过从正在运行的JVM进程中运行java –version命令也可以确认该问题。

IBM_JVM_Javacore_JIT_disabled

这个发现非常重要,特别是考虑到在现有生产服务器上启用了JIT。 大约在同一时间,负责比较服务器的另一个团队最终发现了用于启动应用程序的AIX用户的环境变量之间的差异。 早期的差距分析漏掉了这种比较练习。 他们发现新的AIX生产服务器具有以下额外条目:

JAVA_COMPILER=NONE

根据IBM文档 ,添加此类环境变量是禁用 JIT的方法之一。

复杂的根本原因分析,简单的解决方案

为了了解在我们的环境中禁用JIT的影响,您必须了解其含义。 禁用JIT本质上意味着整个JVM现在都在解释模式下运行。 对于我们的应用程序,以完全解释模式运行不仅会大大降低应用程序吞吐量,而且还会增加服务器CPU利用率的压力点,因为每个请求/线程占用的CPU数量是使用JIT执行的请求的3-4倍(请记住,当使用JIT时启用后,JVM将直接对机器/本机代码执行许多调用)。

如预期的那样,除去此环境变量以及重新启动受影响的JVM进程确实解决了问题并恢复了性能级别。

评估您的应用程序的JIT收益

我希望您对这个案例研究和对JVM JIT编译过程的简短回顾表示赞赏。 为了了解不对Java应用程序使用JIT的影响,建议您进行以下实验:

  • 启用JIT并为您的应用程序生成负载,并捕获一些基准数据,例如CPU%,响应时间,#个请求等。
  • 禁用JIT。
  • 重做相同的测试并比较结果。

参考: Java即时编译:在Java EE支持模式博客上, 不仅仅是 JCG合作伙伴 Pierre Hugues Charbonneau 的时髦 词汇 。

翻译自: https://www.javacodegeeks.com/2013/07/java-just-in-time-compilation-more-than-just-a-buzzword.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php ajax实现分页效果

ajaxpage.php【这里是数据展示页面的代码】: <meta charset’utf-8′> <script src” http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js ” type”text/javascript”/></script> <script type”text/javascript”> //获取当前url地址…

常用的JVM调优参数总结汇总【随时查阅学习】

本文章参数根据后期用的参数会持续更新 --- &#xff08;1&#xff09;-Xms20M 表示设置JVM启动内存的最小值为20M&#xff0c;必须以M为单位 &#xff08;2&#xff09;-Xmx20M 表示设置JVM启动内存的最大值为20M&#xff0c;必须以M为单位。将-Xmx和-Xms设置为一样可以避免J…

win10设置计算机关机时间,教你windows10电脑怎么设置定时关机

今天小编教你windows10电脑怎么设置定时关机&#xff0c;相信大家都有过这样的经历吧!那就是有时开着电脑玩累了,躺在床上睡了一会&#xff0c;结果醒来的时候发现睡了比较久&#xff0c;且还不愿意下床关电脑怎么办&#xff0c;其实我们可设置定时关机&#xff0c;有需要的用户…

Android内存优化9 内存检测工具3 MAT比Menmery Monitor更强大

在Android性能优化第&#xff08;一&#xff09;篇---基本概念中讲了JAVA的四大引用&#xff0c;讲了一下GCRoot&#xff0c;第二篇Memory Monitor检测内存泄露仅仅说了Menmery Monitor的使用&#xff0c;这篇博客谈一下MAT来寻找内存泄露&#xff0c;相对来说&#xff0c;Memo…

使用Java使用Amazon Simple Queue Service

Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列。 Amazon SQS可用于完全解耦系统中不同组件的操作&#xff0c;这些组件否则将交换数据以执行独立的任务。 Amazon SQS还可以帮助我们保存在应用程序关闭或组件之一不可用时丢失的数据。…

计算机三种引用方式,单元格的引用方式有哪几种

EXCEL单元格的引用包括绝对引用、相对引用和混合引用三种。单元格引用是Excel中的术语&#xff0c;指用单元格在表中的坐标位置的标识。是计算机基础的重要学习内容。1、绝对引用&#xff1a;单元格中的绝对单元格引用(例如$F$6)总是在指定位置引用单元格F6。如果公式所在单元格…

HTML5标签用法及描述

2000 年底&#xff0c;国际 W 3C 织组织公布发行了 X HTML 1.0 版本&#xff0c;到现在已经有 10 年了。这 10 年里&#xff0c; Web 飞速发展&#xff0c;X HTML 1.0 显得“力不从心”&#xff0c;已经跟不上时代的发展了&#xff0c;于是 HTML 5 孕育而生。 W 3C 在 201…

什么是作用域链?

1、简单说就是作用域集合 当前作用域 -> 父级作用域 -> ... -> 全局作用域 形成的作用域链条全局作用域的变量和方法都可以进行调用局部的变量和方法只能局部进行调用( 除闭包外 )局部可以访问全局的变量和方法转载于:https://www.cnblogs.com/wangfencs/p/9446293…

2018 国内 DevOps 趋势分析与实践分享

2017 年年末&#xff0c;《中国第一份 DevOps 年度调查报告》发布&#xff0c;这对国内一直摸着石头过河的 DevOps 先行者和 DevOps 在中国的发展都有着里程碑式的意义。它使国内的 DevOps 先行实践者们既能够对自身的 DevOps 实践有明确定位&#xff0c;又为踌躇不前的观望者们…

linux上php指向mysql_linux环境下 php如何配置mysql

展开全部Linux下配置安装PHP环境参考别人的做法,遇到问题上网查,下面就是安装步骤.一、安装Apache2.2.221、到官网下636f707962616964757a686964616f31333339666133载 http://httpd.apache.org/download.cgi2、解压tar -zxvf httpd-2.2.22.tar.gz3、建立目标文件夹(注意以下所有…

Java 7 Swing:创建半透明和成形的Windows

Java 7 Swing支持具有透明和非矩形形状的窗口。 以下屏幕截图显示了创建的不透明度为75&#xff05;的圆形窗口。 您可以通过在JFrame上使用setOpacity方法更改其不透明度来创建半透明窗口。 请注意&#xff0c;只有底层操作系统支持时&#xff0c;您才能创建半透明窗口。 另外…

ajax用post方法,jquery中get,post和ajax方法的使用小结

在JQuery中可以使用get&#xff0c;post和ajax方法给服务器端传递数据get方法的使用(customForGet.js文件)&#xff1a;function verify(){//1.获取文本框的数据//通过DOM的方式获取//document.getElementByIdx("userName");//通过JQuery的方式获取var jqueryObj $(…

vim使用手册

https://www.cnblogs.com/lijia0511/p/5644566.html转载于:https://www.cnblogs.com/kusy/p/9450311.html

JAVASCRIPT常用20种小技巧汇总

1.TEXTAREA自适应文字行数的多少 2.脚本永不出错<script LANGUAGE"javascript"></script>3.ENTER键可以让光标移到下一个输入框4.预定秒数内自动转到指定网址5.怎么改变滚动条的颜色&#xff0c;只有ie5.5版本以上才能支持。 这是使用CSS语言&#xff0c…

JavaWeb之动态页面技术JSP/EL/JSTL

一、JSP技术 1&#xff0e;jsp脚本和注释 jsp脚本&#xff1a; 1&#xff09;<%java代码%> ----- 内部的java代码翻译到service方法的内部 2&#xff09;<%java变量或表达式> ----- 会被翻译成service方法内部out.print() 3&#xff09;<%!java代码%> ---- 会…

mac mysql创建本地数据库_【mac】配置本地数据库

1.【安装数据库】brew 安装mysql -- brew install mysql安装成功后在命令行敲入 which mysql 查看安装路径2.【配置数据库】如果直接打mysql会报错&#xff0c;需要将mysql添加到环境变量&#xff0c;具体方法参阅后台学习-环境变量检查mysql是否启动 ps -ef | grep mysqld开启…

Spring Integration关键案例与现实生活场景

这篇文章将总结Spring Integration&#xff08;SI&#xff09;的重要要点以及消息传递集成模式。 对于每个关键提示&#xff0c;我都会根据我的经验添加一个真实的示例。 分离器 一个。 它能做什么&#xff1f; 拆分器实际上是一种模式&#xff0c;它在某一点接收一条消息并将…

ie下按keydown事件会触发button

负责公司的一个b2c平台&#xff0c;头部那里有个搜索查询的功能&#xff0c;根据用户输入的内容按回车键也会跳转到响应的页面&#xff0c;后来在ie浏览器下惊奇的发现按回车键的同时它也会触发底部的邮箱订阅的button事件&#xff0c;开始以为是其它的地方用到了回车键从而冲突…

BZOJ3771 Triple(FFT+容斥原理)

思路比较直观。设A(x)Σxai。先把只选一种的统计进去。然后考虑选两种&#xff0c;这个直接A(x)自己卷起来就好了&#xff0c;要去掉选同一种的情况然后除以2。现在得到了选两种的每种权值的方案数&#xff0c;再把这个卷上A(x)。得到这个后考虑去重&#xff0c;其中重复的就是…

糖豆人维修服务器多长时间,服务器不稳定的《糖豆人》凭啥还这么火?只因做到了这三点...

8月4日&#xff0c;《糖豆人&#xff1a;终极淘汰赛》在steam平台上线&#xff0c;不到一周的时间直接登上steam畅销榜第六位。这款看起来似乎并不具备3A制作级别的游戏&#xff0c;到底是怎么获得了这么多玩家的追捧和青睐的呢&#xff1f;不妨跟着汇智妹一起看看这款游戏到底…