《看完你还敢说你懂JVM吗》

摘要:北京时间20190613关于【《看完你还敢说你懂JVM吗》】的具体情况和说明,让www.myxinge.cn新闻频道的以图文形式为您慢慢道来。

在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用 了),如下图所示。由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了?

要分析这个问题,理解JVM和操作系统之间的内存关系非常重要。接下来主要就Linux与JVM之间的内存关系进行一些分析。

一、Linux与进程内存模型

JVM以一个进程(Process)的身份运行在Linux系统上,了解Linux与进程的内存关系,是理解JVM与Linux内存的关系的基础。下图给出了硬件、系统、进程三个层面的内存之间的概要关系。

从硬件上看,Linux系统的内存空间由两个部分构成:物理内存和SWAP(位于磁盘)。物理内存是Linux活动时使用的主要内存区域;当物理内存不够使用时,Linux会把一部分暂时不用的内存数据放到磁盘上的SWAP中去,以便腾出更多的可用内存空间;而当需要使用位于SWAP的数据时,必须 先将其换回到内存中。

从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核内存(Kernel space)、用户内存(User space)。

内核内存是Linux自身使用的内存空间,主要提供给程序调度、内存分配、连接硬件资源等程序逻辑使用。用户内存是提供给各个进程主要空间,Linux给各个进程提供相同的虚拟内存空间;这使得进程之间相互独立,互不干扰。实现的方法是采用虚拟内存技术:给每一个进程一定虚拟内存空间,而只有当虚拟内存实 际被使用时,才分配物理内存。如下图所示,对于32的Linux系统来说,一般将0~3G的虚拟内存空间分配做为用户空间,将3~4G的虚拟内存空间分配 为内核空间;64位系统的划分情况是类似的。

从进程的角度来看,进程能直接访问的用户内存(虚拟内存空间)被划分为5个部分:代码区、数据区、堆区、栈区、未使用区。代码区中存放应用程序的机器代码,运行过程中代码不能被修改,具有只读和固定大小的特点。数据区中存放了应用程序中的全局数据,静态数据和一些常量字符串等,其大小也是固定的。堆是运行时程序动态申请的空间,属于程序运行时直接申请、释放的内存资源。栈区用来存放函数的传入参数、临时变量,以及返回地址等数据。未使用区是分配新内 存空间的预备区域。

二、进程与JVM内存空间

JVM本质就是一个进程,因此其内存空间(也称之为运行时数据区,注意与JMM的区别)也有进程的一般特点。但是,JVM又不是一个普通的进程,其在内存空间上有许多崭新的特点,主要原因有两 个:1.JVM将许多本来属于操作系统管理范畴的东西,移植到了JVM内部,目的在于减少系统调用的次数;2. Java NIO,目的在于减少用于读写IO的系统调用的开销。 JVM进程与普通进程内存模型比较如下图:

需要说明的是,这个模型的并不是JVM内存使用的精确模型,更侧重于从操作系统的角度而省略了一些JVM的内部细节(尽管也很重要)。下面从用户内存和内核内存两个方面讲解JVM进程的内存特点。

1.用户内存

上图特别强调了JVM进程模型的代码区和数据区指的是JVM自身的,而非Java程序的。普通进程栈区,在JVM一般仅仅用做线程栈。JVM的堆区和普通进程的差别是最大的,下面具体详细说明:

首先是永久代。永久代本质上是Java程序的代码区和数据区。Java程序中类(class),会被加载到整个区域的不同数据结构中去,包括常量池、域、方法数据、方法体、构造函数、以及类中的专用方法、实例初始化、接口初始化等。这个区域对于操作系统来说,是堆的一个部分;而对于Java程序来 说,这是容纳程序本身及静态资源的空间,使得JVM能够解释执行Java程序。

其次是新生代和老年代。新生代和老年代才是Java程序真正使用的堆空间,主要用于内存对象的存储;但是其管理方式和普通进程有本质的区别。

