分享
 
 
 

Apusic应用服务器的性能调节_JVM优化

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

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

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

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

2.Garbagecollection(垃圾回收)

3.线程管理

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

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

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

使用HotSpot

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

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

2.改善的Garbagecollection

3.线程同步优化??

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

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

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

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

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

•java-server:JavaHotSpotServerVM

•java-hotspot:JavaHotSpotClientVM

•java-classic:Java2ClassicVM

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

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

GarbageCollection

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

1.Copy/scavengecollection

2.Mark-compactcollection

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/scavengecollection算法,"主"GC使用Mark-compactcollection。

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-Xmx512mcom.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应用服务器上开发出稳定而又高性能的企业应用。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有