欢迎来到天天文库
浏览记录
ID:9881561
大小:2.66 MB
页数:16页
时间:2018-05-11
《java高性能系统常见设计与优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java高性能系统常见设计与优化世讯环宇研发部9/6/2021CPECInformationServiceCorporation概述JavaVM应用程序通信数据库9/6/2021CPECInformationServiceCorporation高性能系统典型体系结构3©2008cpecInformationServiceCorporation.Allrightsreserved.优化原则内存访问比硬盘I/O访问快万倍内存访问比网络I/O访问快百倍网络I/O访问比硬盘I/O访问快百倍性能基准首先降低硬盘I/O
2、访问次数,如硬盘数据库访问其次降低进程间通信I/O次数,尤其是远程进程间通信I/O次数,如JDBC数据库访问降低CPU和内存等资源的占用优化原则4©2008cpecInformationServiceCorporation.Allrightsreserved.概述JavaVM应用程序通信数据库9/6/2021CPECInformationServiceCorporationJVM优化优先使用BEAJRockit,而不是使用SUNJVM如果使用SUNJVM,使用-server即Server版的JVM根据Cac
3、he需要,可调整JVM的HeapSize,如-Xmx2048m,否则很可能出现OutofMemory异常。另外,MaxHeapSize最好不要超过物理内存的1/2其他JVM选项请参见产品手册,可输入java–help查看具体选项6©2008cpecInformationServiceCorporation.Allrightsreserved.概述JavaVM应用程序通信数据库9/6/2021CPECInformationServiceCorporation数据库设计数据模型设计应根据性能权衡降低表连接数量,
4、一般每个SQL中最好不要超过3个表的连接,否则性能下降很大使用DBMS的Partition特性加快大数据量表的SQL操作性能,详细信息可参见OraclePartition部分文档根据SQL建立索引,索引列与SQL中的列要有一定的对应关系,详细信息可参见Oracle性能优化部分文档对于统计查询,可考虑使用物化视图(MaterializedViews)8©2008cpecInformationServiceCorporation.Allrightsreserved.数据库访问使用JDBC连接池,物理连接建立对性
5、能影响很大,对于并发很高的应用,可调高JDBC连接池的大小,如设为192尽量降低对数据库的访问次数,否则性能影响很大对于写操作,尽量使用批量(batch)写的方式,但每个事务中的SQL不要超过500;对于查询请使用预取(PreFetch)使用preparestatement,避免DBMS对SQL重复的解析与编译SQL不要太复杂,尤其是连表查询的表最好不要超过3个Wherein的列表最好不要超过500个9©2008cpecInformationServiceCorporation.Allrightsreser
6、ved.概述JavaVM应用程序通信数据库9/6/2021CPECInformationServiceCorporation通信设计一使用硬件负载均衡器提高系统的并发用户数支持(连接复用)使用软件负载均衡器提高系统的并发用户数支持(连接复用),如Apache,请参见Tomcat、JBOSS等Apache的AJP支持部分。单节点4CPU的应用服务器可支持10,000并发HTTP用户11©2008cpecInformationServiceCorporation.Allrightsreserved.通信设计二请
7、尽量使用异步通信,可使用ActiveMQ消息中间件如果基于Socket开发,请使用异步I/O,比同步I/O一般快2倍,Apache即基于异步I/O实现远程通信可考虑RMI,性能往往比基于XML较好如果是基于XML的消息包,请使用个SAX或StAX接口,请不要使用DOM如果使用SOAP,请使用开源库XFire,一般来说其性能是ApacheAxis的3倍以上,并MyEclipse直接支持XFire;请尽量降低远程进程间通信次数在降低远程进程间通信次数的同时降低消息包的大小12©2008cpecInformati
8、onServiceCorporation.Allrightsreserved.概述JavaVM应用程序通信数据库9/6/2021CPECInformationServiceCorporation应用程序优化一如果需要使用线程池,请使用JDK1.5的java.util.concurrent包中的ThreadPoolExecutor多线程同步也可使用java.util.concurrent.locks和java.ut
此文档下载收益归作者所有