Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » 技术文章库  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 [ZT]Apusic应用服务器的性能调节_JVM优化
youlq



CJSDN高级会员


发贴: 260
积分: 95
于 2003-09-05 15:53 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
注:转自金蝶网站,个人觉得该文关于jvm调节部分有参考价值,故推荐之。

Apusic应用服务器的性能调节

来自: 金蝶中间件 发布时间: 2003-04-07

Apusic应用服务器作为企业应用的运行平台,系统的性能非常重要。当应用对性能的要求比较苛刻时,就要考虑是否需要改变系统的缺省设置来提升服务器的性能。首先应该考虑系统的硬件环境(CPU主频高低、内存大小、硬盘转速及网络传输速率等)是否能满足应用的需求。对于复杂的大型分布式企业应用,硬件环境不应该仅仅满足Apusic应用服务器的最低要求配置,而应该提高硬件配置使应用运行的绰绰有余,如CPU和内存的使用率都不应大于80%。另一方面,改变软件环境的配置参数对于性能的影响也非常显著。本文就将介绍如何优化软件环境配置来提高系统性能,分为两个方面:Java虚拟机(JVM)的性能优化和Apusic应用服务器配置的优化。

Java虚拟机(JVM)的性能优化

Java体系结构由四个不同却又相互关联的部分组成:语言本身、class文件格式、Java API 库和JVM。当执行一个Java程序时,源代码是用Java 语言写成,它被编译成class文件格式,运行在JVM中。同时,Java程序调用Java API 库的方法,访问系统资源。JVM 和 Java API 库形成了编译和运行环境,就叫做Java平台。JVM是基于堆栈的(stack-based),而不象汇编语言是基于寄存器的(register based)。JVM是一个动态堆栈基础上的抽象的计算机体系结构,提供了push、pop来操作数据。JVM的主要功能是装载class文件,执行字节码。java平台的执行工作量分为四个部分:

1. 字节码的执行:JVM花费大概一半的时间来解释字节码。

2. Garbage collection(垃圾回收)

3. 线程管理

4. 动态操作:类装载、绑定检查、安全检查、动态类装载、异常捕获、反射机制、本地方法的翻译。

其中,对象的垃圾回收会占用运行时间,造成程序的短暂中断。

我们可以通过命令行方式来启动Apusic服务器,这样就可以有选择的设置命令行参数。使用命令行参数的主要目的是:选择Java程序使用的JVM类型和JVM运行时占用堆内存的分配策略。

使用HotSpot

HotSpot JVM作为java 2 SDK 的一个附加模块,使用了state-of-the-art 技术大大的提高了系统性能:

1. 适应编译:HotSpot JVM会在程序的运行过程中分析性能的瓶颈("hot spots"),然后编译这些和性能提高最紧密的部分。

2. 改善的Garbage collection

3. 线程同步优化 ??

HotSpot JVM使用两个机器字(two-machine-word) 作为对象的header,而不象大多数JVM使用三个机器字,这样大约可以节省10%的堆内存空间,加速了对所有对象的扫描。

HotSpot JVM 也丢弃了 handle 的概念,对象引用的实现是通过直接指针,减少了内存的使用和提高了处理速度。访问实例变量象C 语言一样的高效。

可以去http://java.sun.com/products/hotspot/2.0/download.html 下载Java HotSpotTM Server VM 2.0,执行安装即可。如果需要可以针对 jdk 和 jre分别进行安装。

HotSpot JVM 分为 client 和 server 版本,分别针对典型的客户端应用程序和服务器端应用进行了优化。Jdk1.3安装后就包含了 Java HotSpot Client VM,上面安装的是Java HotSpot Server VM。

可以通过命令行参数选择要使用的JVM:

· java -server :Java HotSpot Server VM

· java -hotspot : Java HotSpot Client VM

· java -classic : Java 2 Classic VM

缺省情况是使用 HotSpot Client VM。可以用 java -server -version 来查看版本信息,确定是否以正确安装。

只要针对不同的应用,选择Client 或Server HotSpot VM。对于Server-side应用,有时性能会提高20%,只要简单的在命令行启动Server 时加上 -server 。

Garbage Collection

HotSpot JVM 提供了三种类型的垃圾回收算法,分别是:

1. Copy/scavenge collection

2. Mark-compact collection

3. Incremental (train) collection

具体的含义我不解释了,有兴趣可以查看相关的文档。

一个 JVM 的吞吐量是指除去 GC 消耗的时间占总执行时间的百分比。因此,80%的吞度量就是说 GC 消耗了20%的 JVM 处理时间。当你的应用程序运行时,JVM 的 GC 会造成程序的暂停。

堆内存被分成了 new 和 old 两部分,如下图:

