JVM性能悖论:硬件越多 错误越多(上)

日期: 2011-06-30 作者:Cameron McKenzie翻译:刘志超 来源:TechTarget中国 英文

不可预测的暂停问题   随便计算机硬件变得越来越便宜、快捷,管理员在管理Java服务器运行时环境的时候,经常会突然遇到一些严重的问题。   虽然我们的服务器拥有越来越快的硬件,但是运行在这些硬件上的Java虚拟机(JVM)不能有效地利用这些资源,突破瓶颈并稳定下来。有的时候,会稳定10秒钟,而剩下的10分钟会变得不稳定,但是,每次都会阻挠用户,导致零售商失去客户,营业场所开始请求他们的帮助中心,服务端的管理员在基于Java环境中的任务变得越来越令人沮丧。   问题是什么?引起JVM暂停的原因是什么?是内存、或者更具体的内存管理。

  内存很便宜。它也不总是便宜的,但是现在,你不需要花很多钱去买……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

不可预测的暂停问题

  随便计算机硬件变得越来越便宜、快捷,管理员在管理Java服务器运行时环境的时候,经常会突然遇到一些严重的问题。

  虽然我们的服务器拥有越来越快的硬件,但是运行在这些硬件上的Java虚拟机(JVM)不能有效地利用这些资源,突破瓶颈并稳定下来。有的时候,会稳定10秒钟,而剩下的10分钟会变得不稳定,但是,每次都会阻挠用户,导致零售商失去客户,营业场所开始请求他们的帮助中心,服务端的管理员在基于Java环境中的任务变得越来越令人沮丧。

  问题是什么?引起JVM暂停的原因是什么?是内存、或者更具体的内存管理。

  内存很便宜。它也不总是便宜的,但是现在,你不需要花很多钱去买万亿字节内存的服务器。如果你把数以万亿字节的内存分配到极少数虚拟机上,即使你的服务器上只托管了极少数的应用程序,你都会在运行中碰到问题。

  在过去几年中,这不是一个问题,32位机器最多只能为一个进程分配4G内存。但是现在,人们想分配5、10G内存到一个单独的JVM中,他们认为那些JVM不会崩溃,但是暂停,只是停止响应请求,就好象400米短跑,在比赛的最后,停下来稍稍喘口气一样。

  JVM处理垃圾回收工作。这意味着会清理开发者不在调用的实例化对象。一些垃圾回收很快就会完成,并且是隐蔽的。但是,某些公共的任务(幸运地是发生的频率很低),使用的时间明显很长,引起JVM暂停,使终端用户和管理员都很愤怒。当然,要了解这个问题,你需要了解一些JVM总体上是如何管理内存的。

  垃圾回收机制如何运作

  “JVM上内存被管理了几代,或是内存池处理不同阶段的对象。垃圾回收机制在每一代的垃圾被填满时出现。年轻对象被分到一代或者年轻一代,因为大多数对象都会死在婴儿时期。可以把高死亡率的婴儿放到一个小型集合中进行优化。这样集合的消费是第一顺序的、成比例的收集实例化的对象。在年轻一代中,死亡的对象会很快的被收集。一些幸存的对象会被移到老一代的集合中。收集老一代对象时,就要慢的多了,因为要在一个大集合中调用所有活的对象。”

  内存分配垃圾回收的性能悖论

  这种“慢得多”的垃圾回收会引起JVM的瘫痪。此外,JVM内存管理悖论是,当分配给JVM更多的内存时,老一代对象会占用更多的空间,长久陷入这种情况,JVM就会不工作了。

  在《JVM性能悖论:硬件越多 错误越多(下)》中,我们将介绍此性能悖论会带来什么问题以及如何解决。

相关推荐

  • Java性能优化的最差实践

    关于Java性能优化的方法已经有很多文章讨论过,其中总有一些不值得提倡甚至应该杜绝的方法,需要让开发者时刻保持警觉。

  • JVM垃圾收集器使用调查:CMS最受欢迎

    近日,Plumbr公司对特定垃圾收集器使用情况进行了一次调查研究,研究数据使用了84936个案例。在明确指定垃圾收集器的13%的案例中,并发收集器(CMS)使用次数最多。

  • 为什么说Azul Systems是微软Azure云的最好选择?

    当负责Azure云的微软朋友们决定,是时候慎重考虑拥抱企业Java社区时,他们知道他们需要做的第一步是,在他们的平台上引入世界级的Java运行时环境的实现。

  • 如何让代码并发效率更高

    开发人员正在利用多线程技术努力提高软件计算速度,本文介绍了如何让代码并发效率更高的实践经验。