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虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本 ...
随机推荐
- C语言程序设计现代方法_数组(第八章)
C语言不要求检查下标的范围.当下标超出范围时,程序可能会执行不可预知的行为. 看下这个程序: #include <stdio.h> #define N 10 // int main() { ...
- 《Linux内核设计的艺术》学习笔记(六)执行setup.s
参考资料 1. 8259A可编程中断控制器 jmpi , SETUPSEG // 0x90200 到这里,bootsect.s的执行就算结束了.控制权转移到了setup.s文件的手中. setup程序 ...
- php 判断 xml 里是否存在某个节点
参考网址:http://blog.csdn.net/crazyboy2005/article/details/6114454 DOMDocument中,怎样判断某节点是否存在呢? /* $xml-&g ...
- [转载] C++ 多线程编程总结
原文: http://www.cnblogs.com/zhiranok/archive/2012/05/13/cpp_multi_thread.html 在开发C++程序时,一般在吞吐量.并发.实时性 ...
- [转载] Go语言并发之美
原文: http://qing.blog.sina.com.cn/2294942122/88ca09aa33002ele.html 简介 多核处理器越来越普及,那有没有一种简单的办 ...
- 转:HTTP 301 跳转和302跳转的区别
301和302 Http状态有啥区别?301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently ...
- [html] 前端角度出发做好SEO需要考虑什么
Meta标签优化 主要包括主题(Title),网站描述(Description),和关键词(Keywords).还有一些其它的隐藏文字比如Author(作者),Category(目录),Languag ...
- 实例级别和类级别的static、构造函数、字段属性的简单介绍
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 实例级别 ...
- 怎么进入BAT的研发部门?
怎么进入BAT的研发部门? ======================================剑指offer+leetcode+geeksforgeeks+编程之美+算法导论====秒杀BA ...
- 【论文阅读记录】Real-Time Correlative Scan Matching
这篇文章是谷歌的Cartograph中实现real_time_correlative_scan_matcher的论文 Real-Time Correlative Scan MatchingEdwin ...