【JVM.4】调优案例分析与实战
之前已经介绍过处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素。本章会介绍一些具有代表性的案例。
本章的内容推荐还是原文全篇看完的好,实在不方便摘取重点做记录。
重中之重就是:多动手使用虚拟机工具监控系统的内存分配、GC情况
一.案例分析
1. 高性能硬件上的程序不熟策略(控制Full FC频率是关键。也深夜定时任务的方式触发Full GC)
2. 集群间同步导致的内存溢出(集群同步时,可以允许读操作频繁,但不应当有过于频繁的写操作)
3. 堆外内存导致德溢出错误(Direct Memory 不能像新生代、老年代那样,发现空间不足了就通知收集器进行垃圾回收,只能等待老年代内存满了后执行Full GC。也可以手动catch异常,执行“System.gc”。需要注意“-XX:+DisableExplicitGC”开关)
4. 外部命令导致系统缓慢(Java的Runtime.getRuntime().exec()方法的执行过程,首先克隆一个和当前虚拟机拥有一样环境变量的进程,再用这个新的进程去执行外部命令,最后退出这个进程。如果频繁操作的话,系统消耗会很大)
5. 服务器JVM进程崩溃(当系统中出现大量等待的线程和Socket连接,超过虚拟机承受能力使JVM崩溃时,解决使线程等待的等待源的速度,将异步调用改为生产者/消费者模式)
6. 不恰当数据结构导致内存占用过大(HashMap<long,long>的空间使用率为 16B/88B)
88B的由来:在HashMap<long,long>结构中,只有Key和Value所存放的两个长整型数据为有效数据,工16B。这两个长整型数据包装成java.lang.Long对象之后,分别具有8B的MarkWord、8B的Klass指针,再加8B存储数据的long值。
在这两个Long对象组成Map。Entry之后,又多了16B的对象头,然后一个8B的next字段和8B的int型hash值,为了对齐还必须添加4B的空白填充,最后在再HashMap中对这个Entry的8B引用,这样增加两个长整型数字,
实际消耗的内存为: Long(24B * 2) + Entry(32B) + HashMap Ref(8B) = 88B
7. 由Windows虚拟内存导致德长时间停顿()
二.Eclipse运行速度调优
1. 使用VisualGC查看Eclipse启动信息(......Full GC 触发19次,耗时3.166秒,Minor GC 触发378次,耗时0.983秒......)
2. JDK升级()
3. 编译时间和类加载时间的优化()
4. 调整内存设置控制垃圾收集频率(查看GC日志。老年代空间耗尽时,会发生一次Full GC,并且老年代容量扩容。可以设置老年代的初始容量,避免自动扩容。新生代也相同)
(使用jstat-gccause查看,发现代码中有调用System.gc()显式触发GC,我们可以加入 -XX:+DisableExplicitGC 屏蔽掉System.gc())
5. 选择收集器减低延迟(选择并发收集器,降低延迟)
【JVM.4】调优案例分析与实战的更多相关文章
- 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战
案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...
- 《深入理解Java虚拟机》调优案例分析与实战
上节学习回顾 在上一节当中,主要学习了Sun JDK的一些命令行和可视化性能监控工具的具体使用,但性能分析的重点还是在解决问题的思路上面,没有好的思路,再好的工具也无补于事. 本节学习重点 在书本上本 ...
- Java之JVM调优案例分析与实战(1) - 高性能硬件上的程序部署策略
本JVM系列均来源于<深入理解Java虚拟机>一书中,版权归该书作者所有. 环境:一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新系统硬件为4个CPU.16GB物理内存.OS ...
- Java之JVM调优案例分析与实战(5) - 服务器JVM进程奔溃
环境:一个基于B/S的MIS系统,硬件为2个CPU.8GB内存的HP系统,服务器是WebLogic9.2(就是第二个案例中的那个系统).正常运行一段时间后,最近发现在运行期间频繁出现集群节点的虚拟机进 ...
- Java之JVM调优案例分析与实战(4) - 外部命令导致系统缓慢
环境:这是一个来自网络的案例:一个数字校园应用系统,运行在一台4个CPU的Solaris 10操作系统上,中间件为ClassFish服务器.系统在进行大并发压力测试的时候,发现请求响应时间比较慢,通过 ...
- Java之JVM调优案例分析与实战(3) - 堆外内存导致的溢出错误
环境:基于B\S的点子考试系统,为了发现客户端能实时地从服务端接收考试数据,系统使用了逆向AJAX技术(也称Comet或Server Side Push),选用CometD1.1.1作为服务端推送框架 ...
- Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出
环境:一个基于B/S的MIS系统,硬件为两台2个CPU.8GB内存的HP小型机,服务器是WebLogic 9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合式集群. 说明:由于是亲 ...
- 记一次Java调优案例分析
上周,一同学给我发来,他们那里的案例 一看就是新生代产生过多对象,肯定是批量或者循环操作导致的,导致新生代一直在进行回收导致. 如果是老生代出现这样的问题,大部分情况下是列表或者集合导致的. 因此我们 ...
- jvm系列(六):Java服务GC参数调优案例
本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...
随机推荐
- JDBC-Statement,prepareStatement,CallableStatement的比较
参考:https://www.cnblogs.com/Lxiaojiang/p/6708570.html JDBC核心API提供了三种向数据库发送SQL语句的类: Statement:使用create ...
- 使用mysqladmin extended-status查看MySQL的运行状态脚本
一个好用的使用mysqladmin extended-status查看MySQL的运行状态脚本: mysqladmin -P3306 -uroot -p -h127. -r -i extended-s ...
- 【PAT】B1075 链表元素分类(25 分)
这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...
- 通过logstash过滤、分析日志数据
logstash是怎么工作的呢? Logstash是一个开源的.服务端的数据处理pipeline(管道),它可以接收多个源的数据.然后对它们进行转换.最终将它们发送到指定类型的目的地.Logstash ...
- tkinter学习系列之(五)Checkbutton控件
目录 目录 前言 (一)基本属性 (二)案例 1.简单的复选框 2.组合复选框 目录 前言 复选框:可以同时多选的一组框,其只有两种状态,选中与未选中. (一)基本属性 (1)说明: tkinter里 ...
- 彻底修改 Windows 系统用户名
在 Windows 安装的时候会输入一个用户名,电脑店装的一般都会给你设置成Admin之类的.这个时候你想要改成自己的,一般都是直接在 控制面板 > 用户帐户和家庭安全 > 用户帐户 &g ...
- TG可能会用到的动态规划-简易自学
最新更新 完整校订版见此 戳我阅读 以下为未核对不完整版本. 因版权原因,完整精校版不向所有公众开放. 请从您找到本博客的地址查找附带密码(比如简书分享了本网址,请您从简书分享页底部查询密码),感谢您 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- 【BZOJ3930】选数
[BZOJ3930]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选 ...
- Fermat vs. Pythagoras POJ - 1305 (数论之勾股数组(毕达哥拉斯三元组))
题意:(a, b, c)为a2+b2=c2的一个解,那么求gcd(a, b, c)=1的组数,并且a<b<c<=n,和不为解中所含数字的个数,比如在n等于10时,为1, 2, 7,9 ...