普通进程在运行时给内存对象分配空间时,比如C++执行new操作时,会触发一次分配内存空间的系统调用,由操作系统的线程根据对象的大小分配好空间后返 回;同时,程序释放对象时,比如C++执行delete操作时,也会触发一次系统调用,通知操作系统对象所占用的空间已经可以回收。

JVM对内存的使用和一般进程不同。JVM向操作系统申请一整段内存区域(具体大小可以在JVM参数调节)作为Java程序的堆(分为新生代和老年代); 当Java程序申请内存空间,比如执行new操作,JVM将在这段空间中按所需大小分配给Java程序,并且Java程序不负责通知JVM何时可以释放这 个对象的空间,垃圾对象内存空间的回收由JVM进行。

JVM的内存管理方式的优点是显而易见的,包括:第一,减少系统调用的次数,JVM在给Java程序分配内存空间时不需要操作系统干预,仅仅在 Java堆大小变化时需要向操作系统申请内存或通知回收,而普通程序每次内存空间的分配回收都需要系统调用参与;第二,减少内存泄漏,普通程序没有(或者 没有及时)通知操作系统内存空间的释放是内存泄漏的重要原因之一,而由JVM统一管理,可以避免程序员带来的内存泄漏问题。

最后是未使用区,未使用区是分配新内存空间的预备区域。对于普通进程来说,这个区域被可用于堆和栈空间的申请及释放,每次堆内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进程来说,调整堆大小及线程栈时会使用该区域,而堆大小一般较少调整,因此大小相对稳定。操作系统会动态调整这个区域的 大小,并且这个区域通常并没有被分配实际的物理内存,只是允许进程在这个区域申请堆或栈空间。

2.内核内存

应用程序通常不直接和内核内存打交道,内核内存由操作系统进行管理和使用;不过随着Linux对性能的关注及改进,一些新的特性使得应用程序可以使 用内核内存,或者是映射到内核空间。Java NIO正是在这种背景下诞生的,其充分利用了Linux系统的新特性,提升了Java程序的IO性能。

上图给出了Java NIO使用的内核内存在linux系统中的分布情况。nio buffer主要包括:nio使用各种channel时所使用的ByteBuffer、Java程序主动使用 ByteBuffer.allocateDirector申请分配的Buffer。而在PageCache里面,nio使用的内存主要包 括:FileChannel.map方式打开文件占用mapped、FileChannel.transferTo和 FileChannel.transferFrom所需要的Cache(图中标示 nio file)。

通过JMX可以监控到NIO Buffer和 mapped 的使用情况,如下图所示。不过,FileChannel的实现是通过系统调用使用原生的PageCache,过程对于Java是透明的,无法监控到这部分内存的使用大小。

Linux和Java NIO在内核内存上开辟空间给程序使用,主要是减少不要的复制,以减少IO操作系统调用的开销。例如,将磁盘文件的数据发送网卡,使用普通方法和NIO时,数据流动比较下图所示:

将数据在内核内存和用户内存之间拷贝是比较消耗资源和时间的事情,而从上图我们可以看到,通过NIO的方式减少了2次内核内存和用户内存之间的数据拷贝。这是Java NIO高性能的重要机制之一(另一个是异步非阻塞)。

从上面可以看出,内核内存对于Java程序性能也非常重要,因此,在划分系统内存使用时候,一定要给内核留出一定可用空间。

三、案例分析

1.内存分配问题

通过上面的分析,省略比较小的区域,可以总结JVM占用的内存:

JVM内存 ≈ Java永久代 + Java堆(新生代和老年代) + 线程栈+ Java NIO

回到文章开头提出的问题,原来的内存分配是:6g(java堆) + 600m(监控) + 800m(系统),剩余大约600m内存未分配。

现在分析这600m内存的分配情况:

Linux保留大约200m,这部分是Linux正常运行的需要,

Java服务的线程数量是160个,JVM默认的线程栈大小是1m,因此使用160m内存,

Java NIO buffer,通过JMX查到最多占用了200m,

Java服务使用NIO大量读写文件,需要使用PageCache,正如前面分析,这个暂时不好定量估算大小。

前三项加起来已经560m,因此可以断定Linux物理内存不够使用。

