Apusic应用服务器作为企业应用的运行平台 系统的
性能非常重要 当应用对性能的要求比较苛刻时 就要考虑是否需要改变系统的缺省设置来提升服务器的性能 首先应该考虑系统的硬件环境(CPU主频高低
内存大小 硬盘转速及网络传输速率等)是否能满足应用的需求 对于复杂的大型分布式企业应用 硬件环境不应该仅仅满足Apusic应用服务器的最低要求配置 而应该提高硬件配置使应用运行的绰绰有余 如CPU和内存的使用率都不应大于 % 另一方面 改变软件环境的配置参数对于性能的影响也非常显著 本文就将介绍如何优化软件环境配置来提高系统性能 分为两个方面 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平台的执行工作量分为四个部分 .字节码的执行 JVM花费大概一半的时间来解释字节码 .Garbagecollection(垃圾回收) .线程管理 .动态 *** 作 类装载 绑定检查 安全检查 动态类装载 异常捕获 反射机制 本地方法的翻译 其中 对象的垃圾回收会占用运行时间 造成程序的短暂中断 我们可以通过命令行方式来启动Apusic服务器 这样就可以有选择的设置命令行参数 使用命令行参数的主要目的是 选择Java程序使用的JVM类型和JVM运行时占用堆内存的分配策略 使用HotSpot HotSpotJVM作为java SDK的一个附加模块 使用了state of the art技术大大的提高了系统性能 .适应编译 HotSpotJVM会在程序的运行过程中分析性能的瓶颈( hotspots ) 然后编译这些和性能提高最紧密的部分 .改善的Garbagecollection .线程同步优化HotSpotJVM使用两个机器字(o machine word)作为对象的header 而不象大多数JVM使用三个机器字 这样大约可以节省 %的堆内存空间 加速了对所有对象的扫描 HotSpotJVM也丢弃了handle的概念 对象引用的实现是通过直接指针 减少了内存的使用和提高了处理速度 访问实例变量象C语言一样的高效 可以去下载JavaHotSpotTMServerVM 执行安装即可 如果需要可以针对jdk和jre分别进行安装 HotSpotJVM分为client和server版本 分别针对典型的客户端应用程序和服务器端应用进行了优化 Jdk 安装后就包含了JavaHotSpotClientVM 上面安装的是JavaHotSpotServerVM 可以通过命令行参数选择要使用的JVM &# ;java server JavaHotSpotServerVM&# ;java hotspot:JavaHotSpotClientVM&# ;java classic Java ClassicVM缺省情况是使用HotSpotClientVM 可以用java server version来查看版本信息 确定是否以正确安装 只要针对不同的应用 选择Client或ServerHotSpotVM 对于Server side应用 有时性能会提高 % 只要简单的在命令行启动Server时加上 server GarbageCollection HotSpotJVM提供了三种类型的垃圾回收算法 分别是 .Copy/scavengecollection .Mark pactcollection .Incremental(train)collection具体的含义我不解释了 有兴趣可以查看相关的文档 一个JVM的吞吐量是指除去GC消耗的时间占总执行时间的百分比 因此 %的吞度量就是说GC消耗了 %的JVM处理时间 当你的应用程序运行时 JVM的GC会造成程序的暂停 堆内存被分成了new和old两部分 如下图 new部分包括新创建对象区和两个survivor区(SS# 和SS# ) 新创建的对象分配内存在new中 长时间存活的对象被移动到了old部分 Perm是一个永久区域 分配给JVM本省 可以通过命令行参数 XX:MaxPermSize= m来设置 当new被填满后 会触发 辅助 GC 把存在足够长时间的对象移动到old中 当old中也被填满了 会触发 主 GC 将遍历堆内存中的所有对象 可以看出 主 GC会消耗更多的时间 足够大的new会适合需要大量创建存在时间很短的对象 而old如果不够大会频繁的触发 主 GC 大大降低了性能 所以 我们的任务就是如何设置堆内存的大小以及如何规划new和old区域的比例来适合我们应用 辅助 GC使用Copy/scavengecollection算法 主 GC使用Mark pactcollection Heap分配策略 通过命令行参数 我们可以设置堆的大小和分配 new old 的比例 一些常用参数如下 详细的参数设置请参看相关的文档 如何来规划我们的堆内存分配策略呢?没有一个明确详细的规定 只能根据我们具体的应用进行调节 使性能达到最优化 这种优化方法不需要程序员改变代码 但有时效果会很明显 下面总结了一些 *** 作建议 &# ;如果GC成为了瓶颈 请定制你的堆内存分配&# ;分配尽可能多的内存给JVM 但如果过多 会引起内存和硬盘之间的交换 反而降低的性能 你可以分配 %的可用RAM给JVM &# ;如果是Server Side应用 请加 server参数 这样 缺省的NewRatio是 SurvivorRatio是 适合大部分应用 也可以用NewSize MaxNewSize来设置 &# ;设置 Xms和 Xmx的大小相等 可以避免在每次GC后调整堆内存的大小 &# ;同样道理设置NewSize MaxNewSize相等 &# ; new 的大小最好不要大于 old 的一半 例如 可以通过下面的命令行启动Apusic服务器 java server XX:NewSize= m XX:MaxNewSize= m XX:SurvivorRatio= Xms m Xmx m apusic server Main Apusic应用服务器配置的优化 下面主要说明Apusic中的两个文件影响性能的参数说明(这两个文件放在%APUSIC_HOME%\config目录中)及数据库中的设置 nf把其中两个参数修改为 MaxClients参数值设置的目的是防止拒绝服务攻击 当参数值设置较小时可以限制服务流量 起到防止拒绝服务攻击的作用 但是当访问的用户较多时而此参数设置较小时却会影响性能 一般情况下 不考虑防止拒绝服务攻击 此参数设置为 表示服务流量没有限制 MaxWaitingClients 与MaxClients有类似的功能 他表示当许多并发用户访问时 可允许等待的最大客户服务数 一般情况下 不考虑防止拒绝服务攻击 此参数设置为较大的数 如 如果设置较小 如 当等待响应的并发服务队列数超过 时 使得一些服务得不到响应 从而丢失一些响应结果 datasources xml min spare connections 指连接池最小容量max spare connections 指连接池最大容量stmt cache size 指语句
缓存容量resultset cache size 指结果集缓存容量resultset cache timeout 指结果集缓存超时配置如下 ……连接池最小容量 也就是初始连接数 此值不宜设置太小 太小须不断建立连接 也不宜设置太大 太大消耗资源 连接池最大容量 连接池中可容纳的最大连接数 当连接池中的连接数不够用时 需要等待其他的被使用的连接得到释放 才能使用 否则只能等待 根据应用的实际情况设置此值 语句缓存容量 对所执行的语句进行缓存 当再次执行此语句时 不必重新编译 从而提高了性能 根据机器内存的大小适当设置此值 结果集缓存容量 把所得到的结果集进行缓存 当再次使用此结果集时 不必再次从数据库中取得 而可以直接从缓存中取得 从而提高性能 根据机器内存的大小适当设置此值 结果集缓存超时 结果集过期时间 此时间不宜设置过长 以免浪费资源 注 语句缓存容量 结果集缓存容量 结果集缓存超时参数主要针对Oracle数据库来设计的 通过适当的调节Java虚拟机和Apusic的配置文件 可以显著的提升系统的性能 在一些具体的应用中 还能够通过增加实例池 加大Cached 改变并发策略等方法来改善系统的整体性能 开发人员只要经过不断的总结 就可以在Apusic应用服务器上开发出稳定而又高性能的企业应用 lishixinzhi/Article/program/Java/hx/201311/26290
Windows服务器中自带的性能监控工具叫做Performance Monitor;
在开始-运行中输入‘perfmon’,然后回车即可运行。
Monitor本身也是一个进程,运行起来也要占用一定的系统资源。所以你看到的资源的使用量应该比实际的要稍微高一点。这个工具在帮助管理员判断系统性能瓶颈时非常有用;
举个列子来说,今天有个用户抱怨说他们项目组的服务器(这是一台虚拟机)运行起来非常慢,但也不知道具体问题出在什么地方。任务管理器里显示CPU和内存的使用量都不算高,但服务器的相应就是非常慢;
Monitor,让其运行一段时间后(因为参考平均值会比较准确),发现average disk queue的值比较高,这就说明物理服务器的硬盘负荷太重,I/O *** 作的速度跟不上系统的要求。关掉虚拟机,将其转移到另一台硬盘负载比较小的主机上,再打开虚拟机。
分析性能情况
1、内存泄露判断
虚拟内存字节数(VirtualBytes)应该远大于工作集字节数(Workingset),如果两者变化规律相反,比如说工作集增长较快,虚拟内存增长较少,则可能说明出现了内存泄露的情况。
对于Workingset、Private Bytes、Available bytes这些计数器,如果在测试期间内数值持续增长,而且测试停止后位置在高水平,则也说明存在内存泄露。
Windows资源监控中,如果Process\PrivateBytes计数器和Process\WorkingSet计数器的值在长时间内持续升高,同时Memory\Available
bytes计数器的值持续降低,则很可能存在内存泄漏。
2、CPU使用情况
一般平均不要超过70%,最大不要超过90%(好:70% 、坏:85%、 很差:90%)。
3、tps(每秒处理事务的数量,在SOAPUI中进行统计)
一般在10-100,不同应用程序具体值不同。
评论列表(0条)