JAVA性能测试与调优案例

Tomcat性能监控与优化
1> 内存使用调整(Out of Memery问题)
set JAVA_OPTS='-Xms256m -Xmx512m'
2> 连接线程数调整(cannot connect to server问题)
优化tomcat配置:maxThreads="500" minSpareThreads="400" maxSpareThreads="450"。
maxThreads 默认200
acceptCount – 最大排队数

maxThreads如何配置
一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。

现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以maxThreads的配置并没有一个最优值,一定要根据具体情况来配置。
最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。
acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝
如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。


Tomcat Native library
所谓的Apache Tomcat Native library其实叫APR,全称为:Apache Portable Runtime and Tomcat。可以通过下面地址访问:http://tomcat.apache.org/tomcat-5.5-doc/apr.html

Apache Tomcat Native library是Apache 为了提升 Tomcat 的性能搞的一套本地化 Socket, Thread, IO 组件也就是说它有高级 IO 功能, 操作系统级别的功能调用, 以及本地进程处理等等, 这些都能使 Tomcat 更像一个 Web Server(像Apache那样), 而不是只能用来解释JSP, 也就是说提升单独的 Tomcat 作为服务器的吞吐性能.


Connector
四种Connector按照顺序命名为 NIO, HTTP, POOL, NIOP
NIO 是性能最好的, 由APR提供
作为开源web服务器的java实现,tomcat几乎就是web开发者开发、测试的首选,有很多其他商业服务器的开发者也会优先选择tomcat作为开发时候使用,而在部署的时候,把应用发布在商业服务器上。也有许多商业应用部署在tomcat上,tomcat承载着其核心的应用。但是很多开发者很迷惑,为什么在自己的应用里使用tomcat作为平台的时候,而并发用户超过一定数量,服务器就变的非常繁忙,而且很快就出现了connection refuse的错误。但是很多商业应用部署在tomcat上运行却安然无恙。
其中有个很大的原因就是,配置良好的tomcat都会使用APR(Apache Portable Runtime),APR是Apache HTTP Server2.x的核心,它是高度可移植的本地库,它使用高性能的UXIN I/O操作,低性能的java io操作,但是APR对很多Java开发者而言可能稍稍有点难度,在很多OS平台上,你可能需要重新编译APR。但是从Tomcat6.0以后, Java开发者很容易就可以是用NIO的技术来提升tomcat的并发处理能力。
使用NIO连接器,只需要在server.xml里把 HTTP Connector做如下更改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />

AJP连接器
由于tomcat的html和图片解析功能相对其他服务器如apche等较弱,所以,一般都是集成起来使用,只有jsp和servlet服务交由tomcat处理,而tomcat和其他服务器的集成,就是通过ajp协议来完成的。


oracle性能监控、诊断分析与调优
监控方法
方法1:在LR的Controller中配置监视Oracle
方法2:使用SiteScope
方法3:使用Oracle企业管理器查看数据库性能

控制Session的时间
Tomcat默认设置为30分钟

Old区用于存放长寿的对象,在New区中经历了N次垃圾回收后仍然存活的对象,就会被放到Old区中;如那些与业务信息相关的对象,包括Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。当任何一个空间不够用时,都会促使JVM执行垃圾回收,而垃圾回收也需要消耗一定的时间,从而造成应用程序卡住;因此,合理的设置各个区的大小,可以进行快速GC即Mimor GC,避免频繁的Full GC。

JVM启动参数介绍
-Xmx
-Xms

JVM性能瓶颈
在HashMap中放置大量不用的数据,而没有及时的清理。

Demo
1>  LeakExample  有些static集合中的数据没有被释放掉
2>  用web的方式演示了static集合的问题
3>  死锁演示 通过Thread图能看到死锁的问题

你可能感兴趣的:(java性能)