`
caocao
  • 浏览: 272148 次
  • 来自: 上海
社区版块
存档分类
最新评论

试用一把64位JVM,未见性能提升,还有明显下降

阅读更多
这两天试用了JDK 5.0 update 11 64bit的JVM,感觉性能有明显下降。
机器环境,FC6.0,双扣肉,4G内存,双SCSI做Raid 0。
对照JVM是JDK 5.0 update 10 32bit。
机器跑的是Tomcat,基于Lucene的搜索引擎。
参见我自制的系统负载图,可以看到晚上最忙的时段负载64bit明显高出一大块。
我猜测可能是64bit需要大内存伺候,我开给JVM的内存都是2.4G,其余内存要跑后台好些任务。2.4G对64bit来说可能太少了,因此JVM可能在频繁GC。
请大家谈谈可能会是什么原因?我准备roll back到32bit。
  • 描述: JDK 5.0 update 10 32bit
  • 大小: 2.7 KB
  • 描述: JDK 5.0 update 11 64bit
  • 大小: 3.3 KB
分享到:
评论
21 楼 caocao 2007-02-11  
complystill 写道
jigsaw 写道
wangzy 写道
32位下,不hack内核参数的话,内存顶多也就能直接访问到2g,要4g也没用。



什么?32位寻址只能到2G?谁告诉你的?这句话的上下文是什么?


像 Win NT 内核, 默认情况下只给应用使用2G的内存寻址空间, 其余2G空间为OS和DLL保留, 所以不hack的话应用最多只能分配到2G. 调整过参数以后可以让OS只占高端1G, 应用可以得到3G.

其它OS下情况可能不同, 但32位的OS下, 单个进程肯定是不可能获得4G地址空间的.

另外64位OS下应用内存增长的情况. 我猜想很可能是虚拟内存映射表的开销增加造成的, 这个了解虚拟内存实现机制以后比较容易理解.


貌似有个啥32位NT内核模拟64位的玩意,可以让JVM在32位NT上拿到更多内存,具体数值不清,没有玩过,仅仅听说而已。
20 楼 歆渊 2007-02-11  
jigsaw 写道
wangzy 写道
32位下,不hack内核参数的话,内存顶多也就能直接访问到2g,要4g也没用。



什么?32位寻址只能到2G?谁告诉你的?这句话的上下文是什么?


像 Win NT 内核, 默认情况下只给应用使用2G的内存寻址空间, 其余2G空间为OS和DLL保留, 所以不hack的话应用最多只能分配到2G. 调整过参数以后可以让OS只占高端1G, 应用可以得到3G.

其它OS下情况可能不同, 但32位的OS下, 单个进程肯定是不可能获得4G地址空间的.

另外64位OS下应用内存增长的情况. 我猜想很可能是虚拟内存映射表的开销增加造成的, 这个了解虚拟内存实现机制以后比较容易理解.
19 楼 caocao 2007-02-11  
YRHYRH 写道
双扣肉?是1066MHz总线的?不是双核至强 ?
你用桌面级别的CPU想跑好WEB应用是不可能的。64位出来这么久那里看出他的好处了?你的TOMCAT是64位的?内存再大也没有吧?这本来就是CPU的运算能力的问题


...


呵呵,就是你说的5110,因为核心是扣肉的,俺叫扣肉叫习惯了。现在CPU压力不大,每天接近百万的搜索量,load average<1。
SUN的东西我们暂时玩不起,以前我在eBay的时候倒是玩过很多。

附上信息:
model name      : Intel(R) Xeon(R) CPU            5110  @ 1.60GHz
stepping        : 6
cpu MHz         : 1595.939
cache size      : 4096 KB
18 楼 YRHYRH 2007-02-11  
双扣肉?是1066MHz总线的?不是双核至强 ?
你用桌面级别的CPU想跑好WEB应用是不可能的。64位出来这么久那里看出他的好处了?你的TOMCAT是64位的?内存再大也没有吧?这本来就是CPU的运算能力的问题


酷睿系列的 和 双核至强 是没有可比性的。

做WEB服务器(硬件)的CPU 用双核至强会好很多,
比如双核至强  5110  (1.6G ,4M cash)这个CPU
虽然也是1066MHz的总线。但是比前一代3G的至强 提升了130%的计算能力。5110的TDP只有65W 。用来做1U的主机最合适不过了。

说到这个,我认为也要分应用的场合。
SUN的哪个8核心的WEB服务器CPU频率够底了。但是跑WEB服务的性能真是没有话说啊。

如果你的CPU比双核至强  5110  还要强,那么我没有话说了。你做集群吧。
17 楼 jigsaw 2007-02-10  
wangzy 写道
32位下,不hack内核参数的话,内存顶多也就能直接访问到2g,要4g也没用。



什么?32位寻址只能到2G?谁告诉你的?这句话的上下文是什么?
16 楼 minimu 2007-02-10  
其实如果你的内存比较够用的话,Xmn和Xmx设置成一样性能应该更好的

APR 要随时监视线程的,随着线程的增加,对性能的影响也越大的
15 楼 caocao 2007-02-09  
YuLimin 写道
caocao 写道
caocao 写道
YuLimin 写道
我用Solaris 10 + JRockit 5/64Bit,跑Application,每秒600个请求,CPU不超过20%,内存只开1G,Sun JDK的没有试过,你可以先进行相关JVM参数的调整再看看,然后有机会可以试试JRockit看看。


谢谢指点,可能你的应用对内存需求不大,我有机会也试试看JRockit。 


呵呵,今天调了一上午JVM参数,果然性能大大提升,待跑一天看看。
把相关的环境与调优的过程总结一下拿出来分享。另外介绍OnJava上面的一篇文章给你参考:

Scaling Enterprise Java on 64-bit Multi-Core X86-Based Servers
http://www.onjava.com/pub/a/onjava/2006/11/01/scaling-enterprise-java-on-64-bit-multi-core.html

介绍如何在64位多核CPU的Server上进行优化J2EE应用,包括JVM调优,使用新的API,比如:Concurrent、NIO以及优化代码等等。

如果你用的JDK5.0的话,注意线程、同步锁等等方面的优化,会收到很好的效果的!


谢谢,你给的链接受益匪浅。
我的应用是基于lucene的搜索引擎,我调整了两个参数-Xmn和-XX:+UseConcMarkSweepGC,本来Xmn是Xmx的1/3,现在调整到1/2,性能提升明显,再加-XX:+UseConcMarkSweepGC。
还有一个相当重要的是我还关掉了APR,虽然APR能减少活动线程10倍左右,不过系统负载不降反升,关了看看。
准备挺过周末看看调整的效果。
我这个应用没有用到任何锁机制,全部都是并发只读,可以说只有启动读入字典用了同步,没有地方用同步,不知道有哪些地方还可以对多线程优化。
14 楼 wangzy 2007-02-09  
caocao 写道
wangzy 写道
32位下,不hack内核参数的话,内存顶多也就能直接访问到2g,要4g也没用。

这个gc频繁,可能需要调整些参数才行。

我站点用了64位,当时主要目的是想充分利用“便宜的内存”,用下来效果也还不错。


呵呵,可以超过2G,下面是我测试的结果,环境FC6.0 64bit, JDK 1.5.0_11-b03 32bit

[root@localhost tmp]# java -Xmx2661m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
[root@localhost tmp]# java -Xmx2660m -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Server VM (build 1.5.0_11-b03, mixed mode)


我以为是FC 32bit的版本呢

以前装oracle的时候,如果不进行一些hack,SGA上不了2g以上
最近有个系统,直接64bit的操作系统,oracle直接设置内存都没问题
13 楼 YuLimin 2007-02-09  
caocao 写道
caocao 写道
YuLimin 写道
我用Solaris 10 + JRockit 5/64Bit,跑Application,每秒600个请求,CPU不超过20%,内存只开1G,Sun JDK的没有试过,你可以先进行相关JVM参数的调整再看看,然后有机会可以试试JRockit看看。


谢谢指点,可能你的应用对内存需求不大,我有机会也试试看JRockit。 


呵呵,今天调了一上午JVM参数,果然性能大大提升,待跑一天看看。
把相关的环境与调优的过程总结一下拿出来分享。另外介绍OnJava上面的一篇文章给你参考:

Scaling Enterprise Java on 64-bit Multi-Core X86-Based Servers
http://www.onjava.com/pub/a/onjava/2006/11/01/scaling-enterprise-java-on-64-bit-multi-core.html

介绍如何在64位多核CPU的Server上进行优化J2EE应用,包括JVM调优,使用新的API,比如:Concurrent、NIO以及优化代码等等。

如果你用的JDK5.0的话,注意线程、同步锁等等方面的优化,会收到很好的效果的!
12 楼 caocao 2007-02-09  
caocao 写道
YuLimin 写道
我用Solaris 10 + JRockit 5/64Bit,跑Application,每秒600个请求,CPU不超过20%,内存只开1G,Sun JDK的没有试过,你可以先进行相关JVM参数的调整再看看,然后有机会可以试试JRockit看看。


谢谢指点,可能你的应用对内存需求不大,我有机会也试试看JRockit。 


呵呵,今天调了一上午JVM参数,果然性能大大提升,待跑一天看看。
11 楼 caocao 2007-02-09  
wangzy 写道
32位下,不hack内核参数的话,内存顶多也就能直接访问到2g,要4g也没用。

这个gc频繁,可能需要调整些参数才行。

我站点用了64位,当时主要目的是想充分利用“便宜的内存”,用下来效果也还不错。


呵呵,可以超过2G,下面是我测试的结果,环境FC6.0 64bit, JDK 1.5.0_11-b03 32bit

[root@localhost tmp]# java -Xmx2661m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
[root@localhost tmp]# java -Xmx2660m -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Server VM (build 1.5.0_11-b03, mixed mode)
10 楼 basicbest 2007-02-09  
建议直接在64的Solaris上跑一下试试,如果我没记错的话,solaris直接提供了工具可以检查内存等系统核心的情况,或许可以找到些线索。
9 楼 YuLimin 2007-02-08  
具体还是看应用吧,建议用JRockit的MC工具来监控检查一下看看,这个工具还是不错的,开发者可以试用三个月,可以找找相关的一些内存的问题。
我在用MC的时候发现String这东东占的内存不少。所以还是要注意一下的:

1、注意String这东东;
2、打logger时,用if(logger.isDebugged())或if(logger.isInfoed()){...还打logger出来;}

各自的应用不一定一样,仅供参加。
8 楼 wangzy 2007-02-08  
32位下,不hack内核参数的话,内存顶多也就能直接访问到2g,要4g也没用。

这个gc频繁,可能需要调整些参数才行。

我站点用了64位,当时主要目的是想充分利用“便宜的内存”,用下来效果也还不错。
7 楼 robbin 2007-02-08  
XMLDB 写道
robbin 写道
我的经验也表明,在64bit OS上面,应用程序的物理内存耗用量明显上升,甚至翻番,4G内存实在不算多。

我对比过用32bit OS和64 bit OS跑JavaEye网站,64bit下面明显要跑得快一些。

64bit的4G应该就是32bit的2G.


没有这种说法,同样的应用,64bit机器用4G肯定比32bit用2G更宽裕。

但目前我也不太清楚为什么64bitOS上面,应用程序的物理内存空间占用会明显上升。
6 楼 caocao 2007-02-08  
XMLDB 写道
robbin 写道
我的经验也表明,在64bit OS上面,应用程序的物理内存耗用量明显上升,甚至翻番,4G内存实在不算多。

我对比过用32bit OS和64 bit OS跑JavaEye网站,64bit下面明显要跑得快一些。

64bit的4G应该就是32bit的2G.


谢谢两位的经验,内存暂时无法加大,只好用回32bit了。
5 楼 XMLDB 2007-02-08  
robbin 写道
我的经验也表明,在64bit OS上面,应用程序的物理内存耗用量明显上升,甚至翻番,4G内存实在不算多。

我对比过用32bit OS和64 bit OS跑JavaEye网站,64bit下面明显要跑得快一些。

64bit的4G应该就是32bit的2G.
4 楼 robbin 2007-02-08  
我的经验也表明,在64bit OS上面,应用程序的物理内存耗用量明显上升,甚至翻番,4G内存实在不算多。

我对比过用32bit OS和64 bit OS跑JavaEye网站,64bit下面明显要跑得快一些。
3 楼 caocao 2007-02-08  
YuLimin 写道
我用Solaris 10 + JRockit 5/64Bit,跑Application,每秒600个请求,CPU不超过20%,内存只开1G,Sun JDK的没有试过,你可以先进行相关JVM参数的调整再看看,然后有机会可以试试JRockit看看。


谢谢指点,可能你的应用对内存需求不大,我有机会也试试看JRockit。 
2 楼 YuLimin 2007-02-08  
我用Solaris 10 + JRockit 5/64Bit,跑Application,每秒600个请求,CPU不超过20%,内存只开1G,Sun JDK的没有试过,你可以先进行相关JVM参数的调整再看看,然后有机会可以试试JRockit看看。

相关推荐

    JVM系列之性能调优参考手册(实践篇).pdf

    标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。JVM作为Java程序运行的基础环境,对程序性能有着决定性影响。本手册的目的是指导开发者如何对JVM进行性能...

    jvm详细介绍以及性能优化方法

    深入理解JVM对于优化Java应用程序的性能至关重要。本篇文章将详细探讨JVM的工作原理,并提供一些有效的性能优化策略。 首先,JVM的内存结构分为堆、栈、方法区、程序计数器、本地方法栈等几个关键区域。堆是所有...

    JVM3天性能调优教程

    JVM3天性能调优教程.txt

    实战JAVA虚拟机 JVM故障诊断与性能优化

    《实战JAVA虚拟机—JVM故障诊断与性能优化》是一本深入探讨Java虚拟机(JVM)技术的书籍,旨在帮助开发者和系统管理员诊断并优化JVM相关的性能问题。本书内容丰富,涵盖了大量的实践案例,使得即便是初学者也能理解...

    监测JVM各项性能指标

    为了确保应用的高效运行和优化,开发者需要了解如何监测JVM的各项性能指标。JVM自带了一些工具,可以帮助我们监控内存使用、网络状况以及其它关键性能数据。下面将详细讨论这些知识点。 1. **JVM监控工具** - **...

    jvm性能调优+内存模型+虚拟机

    jvm性能调优+内存模型+虚拟机 jvm性能调优+内存模型+虚拟机 jvm性能调优+内存模型+虚拟机

    JVM堆栈性能分析

    每一个 Java 虚拟机 都有及时生成所有线程在某一点状态的 thread-dump 的能力,虽然各个 Java 虚拟机打印的thread dump 略有不同,但是大多都提供了当前活动线程的快 照,及JVM 中所有 Java线程的堆栈跟踪信息,堆栈...

    SAP JVM 8.1 64 bits

    SAP JVM 8.1 64位是一个专为SAP系统设计的Java虚拟机,它基于Oracle的Java Development Kit (JDK) 进行优化,以满足SAP应用程序的特定需求。SAP JVM旨在提高性能、可靠性和安全性,同时确保与SAP产品的无缝集成。...

    个人总结之—JVM性能调优实战

    ### 个人总结之—JVM性能调优实战 #### 概述 本文档是一篇关于JVM(Java虚拟机)性能调优的经典实战总结。在实际应用开发与维护过程中,JVM性能调优是一个非常重要的话题,它直接关系到应用程序运行效率、资源利用...

    JVM性能调优和常见问

    JVM性能调优和常见问题!JVM结构和常见错误解决

    涨见识!JVM性能监控与调优实战 一线大厂大牛讲师的JVM优化案例与解决方案课程

    JVM性能监控与调优实战课程,作为整篇课程的重中之重,非常值得同学们参考学习。课程前端讲解了JVM的性能监控和调优的概述,对调优的的方法和工具进行讲解学习,让同学们掌握方法,理解知识。课程的中间阶段我们进行...

    实战JAVA虚拟机 JVM故障诊断与性能优化带源码

    《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度探讨Java虚拟机(JVM)的书籍,旨在帮助开发者解决在实际工作中遇到的JVM相关问题,提升系统的性能。这本书提供了丰富的源码实例,让读者能够深入理解JVM的工作...

    JVM性能优化(PPT)

    JVM性能优化是一项细致而关键的任务,能够显著提升程序的运行效率,减少资源消耗,提高系统稳定性。本PPT详细探讨了JVM的工作原理以及如何进行性能优化。 1. **JVM架构** JVM分为几个主要区域:方法区、堆、栈、...

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送)

    深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理).zip

    《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...

    JVM性能调优总结.docx

    JVM性能调优是Java开发中非常重要的一方面,直接影响到系统的性能和稳定性。本文将总结JVM性能调优的经验和技巧,并提供一些实用的配置参数和建议。 一、堆大小设置 堆大小是JVM性能调优中的一个关键参数。堆大小...

    实战Java虚拟机 JVM故障诊断与性能优化 葛一鸣

    《实战Java虚拟机 JVM故障诊断与性能优化》是由葛一鸣编著的一本专业书籍,主要探讨了如何在实际工作中解决Java虚拟机(JVM)的相关问题,以及如何进行性能调优。书中涵盖了许多关键的知识点,让我们一一展开讨论。 ...

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...

    面试必问之jvm与性能优化.docx

    ### jvm性能优化相关知识点详解 #### 一、JVM加载Class文件的原理机制 **1.1 类加载概述** Java虚拟机(JVM)在执行Java程序时,并不会一次性加载所有的类,而是采取按需加载的方式。这种方式可以有效减少内存消耗...

Global site tag (gtag.js) - Google Analytics