细心的人会发现,引言中给出两个服务器,一个SWAP最多占用了2.16g,另外一个SWAP最多占用了871m;但是,似乎我们的内存缺口没有那么大。事实上,这是由于SWAP和GC同时进行造成的,从下图可以看到,SWAP的使用和长时间的GC在同一时刻发生。

SWAP和GC同时发生会导致GC时间很长,JVM严重卡顿,极端的情况下会导致服务崩溃。原因如下:JVM进行GC时,时需要对相应堆分区的已用 内存进行遍历;假如GC的时候,有堆的一部分内容被交换到SWAP中,遍历到这部分的时候就需要将其交换回内存,同时由于内存空间不足,就需要把内存中堆 的另外一部分换到SWAP中去;于是在遍历堆分区的过程中,(极端情况下)会把整个堆分区轮流往SWAP写一遍。Linux对SWAP的回收是滞后的,我 们就会看到大量SWAP占用。上述问题,可以通过减少堆大小,或者增加物理内存解决。

因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java堆(新生代和老年代)、线程栈、Java NIO所使用内存的需求。

2.内存泄漏问题

另一个案例是,8g内存的服务器,Linux使用800m,监控进程使用600m,堆大小设置4g;系统可用内存有2.5g左右,但是也发生了大量的SWAP占用。

分析这个问题如下:

在这个场景中, Java永久代 、Java堆(新生代和老年代)、线程栈所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

根据前面的模型,Java NIO使用的内存主要分布在Linux内核内存的System区和PageCache区。查看监控的记录,如下图,我们可以看到发生SWAP之前,也就是 物理内存不够使用的时候,PageCache急剧缩小。因此,可以定位在System区的Java NIO Buffer发生内存泄漏。

由于NIO的DirectByteBuffer需要在GC的后期被回收,因此连续申请DirectByteBuffer的程序,通常需要调用 System.gc(),避免长时间不发生FullGC导致引用在old区的DirectByteBuffer内存泄漏。分析到此,可以推断有两种可能的 原因:第一,Java程序没有在必要的时候调用System.gc();第二,System.gc()被禁用。

最后是要排查JVM启动参数和Java程序的DirectByteBuffer使用情况。在本例中,查看JVM启动参数,发现启用了-XX:+DisableExplicitGC导致System.gc()被禁用。

四、总结

本文详细分析了Linux与JVM的内存关系,比较了一般进程与JVM进程使用内存的异同点,理解这些特性将对Linux系统内存分配、JVM调优、Java程序优化有帮助。限于篇幅关系仅仅列举两个案例,希望起到抛砖引玉的作用。


查看更多
《性爱的好日子》高清版在线观看BT种子迅雷下载-多多|《情迷维纳斯 Delta of Venus》高清版完整版未删减免费在线观看|《我妻子的姐妹》-在线观看国产AV每日|《打狗棍》第33集-电视剧免费手机在线观看-113电视网|《斗罗大陆》第81集-动漫免费手机在线观看-你你看影视|《无心法师第一季》第20集完整版未删减免费在线观看|《暮光之城4:破晓[上]》BD完整版未删减免费在线观看|《权力的游戏第五季》电视剧-免费全集手机在线观看|《横空出世》电影_《横空出世》高清完整版在线播放_小|《江湖儿女 电影》高清版完整版未删减免费在线观看|《海贼王》第866集完整版未删减免费在线观看_迅雷高清|《火口的两人》高清版完整版未删减免费在线观看播放|《爱欲修道院》高清版完整版未删减免费在线观看播放|《玄门大师》电视剧_《玄门大师》全集完整版在线播放|《甜蜜电影》电影_《甜蜜电影》高清完整版在线播放_小7电影网|《电影合法入侵》高清版手机在线免费观看_奇优影院|《电影方世玉》高清版手机在线免费观看_奇优影院手机版|《电影空中营救》高清版手机在线免费观看_奇优影院|《电竞纪元》全集高清在线观看-迅雷/BT种子/ed2k电驴|《电视剧重生韩版》高清版手机在线免费观看_奇优影院手机版|

