JVM调优(这里主要是针对优化基于分布式Mahout的推荐引擎)
-Xmx | 设定Java允许使用的最大堆空间。例如-Xmx512m表示堆空间上限为512MB |
-server | 现代JVM有两个重要标志:-client和-server,分别为客户端程序(运行时间短、占用资源少)和服务器端程序(长时间运行、资源密集型)选择合适的JVM配置。 |
-d32和-d64 | 分别设定为32位和64位模式。在一台64位的机器上,两种都是有效的。尽管通常情况下最好是让JVM自己决定,但32位模式可以降低内在需求(例如引用变成4字节)。当然,32位模式下不可能使用超过2~3GB的堆空间(具体取决于JVM),但是如果需求达不到这一界限的话,节省一些内存也不失为一个好的选择。在64位机器上选择32位模式会导致轻微的性能损失。 |
-XX:+NewRatio= | 有一部分堆空间是为生命周期很短的临时对象保留的,不能用于生命周期较长的数据结构。Mahout在运行时是有偏向的:它很少创建临时对象,而生命周期长的对象则需要消耗大量堆空间。默认情况下用于临时对象的堆空间比例太大,这显得有些浪费。此选项可控制用于临时对象的空间比例,例如,设为12时,只有1/12的堆空间用于保存临时对象。注意,此选项是Sum JVM所特有的。 |
-XX:+UserParallelGC 和 -XX:+UserParallelOldGC |
通过并行的垃圾收集机制使JVM更好地利用多个处理器或单一处理器的多个核。当可用的处理器核不止一个时,这会允许垃圾收集与主计算过程并行执行。 |
基于一个例子演示这些JVM配置项的效果。下面这个intro.csv文件有几千万条记录
DataModel model=new FileDataModel(new File("intro.csv")); //.csv是逗号文件
UserSimilarity similarity=new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood=new nearestNUserNeighborhood(2,similarity,model);
Recommender recommender=new GenericUserBasedRecommender(model,neighborhood,similarity);
LoadEvaluator.runLoad(recommender);
运行这段代码,首先从默认的32位客户端JVM开始:-client -d32 -Xmx512m。我们使用一个64位计算机进行测试,负载评估结果显示推荐时间为425ms,稳定状态需要消耗248MB堆空间。
将-client改为-server。测试结果显示,内存用量没有变化,但推荐时间降为192ms。这表明为服务器端模式优化的JVM更适合此类应用。
现在,将-d32改为-d64。遇到了OutOfMemoryError错误。将-Xmx512m改为-Xmx768m,分配768MB的堆空间,再次运行。推荐速度再次提升,时间降至142ms。稳定状态下的内存需求则几乎没变:256MB。从设计上讲,64位模式增加的内存需求用在对象和引用上,而与Mahout的推荐引擎创建的的长时对象关系不大。
大家可能会有疑问,既然稳定状态下的内在需求仅为256MB,为什么在可用内存为512MB的情况下,会因为堆空间不足而出错?因为在构建DataModel的
in-memory数据表示过程中,内存需求会有一个峰值。
尝试-XX:+NewRatio=12标志,它会将内存用量降至640MB。
最后,试试加上-XX:+UserParallelGC 和-XX:+UserParallelOldGC。当可用的处理器核不止一个时,会允许垃圾收集与主计算过程并行执行。在我们的测试机器上,推荐时间降至126ms。
JVM调优(这里主要是针对优化基于分布式Mahout的推荐引擎)的更多相关文章
- JVM调优和深入了解性能优化
JVM调优的本质: 并不是显著的提高系统性能,不是说你调了,性能就能提升几倍或者上十倍,JVM调优,主要调的是稳定.如果你的系统出现了频繁的垃圾回收,这个时候系统是不稳定的,所以需要我们来进行JVM调 ...
- 【JVM进阶之路】十:JVM调优总结
1.调优原则 JVM调优听起来很高大上,但是要认识到,JVM调优应该是Java性能优化的最后一颗子弹. 比较认可廖雪峰老师的观点,要认识到JVM调优不是常规手段,性能问题一般第一选择是优化程序,最后的 ...
- Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)
Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...
- SpringBoot项目优化和Jvm调优(转)
原文:https://blog.csdn.net/wd2014610/article/details/82182617 项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringB ...
- SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)
项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...
- SpringBoot项目优化和Jvm调优
https://www.cnblogs.com/jpfss/p/9753215.html 项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配 ...
- 【性能优化】(2)JVM调优
JVM调优 2019-07-21 12:32:00 by冲冲 1.
- jvm系列(六):jvm调优-从eclipse开始
jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...
- JVM调优浅谈
1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本 ...
随机推荐
- python_way ,day11 进程
if __name__ == '__main__': for i in range(10): p = Process(target=foo, args=(i,)) # p.daemon = True ...
- Entity Framework 学习初级篇--基本操作:增加、更新、删除、事务(转)
摘自:http://www.cnblogs.com/xray2005/archive/2009/05/17/1458568.html 本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作 ...
- 自定义CSS博客(转)
摘自:http://www.cnblogs.com/libaoheng/archive/2012/03/19/2406836.html 前 言 一个好的阅读体验,对技术博客来说,也许算是锦上添花.入 ...
- input与lable水平对齐
CSSinput,label { vertical-align:middle;} html 格式 <label><input/></label> <labe ...
- iOS - Swift available 平台判断
前言 Swift 语言中的 @available 和 #available,Swift 2.0 中,引入了可用性的概念.对于函数,类,协议等,可以使用 @available 声明这些类型的生命周期依赖 ...
- ajax 、ajax的交互模型、如何解决跨域问题
1.ajax是什么? — AJAX全称为“AsynchronousJavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术. — 不是一种新技 ...
- 用Jquery获取select的value和text值
$("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 var checkText=$(&q ...
- Python学习(7)数字
目录 Python 数字 Python 数字类型转换 Python 数学函数 Python 随机数函数 Python 三角函数 Python 数学常量 Python 数字 Python 数字数据类型用 ...
- AutoCompleteTextView控件的使用
public class MainActivity extends Activity { //[0]声明AutoCompleteTextView要显示的数据 private static final ...
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...