上节学习回顾

在上一节当中,主要学习了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虚拟机》调优案例分析与实战的更多相关文章

  1. Java之JVM调优案例分析与实战(1) - 高性能硬件上的程序部署策略

    本JVM系列均来源于<深入理解Java虚拟机>一书中,版权归该书作者所有. 环境:一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新系统硬件为4个CPU.16GB物理内存.OS ...

  2. 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战

    案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...

  3. Java之JVM调优案例分析与实战(4) - 外部命令导致系统缓慢

    环境:这是一个来自网络的案例:一个数字校园应用系统,运行在一台4个CPU的Solaris 10操作系统上,中间件为ClassFish服务器.系统在进行大并发压力测试的时候,发现请求响应时间比较慢,通过 ...

  4. 【JVM.4】调优案例分析与实战

    之前已经介绍过处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素.本章会介绍一些具有代表性的案例. 本章的内容推荐还是原文全篇看完的好,实在不 ...

  5. Java之JVM调优案例分析与实战(3) - 堆外内存导致的溢出错误

    环境:基于B\S的点子考试系统,为了发现客户端能实时地从服务端接收考试数据,系统使用了逆向AJAX技术(也称Comet或Server Side Push),选用CometD1.1.1作为服务端推送框架 ...

  6. Java之JVM调优案例分析与实战(5) - 服务器JVM进程奔溃

    环境:一个基于B/S的MIS系统,硬件为2个CPU.8GB内存的HP系统,服务器是WebLogic9.2(就是第二个案例中的那个系统).正常运行一段时间后,最近发现在运行期间频繁出现集群节点的虚拟机进 ...

  7. Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出

    环境:一个基于B/S的MIS系统,硬件为两台2个CPU.8GB内存的HP小型机,服务器是WebLogic 9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合式集群. 说明:由于是亲 ...

  8. Java虚拟机类加载机制——案例分析

    转载: Java虚拟机类加载机制--案例分析   在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...

  9. 记一次Java调优案例分析

    上周,一同学给我发来,他们那里的案例 一看就是新生代产生过多对象,肯定是批量或者循环操作导致的,导致新生代一直在进行回收导致. 如果是老生代出现这样的问题,大部分情况下是列表或者集合导致的. 因此我们 ...

随机推荐

  1. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  2. 客户端的验证插件validator

    简单,智能,令人愉悦的表单验证~~~ 官方文档:http://www.niceue.com/validator/ <!DOCTYPE html> <html> <head ...

  3. Python应用03 使用PyQT制作视频播放器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/ ...

  4. 从零开始编写自己的C#框架(28)——建模、架构与框架

    文章写到这里,我一直在犹豫是继续写针对中小型框架的设计还是写些框架设计上的进阶方面的内容?对于中小型系统来说,只要将前面的内容进行一下细化,写上二三十章具体开发上的细节,来说明这个通用框架怎么开发的就 ...

  5. 如何在网页中提取Email地址

    开博好久了,今天第一次发表技术文档,之前总是将一些好的事例保存在电脑,时间久了找起来也很麻烦,所以还是放在博客里进行归类比较方便,这样也能将自己在学习过程中的一些心得体会分享给大家,也能给需要的人一点 ...

  6. Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .

    例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...

  7. 5.0 JS中引用类型介绍

    其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...

  8. 分享两个BPM配置小技巧

    1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...

  9. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  10. asp.net core 实战之 redis 负载均衡和"高可用"实现

    1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...