实时推荐

枫桥警务 弓长岭公安民警践行雷锋精神
推荐 2020-07-15 13:07 893 6752
乌拉圭国民发布2020赛季客场球衣
推荐 2020-07-15 13:07 884 4852
东体:上港预计20日出征苏州,一线队大名单正在统筹中
推荐 2020-07-15 13:07 595 8515
西媒:西班牙人面临大解体恐万劫不复,一半球员或离队,包括武磊
推荐 2020-07-15 13:07 285 2445
邯郸市民间救援队召开防汛抢险调度会
推荐 2020-07-15 13:07 996 7099
小荷初绽!烟台这个地方荷陆续盛开,赶快约起来
推荐 2020-07-15 13:07 728 694
直流电机电压不稳定的解决方法
推荐 2020-07-15 13:07 570 5429
排演历史剧,写无字天书,河北这所初中让学生玩出了新意
推荐 2020-07-15 13:07 556 1996
马郎.萨尔or库穆布拉?国米更换戈丁、升级防线的可行性方案探析
推荐 2020-07-15 13:07 392 4038
焦作幼师投毒案开审:供述想报复同事 没考虑小朋友
推荐 2020-07-15 13:07 168 2151
近千万人次关注!青岛西海岸新区“2020中国品牌日·线上品牌节”圆满落幕
推荐 2020-07-15 13:07 575 6113
为啥现代越来越多女性怀孕难?有个生育隐患,多半在17岁时已埋下
推荐 2020-07-15 13:07 802 9522
奔驰放下姿态,油耗5.3L,从21万降至18万,给足面子
推荐 2020-07-15 13:07 176 1575
不要小瞧国产SUV,瑞虎8实力不输合资,8.88万元起非常适合家用
推荐 2020-07-15 13:07 550 1138
原创 许晋亨最大的遗憾,不是4百亿家产每月仅领200万,而是错过何超琼
推荐 2020-07-15 13:07 316 4214
未来三年浙江“新基建”投资近1万亿元!优先支持温州云计算大数据中心
推荐 2020-07-15 13:07 182 770
住院一个月回来,屋顶咋多了一层?岳阳谈女士很苦恼
推荐 2020-07-15 13:06 327 2070
罗定梁氏杰出宗贤向罗中母校捐赠助学
推荐 2020-07-15 13:06 589 2446
霍山县市场监管局全力做好高考期间食品安全保障工作
推荐 2020-07-15 13:06 938 3745
西峡县重阳镇:打好账实相符软基础 增强脱贫攻坚硬实力
推荐 2020-07-15 13:06 132 5564
江山首例骨灰撒葬,绿色生态葬渐入人心
推荐 2020-07-15 13:06 791 7167
演技在线的杨紫小可爱,穿搭也是赏心悦目,平时的衣品又怎么样呢
推荐 2020-07-15 13:06 266 8074
主体通过验收!这所园林式学校预计年底完工,就在市中心
推荐 2020-07-15 13:06 97 3583
「山西孝义」力农蔬菜合作社:西红柿行情好 销售旺
推荐 2020-07-15 13:06 371 6731
甘肃临夏州康乐县发展牛羊交易市场,贩牛商人马麻乃感叹——生意“牛”在了好时候
推荐 2020-07-15 13:06 829 5597
全国首家数字金融地方组织在广州揭牌 5+12个项目签约
推荐 2020-07-15 13:06 572 2003
阳春市公安局召开扫黑除恶专项斗争专题调研工作会议
推荐 2020-07-15 13:06 454 2712
抚顺县人大常委会视察全县安全生产工作
推荐 2020-07-15 13:06 422 5394
车辆翻下山坡人员昏迷 永丰公安交警成功营救
推荐 2020-07-15 13:06 549 3825
错过的那个人,你现在还记得吗?
推荐 2020-07-15 13:06 886 1931
连云港一医院有人偷小孩?真相来了
推荐 2020-07-15 13:06 413 4853
科技股回落引发调整 市场迎来风险释放期
推荐 2020-07-15 13:06 99 1319
兴安供电局举办新闻宣传舆情管控培训班
推荐 2020-07-15 13:05 497 1690
象山供电强化培训提升员工应急处置能力
推荐 2020-07-15 13:05 428 6768
宝日勒岱:浓浓深情系家乡
推荐 2020-07-15 13:05 941 625
海北供电“三区三州”电网建设惠及刚察牧民
推荐 2020-07-15 13:05 901 8573
福州中考复习知识点归纳、地理模拟试卷领取
推荐 2020-07-15 13:05 343 9162
国网陕西汉中供电职工“读书角”受欢迎
推荐 2020-07-15 13:05 640 6217
李世民含泪给儿子写信:你以前是朕的儿子,现在是国家的仇人!
推荐 2020-07-15 13:05 549 1927
朱元璋用膳时吃到一根头发,御厨急中生智说6字,龙颜大悦还升职
推荐 2020-07-15 13:05 573 1653
9.8万提辆荣威RX5真的值吗?用车2100公里后,车主表示有话要说!
推荐 2020-07-15 13:05 920 910
美兰区检察院召开党组(扩大)会议研究部署党风廉政建设工作
推荐 2020-07-15 13:05 570 9285
谁认识这名老人?他在延吉肯德基待了一宿
推荐 2020-07-15 13:05 567 8159
拜泉县公安局组织开展实战大练兵现场执法能力考核
推荐 2020-07-15 13:05 715 619
浙江老党员为值守人员送100余份防汛物资:谢谢你们守在一线
推荐 2020-07-15 13:05 126 1638
高安供电员工奋战在抗洪保电一线获点赞
推荐 2020-07-15 13:05 720 6984
乌苏供电消除配电箱安全隐患
推荐 2020-07-15 13:05 544 8337
恭城供电公司圆满完成高考保供电任务
推荐 2020-07-15 13:05 701 993
浙江仙居:热血青年接受征兵体检 踊跃参军
推荐 2020-07-15 13:05 688 4162
崇信:万寿菊怒放,群众喜采摘
推荐 2020-07-15 13:05 142 4886
【青春公诉】陈冰青:践行法律的温情
推荐 2020-07-15 13:05 620 7896
“三扶”助力“扶贫号”战舰行稳致远
推荐 2020-07-15 13:05 716 923
联合执法整顿白酒销售市场
推荐 2020-07-15 13:05 368 5680
红河个旧供电局开展应急管理培训
推荐 2020-07-15 13:05 286 9283
原创 大众终于听劝了,全新大众CC内饰全面升级,这回不愁卖了
推荐 2020-07-15 13:05 382 7823
召开全市信访工作推进会
推荐 2020-07-15 13:05 938 2246
奎屯供电做好测温这件"小事"
推荐 2020-07-15 13:05 234 1010
携手护航促成长 同心共绘禁毒梦
推荐 2020-07-15 13:05 747 691
钦州新区供电服务复工复产企业获锦旗
推荐 2020-07-15 13:05 723 7836
秦州:多措并举 确保安全度汛
推荐 2020-07-15 13:04 232 794
红到突然消失的五位演员,第三位已离去,最后一位因为爱情!
推荐 2020-07-15 13:04 163 3648
【科普知识】吃剩的西瓜放在冰箱里,究竟会发生什么?
推荐 2020-07-15 13:04 591 8720
【科普资讯】青浦线上科普“全民答题有奖”不服来战
推荐 2020-07-15 13:04 667 7478
眉山天府新区青龙街道召开“扫黑除恶”专项斗争推进会
推荐 2020-07-15 13:04 643 5489
高阳县组织召开2020年中考工作安排部署会
推荐 2020-07-15 13:04 654 7021
詹姆斯未带私人厨师、按摩师和保安到比赛园区
推荐 2020-07-15 13:04 489 650
漳州东山杏陈镇:项目建设助力人居环境改善
推荐 2020-07-15 13:04 480 3708
这位好莱坞曾经的御用童星,已经长成亭亭玉立的少女!
推荐 2020-07-15 13:04 909 588
咸宁高新区约谈10家消防隐患企业
推荐 2020-07-15 13:04 294 2841
迎接大考,迭部时刻准备着!
推荐 2020-07-15 13:04 426 1613
泸州市邀川南三市自驾客细品“泸州文旅”3条精华线路已经备好
推荐 2020-07-15 13:04 203 787
《胜算》首曝预告,柳云龙献上影帝级别演技,“尔晴”让人惊艳!
推荐 2020-07-15 13:04 524 5760
有3种花,容易播种发芽率很高,不用买苗了,经常能开花
推荐 2020-07-15 13:04 473 5739
焦作文旅借势发力成效显 云台山成文旅市场复苏领军者
推荐 2020-07-15 13:04 474 9935
​​市生态环境局集宁区分局进一步推进非道路移动机械摸底调查和编码登记工作
推荐 2020-07-15 13:04 583 1441
暖!6只小精灵在青海被救助
推荐 2020-07-15 13:04 440 5976
凌云,一座美丽又悠闲的小城
推荐 2020-07-15 13:04 91 9501
《农作物病虫害防治条例》解读落实会议在来宾召开
推荐 2020-07-15 13:04 978 7522
淮南潘集:开展夏季“扫黄打非”专项行动
推荐 2020-07-15 13:04 126 2333
扬州市区新增800免费泊位,全天候免费!但这样停车要受处罚
推荐 2020-07-15 13:04 652 3571
我旗召开全旗第七次全国人口普查工作领导小组会议
推荐 2020-07-15 13:04 409 3813
凭外形就说圣女果是转基因食品?看把你能的! “水果圈”的这些谣言别再信了!
推荐 2020-07-15 13:03 642 1657
弘扬科学家精神,致敬科技追梦人——省青少年科技中心党支部开展主题党日活动
推荐 2020-07-15 13:03 468 8798
【亚马逊智能购物车将推出,无需收银员和排队结账】
推荐 2020-07-15 13:03 164 9764
洪江市人民法院:为42名农民工兑付工资21万元
推荐 2020-07-15 13:03 747 3310
大堤告急!新建公安连夜转移近5000名群众
推荐 2020-07-15 13:03 830 7316
LGD坡州E6、三星电子平泽P3建厂因疫情反弹进度暂缓,预计Q4后开工
推荐 2020-07-15 13:03 359 6149
省评估督导组莅临通化市特殊教育学校检查指导工作
推荐 2020-07-15 13:03 649 4383
三明大田消防大队开展暑期“消防主题公园”社会实践活动
推荐 2020-07-15 13:03 789 3484
宝安将打造大沙井片区四横八纵骨干公交线网体系
推荐 2020-07-15 13:03 434 3220
直接对标宝马X5、奥迪Q7,32.8万的理想ONE还真有它的硬实力
推荐 2020-07-15 13:03 841 3397
红红火火恍恍惚惚!高温区的朋友们,“哪儿凉快哪呆着去吧” ​
推荐 2020-07-15 13:03 707 9187
原创 苏轼救了才女后,送了她两句诗,对方听完感激不已,出家当了尼姑
推荐 2020-07-15 13:03 654 1734
青海旅游景点介绍
推荐 2020-07-15 13:03 690 2927
王鸥女团穿搭秀出“蚂蚁腰”,你看得出她37了吗
推荐 2020-07-15 13:03 679 7880
90%的人都不懂正确抱狗,盘点错误抱狗方式,第三种容易令狗咬人
推荐 2020-07-15 13:03 883 2622
点赞!庄河医生大爱援疆 帮扶救治病重老人
推荐 2020-07-15 13:03 745 8319
唐门英雄传最新话:唐舞麟突破封号斗罗,神界唐三送回海神三叉戟
推荐 2020-07-15 13:03 553 2399
四川广汉南丰三星堆汽车房车田园露营地,博物馆和美术馆都有哦
推荐 2020-07-15 13:03 373 1889
带患癌妻子徒步走全国“我要带她看遍各地风光”
推荐 2020-07-15 13:03 139 1353