深入理解JVM(五)JVM优化策略
5.2一些案例:
1.高性能硬件部署策略:
(1)背景:某公司升级了硬件(CPU升级为4核,内存增加为16G),发现不定期出现网页失去响应。
(2)原因:①内存增加之后,项目中有在内存中处理文件的大对象,从而进入的老年代而没有进行及时回收,然后每次Full GC都要回收比较大量的对象;②Full GC的“Stop-The-World”;
(3)处理方法:
①使用64位jdk,减少Full GC的次数,可以定时在深夜进行Full GC或者重启服务器,缺点:内存回收时间停顿很长,64位JDK比32位的性能低,转储堆内存快照过大不利于分析,更占内存(指针膨胀、对齐补充);
②使用32位jdk,在服务器上搭建多个Web集群,使用反向代理进行负载均衡,缺点:对全局资源的争抢(比如磁盘,容易IO异常),内存受32位影响一个虚拟机最多只能分配2GB,每个虚拟机的缓存对内存的浪费(可以集中式缓存);
2.堆外内存导致的内存溢出:
(1)Direct Memory:直接内存区的溢出,比如NIO要使用这个区域的内存;
(2)栈:栈的内存不足会导致无法分配线程;
(3)Socket缓存:每个Socket连接都会占内存,连接太多就会出现内存不足;
(4)JNI(Java Native Inteface):本地方法占用的堆外内存;
(5)虚拟机本身和GC:虚拟机本身也占用内存;
3.外部命令占用资源过多;
4.JVM进程崩溃:
(1)过多请求异步调用接口,请求积累过多而导致了虚拟机无法承受而崩溃;
(2)使用生产者/消费者的消息队列模式解决;
5.不恰当数据结构导致的内存占用过大:
数据本身所占大小与总大小比值太低,存储效率低,也就导致了GC的效率低
深入理解JVM(五)JVM优化策略的更多相关文章
- 一步步优化JVM五:优化延迟或者响应时间(1)
http://blog.csdn.net/zhoutao198712/article/details/7791969 本节的目标是做一些优化以满足对应用对延迟的需求.这次需要几个步骤,包括完 ...
- 一步步优化JVM五:优化延迟或者响应时间
本节的目标是做一些优化以满足对应用对延迟的需求.这次需要几个步骤,包括完善Java堆大小的配置,评估垃圾回收占用的时间和频率,也许还要尝试切换到不同的垃圾回收器,以及由于使用了不同的垃圾回收器,需要重 ...
- 47、Spark SQL核心源码深度剖析(DataFrame lazy特性、Optimizer优化策略等)
一.源码分析 1. ###入口org.apache.spark.sql/SQLContext.scala sql()方法: /** * 使用Spark执行一条SQL查询语句,将结果作为DataFram ...
- JVM(1)---虚拟机在运行期的优化策略
1.解释器与JIT编译器 首先我们先来了解一下运行在虚拟机之上的解释器与JIT编译器.当我们的虚拟机在运行一个java程序的时候,它可以采用两种方式来运行这个java程序: 采用解释器的形式,也就是说 ...
- 深入理解java虚拟机JVM(上)
深入理解java虚拟机JVM(上) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...
- java jvm内存管理/gc策略/参数设置
1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...
- JVM(五):探究类加载过程-上
JVM(五):探究类加载过程-上 本文我们来研究一个Java字节码文件(Class文件)是如何加载入内存中的,在這個过程中涉及类加载过程中的加载,验证,准备,解析(连接),初始化,使用,销毁过程,并探 ...
- 大厂面试经:说一下你们线上JVM是如何优化的?
JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭.飞机的场景(面试)不懂JVM的你,会被 ...
- 深入理解java虚拟机JVM(下)
深入理解java虚拟机JVM(下) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...
随机推荐
- 【python】参数中的*args和**kwargs
转自https://www.cnblogs.com/xuyuanyuan123/p/6674645.html#undefined 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照 ...
- centos7 下安装Docker CE
前提条件 操作系统要求 要保证centos-extrasrepository开启(enabled).默认处于开启状态. 推荐使用overlay2存储驱动 卸载老版本 $ sudo yum remove ...
- go语言学习--go中的map切片
//定义一个结构 type Car struct { Brand string Age int } func Pluck() map[int][]Car { carMap := make(map[in ...
- cookie and sesssion
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- java web 三大核心组件Filter
Filter 过滤: 定义: 过滤器是客户端与服务端之间的一道网,可以对请求的数据进行拦截和修改,同时也可以对,响应数据进行拦截和修改
- Django_admin组件
1.Django_admin组件的意义 作者:Eric 微信:loveoracle11g 新建Django项目bms图书管理系统 App为book book/models.py添加表关系 from d ...
- 【Selenium】各种方式在选择的时候应该怎么选择
最后再总结一下,各种方式在选择的时候应该怎么选择: 1. 当页面元素有id属性时,最好尽量用id来定位.但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法. ...
- Python cx_Oracle 安装小记
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python cx_Oracle 安装小记 SQLAlchemy 是 Pytho ...
- linux文件属性的10个字符各代表什么意思
10个字符表示文件类别和权限,具体如下: 例: 第一个字符表示文件类别,代表的含义如下:-:普通文件d:目录文件b:块设备文件c:字符设备文件l:符号链接文件 后面9个字符代表3组访问权限:第1组的3 ...
- ZigBee相关网站链接
1.Arduino开源智能家居<认识Zigbee>zigbee功能和自组网介绍-Arduino中文社区 2.小米智能家庭套装为什么选择 ZigBee 协议?|极客公园 3.晓网智能家居Zi ...