”线上系统的JVM内存是否设置的越大越好?”乍一听到这个问题,我第一个反应就是“NO”,但是,具体为什么不行,又说不出什么所以然来。

  其实,说一个东西不行,我们只要说出几个“缺点”就可以了,如果还能列举出几个反例,特别是被广泛认可或广泛采用的反例,那就更好了。

JVM并非十全十美

  依赖JVM的最大的一个问题,就是STW(Stop the world,默认达到92%就会触发GC),在STW过程中,会暂停其他的工作线程,虽然GC的时间是很短暂的,但是,如果恰好在这个期间有请求过来,那可能就会无法响应这次请求。

  记得有个活生生的例子,之前一家公司,我同桌,接到了一个需求:跑资讯文章。需求是比较扰人的,目的是要跑到指定数量的文章,过程是非常繁琐的,有N多个判断分支嵌套组合,比如第一个段落,它是由四句话组成的,第一句话是需要依赖A字段,假如A字段没有,那得主动去计算,如果计算不出来,那就找A字段的替代字段,如果替代字段不存在,或者不符合预期,那最后得通过公式来伪造一个近似的值。我同桌本来写代码挺不错的,结果,在服务器上跑这需求的代码,楞是让服务器短时间内多次GC,造成了严重的卡顿现象,影响了其他的业务。

依托操作系统

  之前说过,操作系统有一个OS Cache,我们可以把数据存储的压力,转移到OS Cache上,这样的话,有两个好处,第一:规避了JVM复杂且耗时的GC;第二,依托操作系统级别的内存来进行读写,性能会更高。

  著名的Kafka,它就是典型案列。它的高效读写,就是使用了OS Cache 和 零拷贝技术。

操作系统是不是也存在内存回收?

  答案是:也存在。只不过,操作系统的内存回收,是针对“页”的,是操作系统级别的操作,效率肯定是优于JVM。而且,操作系统的内存管理,也是比JVM的内存管理更加健壮。

结论

  1. 分给JVM的内存,并不是越多越好;

  2. 可以把部分压力转移到OS Cache;   

3. 建议给OS Cache留下2/3的内存,32G的机器,可以留20G的内存空间给OS Cache

线上系统的JVM内存是否设置的越大越好?相关推荐

  1. jvm性能调优实战 -60 线上系统的JVM参数优化、GC问题定位排查、OOM分析解决

    文章目录 总结 总结 第一个是JVM运行我们写好的系统最根本的工作原理,包括: 内存各个部分的划分 代码在执行的过程中,各个内存区域是如何配合协调工作的 对象是如何分配的 GC如何触发 GC执行的原理 ...

  2. 050、JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况

    jstat详细信息,参考:jstat - Java Virtual Machine Statistics Monitoring Tool 1.前文回顾 对象优先在Eden区分配,Young GC的触发 ...

  3. 线上系统的JVM停顿几十秒,我们两个月才排查出真凶!

    「 关注"石杉的架构笔记",大厂架构经验倾囊相授 」 文章来源:[公众号:扣钉日记] 前言 最近我们系统出现了一些奇怪的现象,系统每隔几个星期会在大半夜重启一次,分析过程花费了很长 ...

  4. jvm性能调优实战 - 29使用 jstat 摸清线上系统的JVM运行状况

    文章目录 Pre 功能强大的jstat jstat -gc PID 其他的jstat命令 如何使用jstat工具? 新生代对象增长的速率 Young GC的触发频率和每次耗时 每次Young GC后有 ...

  5. jvm性能调优实战 - 30使用jmap和jhat摸清线上系统的对象分布

    文章目录 Pre 使用jmap了解系统运行时的内存区域 jmap -heap PID 使用jmap了解系统运行时的对象分布 jmap -histo PID 使用jmap生成堆内存转储快照 使用jhat ...

  6. 程序员搞事!动手实战优化自己公司线上系统JVM,结果。。。

    Java性能调优都是老生常谈的问题,特别当"糙快猛"的开发模式大行其道时,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 比如,下面这些典型的性能问题,你肯定或多或少 ...

  7. 重大事故!线上系统频繁卡死,凶手竟然是 Full GC ?

    每日鸡汤,好喝 01 案发现场 通常来说,一个系统在上线之前应该经过多轮的调试,在测试服务器上稳定的运行过一段时间.我们知道 Full GC 会导致 Stop The World 情况的出现,严重影响 ...

  8. JVM 内存优化设置

    from:http://blog.sina.com.cn/s/blog_707577700100vy4m.html 在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好 ...

  9. JVM内存 大小设置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...

最新文章

  1. 【Qt】Qt再学习(十四):QGraphicsView
  2. C#使用xpath简单爬取网站的内容
  3. python爬虫吧-python爬虫-贴吧
  4. Hyperlink的target属性的用法
  5. 20.三层技术之OSPF区域划分与路由重分发(2)
  6. STM32中STD、HAL、LL库比较
  7. Windows上使用gitbook制作电子书
  8. SiamMask:视频跟踪最高精度 (中科院王强大神作品)
  9. Spring Initializr创建项目,利用阿里云URL解决Initialization failed for https://start.spring.io Please check URL
  10. windows server如何加强云服务器的安全性
  11. php 检查字符串类型,PHP之字符串类型与检验
  12. JQuery Dialog(JS模态窗口,可拖拽的DIV)
  13. (转)机会还是陷阱:诺亚财富的私募股权策略
  14. 《机器视觉算法与应用》第3章 机器视觉算法之形态学——学习笔记
  15. 见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频
  16. Axure RP 9
  17. windows系统下Studio3T下载与安装
  18. mysql执行后缀.sql_MySQL命令执行sql文件的两种方法
  19. 基于stm32单片机语音LD3320控制直流电机智能座椅LCD1602显示人体重量薄膜压力传感器设计
  20. php小型购物网站,PHP实现一个多功能购物网站

热门文章

  1. 对不起,我数学不好,不配参加双 11
  2. ODBC读取Excel错误 Microsoft Jet 数据库引擎找不到对象'Sheet1' 请确认对象是否存在,并正确地写出它的名称和路径
  3. 计算机屏幕节电模式,电脑显示屏一打开就显示节电模式,怎么处理
  4. Autodesk infraworks 开发资料
  5. 使用button控件更改C#From窗体背景
  6. java 怎么解决volatile 原子一致性的问题:
  7. Linux添加子账号,设置密码
  8. TOF(Time-of-Flight) Camera介绍
  9. 【洛谷_P1983】车站分级
  10. python和tkinter实现摄像头实时无闪烁显示