new 部分包括新创建对象区和两个 survivor 区(SS#1和SS#2),新创建的对象分配内存在 new 中,长时间存活的对象被移动到了 old 部分。Perm 是一个永久区域,分配给JVM本省,可以通过 命令行参数 -XX:MaxPermSize=64m 来设置。

当 new 被填满后,会触发"辅助" GC,把存在足够长时间的对象移动到 old 中。当 old 中也被填满了,会触发"主" GC ,将遍历堆内存中的所有对象。可以看出,"主" GC 会消耗更多的时间。足够大的 new 会适合需要大量创建存在时间很短的对象,而 old 如果不够大会频繁的触发"主" GC ,大大降低了性能。所以,我们的任务就是如何设置堆内存的大小以及如何规划 new 和 old 区域的比例来适合我们应用。

"辅助" GC 使用Copy/scavenge collection 算法,"主"GC 使用 Mark-compact collection。

Heap分配策略

通过命令行参数,我们可以设置堆的大小和分配"new"、"old"的比例。一些常用参数如下:



详细的参数设置请参看相关的文档。

如何来规划我们的堆内存分配策略呢?没有一个明确详细的规定,只能根据我们具体的应用进行调节,使性能达到最优化。这种优化方法不需要程序员改变代码,但有时效果会很明显。下面总结了一些操作建议:

· 如果GC成为了瓶颈,请定制你的堆内存分配

· 分配尽可能多的内存给JVM。但如果过多,会引起内存和硬盘之间的交换,反而降低的性能。你可以分配80%的可用RAM 给JVM。

· 如果是Server-Side应用,请加 -server 参数。这样,缺省的NewRatio 是2,SurvivorRatio 是 25 ,适合大部分应用。也可以用NewSize、MaxNewSize来设置。

· 设置- Xms 和 -Xmx 的大小相等,可以避免在每次 GC 后调整堆内存的大小。 · 同样道理设置NewSize、MaxNewSize相等。

· "new"的大小最好不要大于"old"的一半。 ??

例如,可以通过下面的命令行启动Apusic服务器:

java -server -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -Xms512m -Xmx512m com.apusic.server.Main

Apusic应用服务器配置的优化??

下面主要说明Apusic中的两个文件影响性能的参数说明(这两个文件放在%APUSIC_HOME%\config目录中)及数据库中的设置。

apusic.conf

把其中两个参数修改为: ??

MaxClients参数值设置的目的是防止拒绝服务攻击。当参数值设置较小时可以限制服务流量,起到防止拒绝服务攻击的作用,但是当访问的用户较多时而此参数设置较小时却会影响性能。一般情况下,不考虑防止拒绝服务攻击,此参数设置为-1,表示服务流量没有限制。??

MaxWaitingClients:与MaxClients有类似的功能,他表示当许多并发用户访问时,可允许等待的最大客户服务数。一般情况下,不考虑防止拒绝服务攻击,此参数设置为较大的数,如10000,如果设置较小,如50,当等待响应的并发服务队列数超过50时,使得一些服务得不到响应,从而丢失一些响应结果。

datasources.xml

min-spare-connections:指连接池最小容量

max-spare-connections:指连接池最大容量

stmt-cache-size:指语句缓存容量

resultset-cache-size:指结果集缓存容量

resultset-cache-timeout:指结果集缓存超时配置如下: …… ??

连接池最小容量:也就是初始连接数,此值不宜设置太小,太小须不断建立连接。也不宜设置太大,太大消耗资源。??

连接池最大容量: 连接池中可容纳的最大连接数,当连接池中的连接数不够用时,需要等待其他的被使用的连接得到释放,才能使用,否则只能等待。根据应用的实际情况设置此值。 ??

语句缓存容量:对所执行的语句进行缓存,当再次执行此语句时,不必重新编译,从而提高了性能。根据机器内存的大小适当设置此值。 ??

结果集缓存容量:把所得到的结果集进行缓存,当再次使用此结果集时,不必再次从数据库中取得,而可以直接从缓存中取得,从而提高性能。根据机器内存的大小适当设置此值。 ??

结果集缓存超时:结果集过期时间,此时间不宜设置过长,以免浪费资源。??

注:语句缓存容量、结果集缓存容量、结果集缓存超时参数主要针对Oracle数据库来设计的。 ??

通过适当的调节Java虚拟机和Apusic的配置文件,可以显著的提升系统的性能。在一些具体的应用中,还能够通过增加实例池、加大Cached、改变并发策略等方法来改善系统的整体性能。开发人员只要经过不断的总结,就可以在Apusic应用服务器上开发出稳定而又高性能的企业应用。


版权所有 @2000-2003 深圳市金蝶中间件有限公司 保留所有权利



Be tough!
作者 Re:[ZT]Apusic应用服务器的性能调节_JVM优化 [Re:youlq]
ajinjin





发贴: 77
积分: 20
于 2003-09-28 10:26 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
还有人用这种东西么


作者 Re:[ZT]Apusic应用服务器的性能调节_JVM优化 [Re:youlq]
xinca



发贴: 0
积分: 0
于 2003-10-09 13:54 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不用Apusic
但可以参考一下如何优化jvm



作者 Re:[ZT]Apusic应用服务器的性能调节_JVM优化 [Re:youlq]
wuchensir



发贴: 0
积分: 0
于 2003-11-21 13:35 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
金蝶现在好像投入ms的怀抱了


作者 Re:[ZT]Apusic应用服务器的性能调节_JVM优化 [Re:youlq]
frankwater





发贴: 32
积分: 0
于 2003-12-01 09:05 user profilesend a private message to usersend email to frankwatersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
参考一下JVM的优化也不错


作者 Re:[ZT]Apusic应用服务器的性能调节_JVM优化 [Re:youlq]
bluejava





发贴: 39
积分: 0
于 2003-12-03 14:45 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
什么样的兔子才只有一个窟?
什么样的公司才只跟M$?



作者 Re:[ZT]Apusic应用服务器的性能调节_JVM优化 [Re:youlq]
sunmoon





发贴: 32
积分: 0
于 2003-12-09 16:38 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
据内部消息,该服务器不支持多线程!废物,用它干嘛,公开大家讨论学习还是可以的



flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923