如何在高性能服务器上进行JVM调优;以便充分利用高性能服务器的硬件资源,有两种JVM调优方案。

一、        采用64位操作系统,并为JVM分配大内存

分析:如果JVM中堆内存太小,那么就会频繁地发生垃圾回收,而垃圾回收都会伴随不同程度的程序停顿。

a)        优点:扩大堆内存的话可以减少垃圾回收的频率,从而避免程序的停顿。因此,人们自然而然想到扩大内存容量。而32位操作系统理论上最大只支持4G内存,64位操作系统最大能支持128G内存,因此我们可以使用64位操作系统,并使用64位JVM,并为JVM分配更大的堆内存

b)        缺点:堆内存变大后,虽然垃圾收集的频率减少了,但每次垃圾回收的时间变长。如果Full GC频繁发生,那么对于一个网站来说是无法忍受的。

c)        应对办法:因此,对于使用大内存的程序来说,一定要减少Full GC的频率,如果每天只有一两次Full GC,而且发生在半夜, 那完全可以接受。要减少Full GC的频率,就要尽量避免太多对象进入老年代,可以有以下做法:(1)确保对象都是“朝生夕死”的,一个对象使用完后应尽快让他失效,然后尽快在新生代中被Minor GC回收掉,尽量避免对象在新生代中停留太长时间。(2)提高大对象直接进入老年代的门槛

d)        注意:

1)        64位JDK支持更大的堆内存,但更大的堆内存会导致一次垃圾回收时间过长。

2)        现阶段,64位JDK的性能普遍比32位JDK低。

3)        堆内存过大无法在发生内存溢出时生成内存快照

4)        相同程序,64位JDK要比32位JDK消耗更大的内存

二、        采用32位JVM集群:针对64位JDK的种种弊端,我们更多的选择32为JDK集群来充分利用高性能机器的硬件资源。

a)        如何实现:在一台服务器上运行多个服务器程序,这些程序都运行在32位的JDK上。然后再运行个服务器作为反向代理服务器,由它来实现负载均衡。由于32位JDK最多支持2G内存,因此每个虚拟结点的堆内存可以分配1.6G,一共运行10个虚拟结点的话,这台物理服务器可以拥有16G的堆内存。

b)        有啥弊端:

1)        多个虚拟节点竞争共享资源时容易出现问题

2)        很难高效地使用资源池

3)        每个虚拟节点最大内存为2G

三、        直接内存也会导致内存溢出?

a)        问题分析:在32位JDK中,将1.6G分配给了堆,还有一部分分配给了JVM的其它内存,只有少于0.4G的内存为非JVM内存。我们知道,如果使用了NIO,那么JVM会在JVM内存之外分配内存空间,这部分内存也叫“直接内存”。因此,如果程序中使用了NIO,那么就要小心“直接内存”不足时发生内存溢出异常了!

b)        直接内存的垃圾回收过程:直接内存虽然不是JVM内存空间,但它的垃圾回收也有JVM负责。直接内存的垃圾回收发生在Full GC时,只有当老年代内存满时,垃圾收集器才会顺便收集一下直接内存中的垃圾。如果直接内存已满,但老年代没满,这时直接内存先是抛出异常,相应的catch块中调用System.gc()。由于System.gc()只是建议JVM回收,JVM可能不马上回收内存,那么这时直接内存就抛出内存溢出异常,使得程序终止。

四、        JVM崩溃的原因:当内存溢出时,JVM仅仅会终止当前运行的程序,那么什么时候JVM会崩溃呢?

五、        异步请求如何造成JVM崩溃:如果一个Web应用使用了较多的异步请求(AJAX),每次主线程发送完请求后都将TCP连接交给一条新的线程去等待服务器回信,那么如果网络不流畅时,这些受委托的线程迟迟等不到服务器的回信,因此保持着TCP连接。当TCP连接过多时,超过JVM的承受能力,JVM就发生崩溃。

六、        如何处理大对象:

a)        在写程序的时候尽量避免大对象

b)        尽量缩短大对象的有效时间。对象使用完之后尽快让他失效,以便于垃圾收集器尽快对它进行回收以免在新生代待的时间过长而进入到老年代。

转载于:https://www.cnblogs.com/BaoZiY/p/10632251.html

