《深入理解Java虚拟机》调优案例分析与实战
上节学习回顾
在上一节当中,主要学习了Sun JDK的一些命令行和可视化性能监控工具的具体使用,但性能分析的重点还是在解决问题的思路上面,没有好的思路,再好的工具也无补于事。
本节学习重点
在书本上本节的主要内容是讲作者在工作过程中对调优的一些经验实战。对于我们读者来说,重点是学习作者分析解决问题的具体思路。当然不能离开书本的内容,作者利用的是上一节所介绍到的工具去解决他所遇到的问题。但本人的工作环境跟书本上的教程不一致,但思路大同小异。所以在本章的学习笔记当中,还是结合自身的情况,聊聊调优这事吧。
我的工作环境
在上一节学习已经提过,由于本人的工作环境关系,使用的大都是IBM产品,包括服务器、中间件等,其中Java虚拟机就是IBM的J9虚拟机。它跟HotSpot多少还有点不同,由于IBM的资料甚少,所以对JVM调优也是一个难点。到目前为止,我们只能通过WAS控制台对JVM参数进行不断的修改尝试对比,找出比较优的方案。而IBM的产品都是一套完整的解决方案,WAS同时提供了对应用的参数跳转、对虚拟机的运行监控等都集成在一个控件台里面,如下如所示:

调整JVM参数的页面如下:

性能监控主页如下:

性能监控有许多项目可以自行选择,例如JDBC连接池、JVM运行情况、WEB容器线程池等,其中WEB容器与JVM运行情况监控如下图所示:

通过上图的曲线图看观察JVM堆内存使用走向,通过曲线也大概可以看出GC的情况。
一次调优经历
最难忘的一次调优就是2014年巴西世界杯,7天7夜下来最悲剧的莫过于你们在看世界杯,而我们却在日夜维护系统的世界杯活动。隐约记得参与活动人数大概上百万左右,系统经常性罢工,所以只好临时日夜不停地边维护边修复调优。问题大概是到了某个并发瓶颈,系统就会慢下来,甚至阻塞。由于是生产环境的线上活动,客户要求不能停止活动,哪怕阻塞了,也要求通过重启暂时恢复。所以我们的排查工作更难了,为了重现现象,我们需要等待瓶颈出现的那点时间日夜蹲守排查。通过对服务器指标的观察,都不是瓶颈所在。最后通过Kill -3间隔输出多个javacore文件进行线下分析,才找出问题所在。而这个javacore文件我们是通过“IBM Thread and Monitor Dump Analyzer for Java”这个软件进行分析的,如下如所示:

这个可视化工具可以非常详细的查询到JVM的各项信息,如JVM启动参数,GC信息,线程占等,Sun JDK的命令行工具功能这几乎都涵盖了。有点类似VisualVM,不过VisualVM是动态监控的。下图为线程详细查询图:

当然,现在回想起两年前的那次调优经历,已经没有太多忧伤了,更多地已经成为了我工作经历上的“里程碑”了。偶尔蓦然回首,还是有点滋味。
总结
调优确实是一个“苦力”活,但对人员素质要求比较高,好像上述所说的经历,就是因为经验不足带导致这么长的调优时间。当然,阳光总在风雨后,熬过去了,确实进步不少,写代码的大局观也提升不少。所以调优这事,是面试的一大好题,最能反映个人能力。
《深入理解Java虚拟机》调优案例分析与实战的更多相关文章
- Java之JVM调优案例分析与实战(1) - 高性能硬件上的程序部署策略
本JVM系列均来源于<深入理解Java虚拟机>一书中,版权归该书作者所有. 环境:一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新系统硬件为4个CPU.16GB物理内存.OS ...
- 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战
案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...
- Java之JVM调优案例分析与实战(4) - 外部命令导致系统缓慢
环境:这是一个来自网络的案例:一个数字校园应用系统,运行在一台4个CPU的Solaris 10操作系统上,中间件为ClassFish服务器.系统在进行大并发压力测试的时候,发现请求响应时间比较慢,通过 ...
- 【JVM.4】调优案例分析与实战
之前已经介绍过处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素.本章会介绍一些具有代表性的案例. 本章的内容推荐还是原文全篇看完的好,实在不 ...
- Java之JVM调优案例分析与实战(3) - 堆外内存导致的溢出错误
环境:基于B\S的点子考试系统,为了发现客户端能实时地从服务端接收考试数据,系统使用了逆向AJAX技术(也称Comet或Server Side Push),选用CometD1.1.1作为服务端推送框架 ...
- Java之JVM调优案例分析与实战(5) - 服务器JVM进程奔溃
环境:一个基于B/S的MIS系统,硬件为2个CPU.8GB内存的HP系统,服务器是WebLogic9.2(就是第二个案例中的那个系统).正常运行一段时间后,最近发现在运行期间频繁出现集群节点的虚拟机进 ...
- Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出
环境:一个基于B/S的MIS系统,硬件为两台2个CPU.8GB内存的HP小型机,服务器是WebLogic 9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合式集群. 说明:由于是亲 ...
- Java虚拟机类加载机制——案例分析
转载: Java虚拟机类加载机制--案例分析 在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...
- 记一次Java调优案例分析
上周,一同学给我发来,他们那里的案例 一看就是新生代产生过多对象,肯定是批量或者循环操作导致的,导致新生代一直在进行回收导致. 如果是老生代出现这样的问题,大部分情况下是列表或者集合导致的. 因此我们 ...
随机推荐
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...
- Visual Studio:error MSB8020(搬运)
状况如下: error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build ...
- 【工具使用】mac电脑使用技巧
本文地址 分享提纲: 1. mac命令行和finder的交互 2. 一些mac的插件 3. 一些开发的配置 1.mac命令行和findder交互 1)命令行中打开当前文件夹: o ...
- HTML5 Page Visibility
什么是 Page Visibility ? Page Visibility 即页面可见性,通过 visibilityState 的值检测页面当前是否可见.当一个网站是可见或点击选中的状态时 Page ...
- 流程表单中js如何清空SheetUser控件数据?
昨天有人问我js怎么清空.我试了试,发现简单的赋给他空值,并没有用.只能给他赋一个真实存在的值才有用.于是跟踪了一下他的删除按钮. 效果如下 使用场景:可以根据字段的不同类别变更人员. js代码如下, ...
- postgresql 基本语法
postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表 2.1 创建表 create table myTableName 2.2 如果表不存在则创建表 crea ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- Xamarin.Android之使用百度地图起始篇
一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库的支持方面也有着非常的好支持,今天我们将会以百度地图类 ...