上节学习回顾

在上一节当中,主要学习了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. 如何创建Vim Dotfile?

    Dotfile是电脑系统里的隐藏文件,它是专门给更高级的用户,如开发者.程序员或工程师使用的,让他们用来调整系统.如何创建Vim-Dotfile? 可以参考以下步骤: 1. 首先,你要检查一下.vim ...

  2. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  3. [C#] 简单的 Helper 封装 -- SQLiteHelper

    using System; using System.Data; using System.Data.SQLite; namespace SqliteConsoleApp { /// <summ ...

  4. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  5. 在centos7中添加一个新用户,并授权

    前言 笔记本装了一个centos,想要让别人也可以登录访问,用自己的账号确实不太好,于是准备新建一个用户给他. 创建新用户 创建一个用户名为:zhangbiao [root@localhost ~]# ...

  6. 使用Expression实现数据的任意字段过滤(1)

    在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...

  7. beans.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  8. 全网独家MongoDB Certified DBA Associate考试认证视频

    该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...

  9. Ajax.BeginForm方法 参数

    感谢博主 http://www.cnblogs.com/zzgblog/p/5454019.html toyoung 在Asp.Net的MVC中的语法,在Razor页面中使用,替代JQuery的Aja ...

  10. 从零自学Hadoop(22):HBase协处理器

    阅读目录 序 介绍 Observer操作 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,Sour ...