深入理解JVM(6)——JVM性能调优实战相关推荐

  1. jvm性能调优实战 -33每日百亿数据量的实时分析引擎,如何定位和解决频繁Full GC问题

    文章目录 Pre 运行程序用的示例JVM参数 Code 基于jstat分析程序运行的状态 对JVM性能进行优化 小结 Pre jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full ...

  2. jvm性能调优实战 - 32一个10万并发的BI系统,如何定位和解决频繁Young GC问题?

    文章目录 Pre 模拟代码的JVM参数设置 示例Code 如何在windows上执行命令? 通过jstat观察程序的运行状态 Pre jvm性能调优实战 - 26一个每秒10万并发的系统如何频繁发生Y ...

  3. jvm原理及性能调优系列(jvm调优)

    jvm原理及性能调优系列(jvm调优) JVM设置: 1.设置合适的最大堆内存(新生代和老生代的最大和值)和最小堆内存(jvm启动时占用的操作系统内存大小),及设置好堆的比例分配. 2.设置合适的新生 ...

  4. JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码...

    本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍) ...

  5. 从蚂蚁金服裸辞,京东三面遭调优猛击,闭关俩月啃完653页性能调优实战手册,拿到京东offer

    性能优化是很多 Java 程序员希望彻底掌握的一门技能.很多人都想学好性能优化,希望能够在自己的工作中灵活运用提高性能,从而为用户提供良好的用户体验.然而,很多人在设计技术方案或者编码时缺乏系统地.方 ...

  6. 《Java后端性能调优实战方案手册》,看完至少阿里P7

    之前有朋友说,"我们公司的系统从来都没有经过性能调优,集成测试没问题后就上线了,上线后也几乎没出现过性能问题."其实没遇到性能问题不代表程序不存在性能问题,只能说明系统的访问量有点 ...

  7. 上线半天下载量破100W!美团大佬的Java性能调优实战手册,超详细

    随着互联网的发展,高可靠.高并发以及降本增效,已成为各大公司面临的现实挑战,性能优化需求愈发迫切,大到分布式系统,小到代码块的算法优化,都已经成为你日常工作中必须要面对的事情.对于开发者而言,性能优化 ...

  8. GitHub疯狂转发!阿里巴巴彩版java性能调优实战,终于到手了!文末福利

    怎样才能做好性能调优? 开始之前,我先来讲一下我对性能调优的看法.在我看来Java的性能调优并不是像学习编程语言一样可以通过学习掌握,它是没有办法用直线的思维学会并掌握使用的,并且它对于程序员来说,对 ...

  9. 最新的阿里内部Java性能调优实战笔记,学完就能用的性能调优方法

    年前的一波裁员"背刺",不少人失业,最近翻了不少网站的招聘信息,帮大家看看机会(附几张截图).上个月防疫政策放开,经济逐渐复苏,招聘市场也正在回暖,Java岗机会还是不少,大家多关 ...

  10. 阿里出品的这份Java性能调优实战手册,直接涨薪25K,真的香啊

    现在,网站和应用程序的功能越来越丰富了,对网络和设备性能的要求自然也越来越高.因此,实现高水平的系统性能,逐渐成为每一位程序员不可或缺的底层能力.可是,传统的性能优化视角,更多的是从问题与测量数据的角 ...

最新文章

  1. android ffmpeg 编码h264,Mac系统下ffmpeg+h264+flv编码的android录制屏幕实现2
  2. R语言与数据分析(12)向量
  3. devexpress chart 柱形图
  4. 毕业5年,我是怎么成为年薪30W的运维工程师
  5. 动画理解Dijkstra算法过程
  6. C语言中文件定位函数总结
  7. gin redis 链接不上_Redis 高并发问题,及解决方案!
  8. a==b和a.equals(b)的区别
  9. Nginx 快速搭建HTTP 文件服务器
  10. WordPress插件-WBOLT热门关键词推荐插件v1.3.0 Pro绿色版
  11. 共享单车扫不开却自动计费 行程显示骑到非洲:想要带你一起去旅行?
  12. java共享密匙验证身份实例_有关java的身份验证连接数据库的一段代码,大侠来看看~...
  13. zookeeper 大量连接断开重连原因排查
  14. 中国互金协会李东荣:力争在法定数字货币等领域深度参与国际标准规则制定
  15. 启动Tomcat出现Using CATALINA_BASE
  16. win10专业版开机画面模糊_为什么win10有些软件显示模糊_win10软件界面模糊的解决办法...
  17. 程序员的8个职业发展方向,了解一下!
  18. 终于有人把“元宇宙”说清楚了
  19. 详细写出拆卸计算机的步骤和过程,CPU风扇(INTEL)的详细拆卸和安装方法_计算机软件和应用程序_IT / computer_special...
  20. 弹出停止U盘安全删除硬件的命令

热门文章

  1. 通过stream去重_分享几种 Java8 中通过 Stream 对列表进行去重的方法
  2. 梅州市2021普通高考成绩查询,梅州高考成绩查询入口
  3. 【C++入门】C++ STL概述
  4. JVM 和 HotSpot 的区别?
  5. 7.彻底搞懂javascript-闭包
  6. MySQL集群之五大常见的MySQL高可用方案(转)
  7. 如何用TensorFlow生成令人惊艳的分形图案
  8. DNS劫持和HTTP劫持有何区别
  9. UILongPressGestureRecognizer
  10. 利用存储过程批量生成数据