线上系统的JVM内存是否设置的越大越好?
”线上系统的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内存是否设置的越大越好?相关推荐
- jvm性能调优实战 -60 线上系统的JVM参数优化、GC问题定位排查、OOM分析解决
文章目录 总结 总结 第一个是JVM运行我们写好的系统最根本的工作原理,包括: 内存各个部分的划分 代码在执行的过程中,各个内存区域是如何配合协调工作的 对象是如何分配的 GC如何触发 GC执行的原理 ...
- 050、JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况
jstat详细信息,参考:jstat - Java Virtual Machine Statistics Monitoring Tool 1.前文回顾 对象优先在Eden区分配,Young GC的触发 ...
- 线上系统的JVM停顿几十秒,我们两个月才排查出真凶!
「 关注"石杉的架构笔记",大厂架构经验倾囊相授 」 文章来源:[公众号:扣钉日记] 前言 最近我们系统出现了一些奇怪的现象,系统每隔几个星期会在大半夜重启一次,分析过程花费了很长 ...
- jvm性能调优实战 - 29使用 jstat 摸清线上系统的JVM运行状况
文章目录 Pre 功能强大的jstat jstat -gc PID 其他的jstat命令 如何使用jstat工具? 新生代对象增长的速率 Young GC的触发频率和每次耗时 每次Young GC后有 ...
- jvm性能调优实战 - 30使用jmap和jhat摸清线上系统的对象分布
文章目录 Pre 使用jmap了解系统运行时的内存区域 jmap -heap PID 使用jmap了解系统运行时的对象分布 jmap -histo PID 使用jmap生成堆内存转储快照 使用jhat ...
- 程序员搞事!动手实战优化自己公司线上系统JVM,结果。。。
Java性能调优都是老生常谈的问题,特别当"糙快猛"的开发模式大行其道时,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 比如,下面这些典型的性能问题,你肯定或多或少 ...
- 重大事故!线上系统频繁卡死,凶手竟然是 Full GC ?
每日鸡汤,好喝 01 案发现场 通常来说,一个系统在上线之前应该经过多轮的调试,在测试服务器上稳定的运行过一段时间.我们知道 Full GC 会导致 Stop The World 情况的出现,严重影响 ...
- JVM 内存优化设置
from:http://blog.sina.com.cn/s/blog_707577700100vy4m.html 在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好 ...
- JVM内存 大小设置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...
最新文章
- 【Qt】Qt再学习(十四):QGraphicsView
- C#使用xpath简单爬取网站的内容
- python爬虫吧-python爬虫-贴吧
- Hyperlink的target属性的用法
- 20.三层技术之OSPF区域划分与路由重分发(2)
- STM32中STD、HAL、LL库比较
- Windows上使用gitbook制作电子书
- SiamMask:视频跟踪最高精度 (中科院王强大神作品)
- Spring Initializr创建项目,利用阿里云URL解决Initialization failed for https://start.spring.io Please check URL
- windows server如何加强云服务器的安全性
- php 检查字符串类型,PHP之字符串类型与检验
- JQuery Dialog(JS模态窗口,可拖拽的DIV)
- (转)机会还是陷阱:诺亚财富的私募股权策略
- 《机器视觉算法与应用》第3章 机器视觉算法之形态学——学习笔记
- 见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频
- Axure RP 9
- windows系统下Studio3T下载与安装
- mysql执行后缀.sql_MySQL命令执行sql文件的两种方法
- 基于stm32单片机语音LD3320控制直流电机智能座椅LCD1602显示人体重量薄膜压力传感器设计
- php小型购物网站,PHP实现一个多功能购物网站
热门文章
- 对不起,我数学不好,不配参加双 11
- ODBC读取Excel错误 Microsoft Jet 数据库引擎找不到对象'Sheet1' 请确认对象是否存在,并正确地写出它的名称和路径
- 计算机屏幕节电模式,电脑显示屏一打开就显示节电模式,怎么处理
- Autodesk infraworks 开发资料
- 使用button控件更改C#From窗体背景
- java 怎么解决volatile 原子一致性的问题:
- Linux添加子账号,设置密码
- TOF(Time-of-Flight) Camera介绍
- 【洛谷_P1983】车站分级
- python和tkinter实现摄像头实时无闪烁显示