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虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本 ...
随机推荐
- FJNU 1154 Fat Brother And His Love(胖哥与女神)
FJNU 1154 Fat Brother And His Love(胖哥与女神) Time Limit: 2000MS Memory Limit: 257792K [Description] [ ...
- 小C的故事(快速学C语言,,,极速版!)
前几天这篇博客写了太多废话! 删啦~~. 本篇博客只是为chd A协的全嫩小鲜肉入门C语言的预科, 如果你在此处学习C语言, 不幸走火入魔, 小弱概不负责. //请直接随便找个C语言编译器,抄一下下面 ...
- Quick-Cocos2d-x v3.3 异步加载Spine方案 转
Quick-Cocos2d-x v3.3 异步加载Spine方案 浩月难求也与2015-03-25 15:06:3441 次阅读 背景 项目中使用了Quick-Cocos2d-x 3.3,由于Spin ...
- javascript中获取非行间样式的方法
我们都知道一般在javascript中获取样式一般用的是nodeObj.style.attr这个属性的,但是这个属性只能获取行间样式非行间样式比如写在样式表中的样式那么用nodeObj.style.a ...
- SAP接口编程 之 JCo3.0系列(05) : Exception Handling
JCO3.0的Exception,常用的Exception如下: JCoException 继承自java.lang.Exception,是JCo3中Exception的基类. JCoRuntimeE ...
- thinkphp自动验证方法的使用
建一个表单: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Oracle Regexp_substr
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','2 ...
- jquery定位
1.$("div").offset().left ; div到文档的左距离(offset() 方法返回或设置匹配元素相对于文档的偏移) $("div").off ...
- ajax发布评论 、显示评论
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- POCO C++库学习和分析——任务
1.任务的定义 任务虽然在Poco::Foundation库的目录中被单独划出来,其实可以被看成线程的应用,放在线程章节.首先来看一下Poco中对任务的描述: *task主要应用在GUI和Sever程 ...