精华内容
下载资源
问答
  • 通过我前面的文章可以得知JVM调优就是为了减少full GC的产生次数,所以为了不使其产生就需要根据业务场景合理的设置堆内存各个区域的大小,下面我来说一下怎么设置内存各个区域的大小。 操作 找到eclipse.ini文件...

    前言
    通过我前面的文章可以得知JVM调优就是为了减少full GC的产生次数,所以为了不使其产生就需要根据业务场景合理的设置堆内存各个区域的大小,下面我来说一下怎么设置堆内存各个区域的大小。
    操作
    找到eclipse.ini文件,如下图:
    在这里插入图片描述
    用Notepat++或者记事本打开eclipse.ini文件,文件内容如下图:
    在这里插入图片描述
    其中:-Xms:是最小堆内存大小,也是初始堆内存大小,因为堆内存大小可以根据使用情况进行扩容,所以初始值最小,随着扩容慢慢变大。
    -Xmx:是最大堆内存大小,随着堆内存的使用率越来越高,堆内存的大小会趋向于最大内存大小扩容。
    -Xmn128m(图上未设置该参数):是年轻代大小。
    -XX:SurvivorRatio=3(图上未设置该参数):该参数是年轻代Eden区与Survivor区其中一个分区的比例(s0区或者s1区)的比例,如果将参数设置为3,那么会将整个堆内存分为5份,Eden区占3份,Survivoer区中s0与s1各占1份。
    完整参数详解
    -Xms1024m -Xmx1024m -Xmn256m -XX:SurvivorRatio=2
    (该参数意思为堆内存初始值为1024m、最大值为1024m、年轻代为256m、其中年轻代的Eden区为512m、而Survivor区中的s0与s1分别为256m)
    提示
    1、为了避免频繁扩容,所以我们一般将-Xms与-Xmx设置为一样大小。
    2、如果上述文章中有些名词不理解什么含义可以先看我之前的文章《JVM堆内存模型概括》《java垃圾回收机制概括》、本人以最精简的文字来解释其中的含义、希望大家可以在最短的时间内学到更多的精华。

    展开全文
  • 现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题前几天我们分享了我们java中的基石JVM的相关内存模型(想要精通java,必须要懂Java内存...

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题

    前几天我们分享了我们java中的基石JVM的相关内存模型(想要精通java,必须要懂Java内存模型,一点不忽悠)以及类加载机制(java类加载机制,轻松掌握,再也不怕面试官刁难),其实在我们平时开发中,大部分工程师在生产环境部署java的时候很少去思考这个JVM的相关参数到底怎么去设置,更很少去预估我们程序所需的内存以及并发量等等,或者是直接参考公司资深工程师写的配置。

    这样的工程师虽然不能说你不够专业,但是我觉得你应该具备这样的思考能力,只有这样你才能才遇到自己程序各种线上异常的时候不用去请教公司大拿,你就应该自己成为这方面的大拿。好,那我们今天就结合实际案例来每日百万交易的支付系统,生产环境该怎么去设置JVM堆内存大小。

    背景

    支付在我们如今的生活中已无处不在,它时刻围绕着我们的吃喝住行,比如我们在电商里面购买一个商品的时候,就会涉及到支付系统,大体的流程是这个样子的:

    29a1d17f99c637b799fb6bea811df050.png

    从上图中,我们能看出支付系统是我们整个交易过程中核心且是不可或缺的系统之一,只有商家收到钱,才能卖给你东西。下面我们就来看看如何根据这个支付系统未来预估的业务量,访问量,去推算这个系统每秒种的并发量,然后推算每秒钟的请求对内存空间的占用,进而推算出整个系统运行期间的JVM内存运转模型,只有这样我们才能很好的去合理的去设置JVM堆内存。

    每日百万的支付系统压力体现在何处?

    在这里我建议,在做任何系统的时候,我们都要去思考我们现在开发的这个系统将要面临什么压力,而这个压力又会体现在我们系统的哪个地方。那对于我们现在的支付系统对于我们的JVM来说,他的核心压力就在于,不停的创建支付单,支付单包括上游系统信息、创建时间、商品信息、用户信息、支付渠道等等。也就是说,我们的JVM中每天会有上百万的支付订单对象在频繁的创建和销毁。

    6104f664345e35b5c69c4f0ced1fcf8c.png


    弄清楚了我们系统的压力之后,我们接下来就要去思考另外一些直接影响我们业务的几个核心问题:

    • 我们的支付系统需要部署多少台机器。
    • 每台机器需要多大的内存。
    • 每台机器上启动的jvm需要给多大的内存,才能支撑我们百万的订单创建而不会内存溢出。

    支付系统每秒钟需要处理多少笔支付订单

    要想合理设置我们JVM堆内存大小,我们就得去计算出我们系统每秒会处理多少笔支付单。

    我们都知道,在任何一个系统都会有高峰期和平稳期的,我们就可以拿高峰期来计算就行了。现在我们系统每天有100万的支付订单,高峰期一般在中午或者晚上,高峰期大概3个小时左右,也就是每秒大概有100个订单产生。

    这样的话,我们就可以假设将支付系统先部署个3台机器,每台机器最普通的配置4CPU 8G的。也就是每台机器每秒处理大概30多个订单。

    bcfc45709f2f95633b7691d208c7230c.png

    每个支付订单耗时多久

    接下来,我们需要搞清楚另一个重要的问题,即每个支付订单大概要多长时间才处理的完?

    从用户发送的一次支付请求,到JVM里创建支付单对象相关操作,再到持久化到数据库,或者调用第三方支付这一流程。现在我们就假设这些流程完成需要1秒的时间。

    现在我们支付系统的模型是这个样子了:

    1. 每台机器每秒钟会收到30个支付订单的请求,接着就会在JVM的新生代内存区域创建30个支付订单对象,最后做相关写入数据库的相关操作;
    2. 然后1秒之后,这30个订单就处理完了,这些订单在JVM中就会成为没被引用的垃圾对象;
    3. 接着下一秒又来了30个支付单请求,重复之前的动作。

    每个支付订单大概需要多大的内存空间

    下面我们就要来算一算我们一个支付订单大概需要多少内存空间,这里教大家怎么去算一下,就是主要根据你的实体类的变量类型去算就行了,即Integer类型的变量占4个字节,Long类型的占8个字节,其他的网上查查哈,这样就可以推算出我们的当前实体类所需的内存大小了。

    public class payOrder { private Integer orderId; private Integer userId; private Long createTime;}

    像我们这样的支付订单实体类大概也就20几个字段在几百个字节的样子,我们就算大一点就假设它500字节好了,不到1Kb

    每秒发起的支付请求会占用多少内存

    上面我们推算出来了每秒钟多少请求,同时推算了单个支付单的内存大小,现在我们看看每秒发起的请求一共要占用多少内存。

    51f097c868ef9dd1ea272a30fffba3f4.png

    从图中也可以看出,每台机器每秒共30个支付单,也就是大概占用30 * 500字节 = 15000字节,大概也就在15Kb的样子,很小吧。

    让支付系统跑起来

    通过上面的分析,我们已经很清晰的知道了我们当前系统的各个核心问题,也弄清楚了每秒多少请求,每秒占用多少内存空间。现在我们先将我们的支付系统在我们脑海里运行一遍:

    1. 每秒30个请求,创建30个支付单对象,大概也就在kb级别的内存占用。
    2. 1秒之后,这30个对象就不会被引用,会成为JVM的新生代的垃圾
    3. 下一秒的时候,又有30个请求过来,新生代又会继续产生这些垃圾对象
    4. 如此往复着,知道有一刻,新生代里有几十万个对象了,大概占用几百兆的内存了,都快满了。
    5. 这个时候就会触发Minor GC,回收掉新生代的那些垃圾对象,以腾出更多空闲空间来让新的对象进来

    好,这就是目前我们支付系统的运行模型,我们要在脑海里先自己跑一遍,才能更好的去配置生产环境。

    对整个支付系统进行内存预估

    我们上面估算的那些内存其实只是估算最核心的部分,真实的系统中,可能会随带好多对象的创建,所以依据我们的经验来看,将核心部分扩大10到20被就差不多了。也就是,我们现在的支付系统大概在几百KB~1M之间。

    然后每秒大概就有1M左右的垃圾对象存在新生代中,一直循环多次后,就会触发Minor GC回收掉这些垃圾,到目前为止我们就把完整的支付系统给运行起来了,最后,我们就要对其进行JVM内存设置了。

    JVM堆内存该如何设置

    这里建议,生产环境服务器至少最普通是4CPU 8G 来部署我们的支付系统,那么我们的JVM进程至少可以给4G以上内存,新生代在里面至少可以分配到2G内存空间,这样子就可以做到可能新生代每秒钟1MB左右的内存,但是需要将近半小时到1小时才会让新生代触发Minor GC。基本还可以的接受的,只有GC相关专题,我会在后面写的,敬请期待哈。

    所以,在我这个支付系统里面,-Xms和-Xmx设置为3G,给整个堆内存3G内存空间,-Xmn设置为2G,给新生代2G内存空间。

    当然,如果我们业务还需增长,我就部署5台机器或者10台机器,每台机器还可以申请更高的内存空间16G乃至32G都可以。

    总结,今天我带着大家来分析了一个系统开发完,我们该怎么去再生产环境配置我们的JVM堆内存大小,主要需要考虑我们应该部署多少台机器?每台机器要多少内存?每台机器每秒钟能有多少的请求过来并且生成对象?然后基于这些参数判断多久触发一次Minor GC,这样一套流程下来,我们就能很好的掌握并且自己可根据复杂的业务变化来设置自己系统的JVM堆内存,如果大家喜欢就关注我,我会一直分享业界流行技术方案,让我们共同学习共同进步。

    java高并发、高级面试、分布式、微服务、人工智能以及Python等各大互联网专题,关注wx公众号【架构师修炼】专属视频资料点击菜单“成神之路” 你会感谢我的

    展开全文
  • 方法一: 打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed JREs,在右边选择前面有对勾的JRE,再单击右边的“Edit”按钮, ...,这样设置Java拟虚机内存使用最小是128

    方法一:


    打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed
    JREs,在右边选择前面有对勾的JRE,再单击右边的“Edit”按钮,
    出现一个 Edit JRE 的对话框,在其中的Default VM Arguments: 框中输入 -Xms128m -Xmx512m
    ,这样设置Java拟虚机内存使用最小是128M,最大是512M,再单击“OK”关闭 Edit JRE 对话框,再单击“OK”关闭
    Preferences对话框,Eclipse一下子就运行快了起来


    方法二:


    java project 可以右击工程 Run AS
    -->选最下面Run...-->
    Arguments-->在VM arguments里面填
    -Xmx256m。这样就可以设置它运行时最大内存为256m


    方法三:eclipse.ini


    -showsplash 
    org.eclipse.platform 
    --launcher.XXMaxPermSize 
    128M 
    -vmargs 
    -Xms40m 
    -Xmx512m 
    -XX:MaxPermSize=256m 
    -Dosgi.bundlefile.limit=100
    展开全文
  • 再双击InstalledJREs,在右边选择前面有对勾的JRE,再单击右边的“Edit”按钮,出现一个 Edit JRE 的对话框,在其中的Default VM Arguments: 框中输入 -Xms128m -Xmx512m,这样设置Java拟虚机内存使用最小是128M,...

     

    方法一:

    打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed
    JREs,在右边选择前面有对勾的JRE,再单击右边的“Edit”按钮,
    出现一个 Edit JRE 的对话框,在其中的Default VM Arguments: 框中输入 -Xms128m -Xmx512m
    ,这样设置Java拟虚机内存使用最小是128M,最大是512M,再单击“OK”关闭 Edit JRE 对话框,再单击“OK”关闭
    Preferences对话框,Eclipse一下子就运行快了起来

    转载于:https://www.cnblogs.com/ydxblog/p/7873874.html

    展开全文
  • Mac VMware虚拟机设置内存大小

    万次阅读 2016-03-24 19:43:54
    刚在VMware上安装了win7, 正...第1步: 现在win7虚拟机是已经打开的状态, Mac VMware 菜单栏 —> 虚拟机 —> 关机第2步: 在VMware win7虚拟机窗口点击设置 —> 处理器和内存第3步: 在这里增加内存 第4步: 再启动win7
  • 可以最大的提高电脑性能,大概设置为你电脑的内存大小的1.5倍左右即可。 默认虚拟内存是设置在C盘的,由于C盘本来空间比较小,而且安装软件越来越多的情况下C盘空间就不够用了,所以很多人就想把虚拟内存设置到D盘...
  • 现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题前几天我们分享了我们java中的基石JVM的相关内存模型(想要精通java,必须要懂Java内存...
  • hadoop内存大小设置问题

    万次阅读 2015-07-13 10:22:16
    前面博客里面提到,运行一次hadoop的时候出现java heap error。字面意思分配堆的时候出现错误,我们知道应用程序的...简单根据文件信息给出一个准确计算内存大小的公式是不现实的。 hadoop默认namenode内存的大小为10
  • eclipse下的tomcat内存设置大小 在eclipse中设置,居然可以了, 设置步骤如下: 1.点击eclipse上的debug图标旁边的下拉箭头 2.然后选择Run Configurations, 3.系统弹出设置tomcat配置页面,在Argument中末尾...
  • 我在测试ThreadLocal内存泄露的时候,不晓得怎么设置内存大小,特此记录 第一步:打开Edit Configurations 第二步:给需要执行的对象设置VM options:-Xmx256m --- 顺便贴下jdk自带的内存分析工具 在jdk...
  • IntelliJ IDEA 修改内存大小,使得idea运行更流畅。

    万次阅读 多人点赞 2018-08-22 17:44:08
    idea有个配置文件,可以设置内存大小的,就跟咱的jvm的内存里面的堆大小,栈大小等等,可以设置的,而且设置了之后,你这个的性能就会得到提升。具体看下面怎么修改。 先说所要修改的文件 idea.vmoptions 的位置,...
  • <div><p>RunConfig里设置的batch_size这个参数有什么作用,batch_size的大小怎么计算需要多少内存</p><p>该提问来源于开源项目:PaddlePaddle/PaddleHub</p></div>
  • Ø对于C/C++初级开发者,怎么达到企业的用人标准Ø就业问题 问: 老师,有没有一个框框?有没有一个标准啊?我们学什么哪?C工程开发需要什么(培养什么能力) 成熟的、商业化的信息系统在分区、分层 信息系统的技术...
  • JVM垃圾收集器(Java Garbage Collection)。本教程均在JDK1.8+HotSpot为例来讲解的.先来看看Java7的:再来看看Jva8的从上图中我们可以看出,...如果16G的物理内存,JVM堆内存能够分到多少G的内存空间呢?我们带着这...
  • 怎么定义共享内存 大小 linux

    千次阅读 2014-11-26 15:11:06
    在 Redhat Linux 中,您还可以修改 sysctl.conf 以设置内核参数。 按如下所示,设置 kernel.shmax 和 kernel.shmall 的值: echo MemSize > /proc/sys/shmmax echo MemSize > /proc/sys/shmall 其中,MemSize
  • Java的内存映像工具,jmap,Memory Map for Java,用于生成堆转储快照,一般成为heapdump或者dump文件,出了获取dump文件,这个工具还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前使用...
  • Java的内存映像工具,jmap,Memory Map for Java,用于生成堆转储快照,一般成为heapdump或者dump文件,出了获取dump文件,这个工具还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前使用...
  • Nacos修改内存大小

    千次阅读 2020-10-28 11:20:06
    部署好的nacos老是挂掉,查看内存发现,所剩内存不多,而nacos运行时内存可以达到1G多,怎么能够设置nacos的内存呢。 nacos的启动文件,startup.sh中有如下参数配置 standalone:表示单机模式运行,非集群模式 ...
  • 展开全部jvm内存有好几种呢windows下修改JVM内存大小:情况一:解压版本的Tomcat, 要通过startup.bat启动tomcat才能加载配置要添加在tomcat 的bin 下catalina.bat 里32313133353236313431303231363533e59b9ee7ad...
  • 怎么设置电脑的虚拟内存?虚拟内存的设置方法:进入“打开→控制面板→系统”,选择“高级”选项卡,点击“性能”栏中的“设置”按钮,选择“高级”选项卡,点击“虚拟内存”栏内的“更改”按钮,即可进入“虚拟内存...
  • 虚拟内存对于系统来说是很重要的,但是关于他得设置也是需要一些方法的,不是所有的方法都可以将虚拟内存设置好的,那么虚拟内存怎么设置最好:虚拟内存太低怎么办?虚拟内存设置就行了,不必重装系统,建议将初始...
  • Hashmap是我们在Java...Java内存机制项目应用的总结。大体上说,HashMap的存储结构是用数组+链表实现的。数组大小也就是hash算法中的桶大小。HashMap有三个构造函数,分别为:图1 Hashmap的三个构造函数其中的init...
  • Java内存大小限制

    千次阅读 2010-07-03 21:33:00
    通过-Xms256m -Xmx256m的参数形式区设置heap的大小,还有-XX:MaxNewSize=256m -XX:MaxPermSize=256m的参数形式设置perm space的内存大小。 但是从操作系统的角度去考虑,一个运行的进程,其可以申请的进程内存空间...
  • 大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在...
  • 结论主机层没有开启 swap ,容器运行时无论怎么设置 --memory-swap,都不会使用到 swap,容器最大能使用的内存等于设置的内存限制;主机层开启了 swap 如下表:主机开启 swap不设置 --memory-swap 参数容器最大可以...
  • 怎么分析内存泄露

    2017-03-15 12:26:02
    上一篇《浅谈系统对app内存限制优化》说到了app占用内存大小可以通过设置largeheap提高系统的限制。但是这个不是万能的。我们应该对app的内存进行分析。避免内存泄露的情形。今天就来谈谈怎么看app是否与内存泄露和...
  • swap是内存的交换区;换句话说,如果内存不够用了,那么系统... 装系统的时候可能会将swap大小设置的不合适 但是swap的大小不正确,很影响服务器的性能。下面说说怎么修改swap分区的大小。 查看系统Swap空间使用 [r

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 321
精华内容 128
关键字:

怎么设置内存大小