当前位置:
文档之家› Java高性能系统常见的设计与优化-文档资料
Java高性能系统常见的设计与优化-文档资料
Application Server
Oracle RAC
中间层请尽量是stateless方式,而 不是stateful方式,降低session状态 数据的cluster复制
需要熟悉java.util包中的各种数据结 构的适用场景,如HashMap适用于 单记录的快速操作等
避免使用Entity EJB和stateful EJB
Application Server
Oracle RAC Oracle10g/9i
如果需要使用线程池,请使用 JDK1.5的java.util.concurrent包中的 ThreadPoolExecutor
多线程同步也可使用 java.util.concurrent.locks和 java.util.concurrent.atomic中的封装
Oracle10g/9i
©2019 iSoftStone Information Service Corporation. All rights reserved.
6
概述 Java VM 数据库 通信 应用程序
iSoftStone Information Service Corporation
高性能系统典型体系结构
…
Application Client 1
Application Client n
Application Server
Load Balancer Replication or Cluster
Application Server
Oracle RAC
Oracle10g/9i
©2019 iSoftStone Information Service Corporation. All rights reserved.
iSoftStone Information Service Corporation
2019/6/7
应用程序优化一
…
Application Client 1
Application Client n
Application Server
Load Balancer Replication or Cluster
JVM优化
…
Application Client 1
Application Client n
Application Server
Load Balancer Replication or Cluster
Application Server
Oracle RAC
优先使用BEA JRockit,而不是 使用SUN JVM
11
通信设计二
…
Application Client 1
Application Client n
请尽量使用异步通信,可使用 ActiveMQ消息中间件
如果基于Socket开发,请使用异步 I/O,比同步I/O一般快2倍,Apache 即基于异步I/O实现
Application Server
Load Balancer Replication or Cluster
Where in的列表最好不要超过 500个
©2019 iSoftStone Information Service Corporation. All rights reserved.
概述 Java VM 数据库 通信 应用程序
iSoftStone Information Service Corporation
2019/6/7
通信设计一
…
Application Client 1
Application Client n
Application Server
Load Balancer Replication or Cluster
Application Server
使用硬件负载均衡器提高系统的并发 用户数支持(连接复用)
使用JDBC连接池,物理连接建 立对性能影响很大,对于并发很 高的应用,可调高JDBC连接池 的大小,如设为192
尽量降低对数据库的访问次数, 否则性能影响很大
Application Server
9
Load Balancer Replication or Cluster
Application Server
对于统计查询,可考虑使用物化 视图(Materialized Views)
©2019 iSoftStone Information Service Corporation. All rights reserved.
8
数据库访问
…
Application Client 1
Application Client n
数据模型设计应根据性能权衡降 低表连接数量,一般每个SQL中 最好不要超过3个表的连接,否 则性能下降很大
使用DBMS的Partition特性加快 大数据量表的SQL操作性能,详 细信息可参见Oracle Partition部 分文档
根据SQL建立索引,索引列与 SQL中的列要有一定的对应关系, 详细信息可参见Oracle 性能优化 部分文档
使用软件负载均衡器提高系统的并发 用户数支持(连接复用),如 Apache,请参见Tomcat、JBOSS等 Apache的AJP支持部分。单节点 4CPU的应用服务器可支持10,000并 发HTTP用户
Oracle RAC
Oracle10g/9i
©2019 iSoftStone Information Service Corporation. All rights reserved.
3
优化原则
性能基准
内存访问比硬盘I/O访问快 万倍
内存访问比网络I/O访问快 百倍
网络I/O访问比硬盘I/O访问 快百倍
优化原则
首先降低硬盘I/O访问次数,如 硬盘数据库访问
其次降低进程间通信I/O次数, 尤其是远程进程间通信I/O次数, 如JDBC数据库访问
降低CPU和内存等资源的占用
如果使用SUN JVM,使用-server 即Server版的JVM
根据Cache需要,可调整JVM的 Heap Size,如-Xmx2048m,否 则很可能出现Out of Memory异常。 另外,Max Heap Size最好不要超 过物理内存的1/2
其他JVM选项请参见产品手册, 可输入java –help查看具体选项
©2019 iSoftStone Information Service Corporation. All rights reserved.
14
应用程序优化二
…
Application Client 1
Applicatiion Server
Load Balancer Replication or Cluster
2019/6/7
数据库设计
…
Application Client 1
Application Client n
Application Server
Load Balancer Replication or Cluster
Application Server
Oracle RAC Oracle10g/9i
iSoftStone Information Service Corporation
2019/6/7
谢谢
©2019 iSoftStone Information Service Corporation. All rights reserved.
4
概述 Java VM 数据库 通信 应用程序
iSoftStone Information Service Corporation
2019/6/7
Application Server
远程通信可考虑RMI,性能往往比基 于XML较好
如果是基于XML的消息包,请使用个 SAX或StAX接口,请不要使用DOM
Oracle RAC
如果使用SOAP,请使用开源库 XFire,一般来说其性能是Apache Axis的3倍以上,并MyEclipse直接支 持XFire;
Java高性能系统常见设计与优化
嵌入式软件事业部
iSoftStone Information Service Corporation
2019/6/7
概述 Java VM 数据库 通信 应用程序
iSoftStone Information Service Corporation
2019/6/7
Oracle10g/9i
请尽量降低远程进程间通信次数
在降低远程进程间通信次数的同时 降低消息包的大小
©2019 iSoftStone Information Service Corporation. All rights reserved.
12
概述 Java VM 数据库 通信 应用程序
尽量避免分布式事务,而是使用本 地事务
尽量降低负载均衡时节点间的数据 复制
Oracle10g/9i
©2019 iSoftStone Information Service Corporation. All rights reserved.
15
Let’s Innovate Together
谢谢!
对于写操作,尽量使用批量 (batch)写的方式,但每个事务中 的SQL不要超过500;
对于查询请使用预取(PreFetch)
Oracle RAC
使用prepare statement,避免 DBMS对SQL重复的解析与编译
SQL不要太复杂,尤其是连表查
Oracle10g/9i
询的表最好不要超过3个
如果并发的定时调度任务很多,请使 用开源库Quartz,可支持上万个定 时任务