优化推荐系统的JVM关键参数
-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的推荐引擎)的更多相关文章

  1. JVM调优和深入了解性能优化

    JVM调优的本质: 并不是显著的提高系统性能,不是说你调了,性能就能提升几倍或者上十倍,JVM调优,主要调的是稳定.如果你的系统出现了频繁的垃圾回收,这个时候系统是不稳定的,所以需要我们来进行JVM调 ...

  2. 【JVM进阶之路】十:JVM调优总结

    1.调优原则 JVM调优听起来很高大上,但是要认识到,JVM调优应该是Java性能优化的最后一颗子弹. 比较认可廖雪峰老师的观点,要认识到JVM调优不是常规手段,性能问题一般第一选择是优化程序,最后的 ...

  3. Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)

    Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...

  4. SpringBoot项目优化和Jvm调优(转)

    原文:https://blog.csdn.net/wd2014610/article/details/82182617 项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringB ...

  5. SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...

  6. SpringBoot项目优化和Jvm调优

    https://www.cnblogs.com/jpfss/p/9753215.html 项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配 ...

  7. 【性能优化】(2)JVM调优

    JVM调优 2019-07-21  12:32:00  by冲冲 1.

  8. jvm系列(六):jvm调优-从eclipse开始

    jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...

  9. JVM调优浅谈

    1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本 ...

随机推荐

  1. iOS - Swift Swift 语言新特性

    1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...

  2. CSU 1802 小X的战斗力【拓扑dp】

    题目链接 题意:n个人,每个人有一个能力值.给出m组关系A, B, 表示A的能力值大于B的能力值. 问:m组关系中是否有自相矛盾的?若不矛盾,问:第1个人在所有人的能力值中排名第几?有多少人的能力值的 ...

  3. Myeclipse优化篇

    1 . window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-Maven ,将 Maven JDK 改为电脑上安装的 JD ...

  4. Oracle冷备份及其恢复

    一. 冷备份的概念 冷备份是指在数据库关闭状态下所做的物理拷贝,也称脱机备份. 适合于非归档模式下的备份,而且也只能采用这种方式备份. 二. 需要备份的文件 必须备份的文件: 数据文件和控制文件 可以 ...

  5. nginx相关优化

    1.配置监控nginx状态信息 vim /usr/locale/nginx/conf/nginx.conf server { listen ; server_name 192.168.1.30; lo ...

  6. AutoCompleteTextView控件的使用

    public class MainActivity extends Activity { //[0]声明AutoCompleteTextView要显示的数据 private static final ...

  7. android 回调函数的使用

    // activity 之间方法调用的桥梁 public class ActivityCallBridge { static ActivityCallBridge mBridge; private O ...

  8. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  9. Android面试题整理【转载】

      面试宝典(5)  http://www.apkbus.com/android-115989-1-1.html 面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad ...

  10. UEditor文档

    UEditor文档http://fex.baidu.com/ueditor/Ueditor 前后端数据交互 http://blog.csdn.net/bobo_93/article/details/5 ...