`
阅读更多
1.DB

    首先呢,应该从数据库索引入手,对于程序中经常用到的查询字段而非主键或、外键或者唯一约束字段 应该建立索引,但又频繁查询又频繁更新的字段,就要慎重考虑,查询时间是可以大大缩短,但数据库维护索引的时间大大增加,搞不好变成了拆东墙补西墙.
    这部操作会很大幅度提高系统性能.
    其次,需要增加最大连接数,我们用的MySQL5,默认的最大并发连接数是150,暂时我调整到1000.如果这里不改变,那么你的Jboss连接池再大也没用.
    还有一点需要说一下,mysql默认的6小时内连接没有通信,就会kill掉这个连接,要么在这里调整mysql的最大连接空闲时间,要么就去Jboss那边设置一下每隔一段时间检查连接,这对于一个稳定的系统很重要.
    如果在系统中非必需使用事务的表,可以使用MyISAM的表引擎,对于查询速度来说远远高与InnoDB,或者可以考虑做master-slave的主从架构,读操作在slave中执行,slave中全部使用MyISAM的表引擎,可以加快速度,所有写的操作在master中进行,可以使用InnoDB.
    但是如果要做HA,master-slave的架构就不行了,可以考虑采用MySQL Cluster NDB.

2.Jboss

    因为是单台Jboss,所以没有使用前端负载,在Jboss主要做2部分优化
    (1)Jboss web
    web方面Jboss主要还是采用Tomcat做内嵌,首先要并发肯定是先提高工作线程数,tomcat默认的是200,我们的目标是500,所以就分配了550个工作线程,毕竟Servlet处理请求是每来一个请求分配一个工作线程.
    在相应时间上,可以使用默认的2000ms,也就是20s,因为指标是平均响应时间,当然不排除一些max与min,max值高的时候是多少谁都不好说.
    (2)Jboss ejb
    ejb这边我们既使用了stateless,也使用了stateful.
    首先要调整的肯定是JVM的内存空间,我们使用的是JBoss5,默认的JVM内存空间为-Xms128m -Xmx512m -XX:MaxPermSize=256m,这里我们只调整xms与xmx,MaxPermSize我调整过,但是并发时会发生异常,具体什么原因我找到后在补上,但是这个参数对性能提高不是很明显,起初我调整了最小JVM内存到1024,最大到3036,最大不要超过服务器内存的3/4,剩下的1/4需要留给操作系统使用。
    但是Xms=1024,Xmx=3036这样有个很严重的问题,大家都知道Java有gc机制,但是什么时候gc呢,书上都是说不确定,除非你显示的调用System.gc(),但很少有人会去业务系统里显示的调用gc,在我测试的过程中发现,在系统运行中,Jboss占用的内存一直在往3036m上涨,但到3036m上的时候,系统会突然停顿,因为这时候真正的开始gc了,这个gc线程的优先级很高,其他的线程都要等待它完成才能继续操作,这导致了我的业务瞬时停止了1-2秒左右,如果说在生产系统中,处于高峰期的业务,这样很容易使系统崩溃掉,从网搜寻了相关的解决方法,就是调整Xms与Xms一致,也就是说一开始就给系统分配最大能使用的内存,这样就不会出现系统突然因为jvm的gc出现停顿的问题.
    其次由于使用了ejb,需要调整对象缓存池的大小,jboss默认的stateless与stateful都只有20个,远远不够用,我调整到了1000.
    还有个需要调整的就是Jboss的连接池,Jboss默认的ds只有15个,远远不够,我将其调整为500,可能有点大,但是做到不缺.
    可能还有一些方法可以去掉jboss不用的服务,通过精简jboss结构来做优化,由于以后还要使用集群,所以我没这样去做.

3.Java Code

    基本的优化大家都知道,比如这次我发现开发过程中很多人喜欢使用String.format这个方法,用起来确实很爽,按照参数的位置,填充模板字符串就OK了,但在源代码里我发现了new String(...)这样的操作,效率很低,远不如使用StringBuilder与StringBuffer,请大家慎用.
    还有个地方,我发现大家在使用ejb的时候很喜欢使用@EJB这样的注解,这个操作也很费时间,尽量把需要复用的ejb stb缓存起来,不然如果在stateful这样的ejb中注入一个stateless ejb, 每当有请求来stateful时,都会让Jboss容器来执行一个通过@EJB查找,然后注入的过程,如果是在Servlet中呢,可以使用http session缓存stateful stb, 或者在init方法里边缓存stateless stb,这样性能会提升很多.
   
    当然程序中最费时的莫属I/O操作了,像日志这样的东西,尽量打印关键的,必要的信息,尽量减少日志的输出,如果非实时日志,可以采用日志缓冲输出.

    还要说的一点就是entity bean, 做关联不可怕,可怕的是关联出没必要的数据,非必要的地方还是采用延迟加载,如果有比较大的字段,可以使用属性延迟加载,避免N+1,尽量减少数据库压力.

4.Cache
   
    这里我主要写说下实体的缓存,毕竟操作DB的代价是昂贵的,所以尽量减少与DB的交互,那么就需要使用到对象缓存与查询缓存,定义就不细说了.

    最近我主要对JbossCache与memcached做了一下比较.

    JbossCache 可以利用本地内存进行缓存,中间不通过TCP/IP,JbossCache又叫做TreeCache,结构跟树一样,节点下边挂子节点,JbossCache大力在做事务,可以保证Cache的准确度不被异常影响,但是在集群方面肯定需要去同步,开销可想而知,但对HA要求高的系统来说是必要的.
   
    Memcached 是一个C/S架构的cache, 它的结构类似一个hashtable,官方放建议使用TCP传输,这样就有TCP网络通信的开销,缺点呢,就是不支持事务,如果程序异常,可能需要自己处理cache的清理工作,但是在分布式方面,大多数memcached分布式架构上都才用hash请求的策略,所以减少的同步的开销.

    相比之下,我们采用了JbossCache,将来使用session sticky模式,不去做cache的同步,如果单个节点down掉,负载到其他机器上没有cache,再去数据库中取就可以了,所以没必要做同步.
分享到:
评论

相关推荐

    Java DB 10.8版本 官方技术手册合集(英文版

    Java DB(英文全称data base,数据库)是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用...

    javadb.pdf

    根据提供的文件信息,可以看出这份文档主要与Sun Microsystems公司的一款产品有关,尽管标题提及了“javadb”,但在给出的部分内容中并未直接涉及Java DB的具体细节。不过,考虑到这份文档的背景以及描述中提到的...

    安装javaDB

    JavaDB,也称为Derby,是Oracle公司提供的一款开源、轻量级的关系型数据库管理系统,它是Java平台上的一个重要组成部分,特别适合于嵌入式应用和小型项目。本指南将详细阐述如何安装JavaDB,以及如何进行基本的配置...

    使用 Java DB (Derby) 数据库

    - 输入 JavaDB 根目录 (javadb) 的路径。 - 设置数据库位置,可以使用创建的 Home 目录或者保留默认设置。 - 单击“确定”。 - **启动服务器并创建数据库**: 1. **启动服务器**: - 在“服务”窗口中,右键...

    javadb官方参考资料

    JavaDB,全称为Apache Derby,是一款轻量级的关系型数据库管理系统,由Apache软件基金会开发并维护。它基于Java平台,完全兼容SQL标准,是Java应用程序的理想选择,特别是对于那些需要内嵌式数据库解决方案的开发者...

    javaDB40使用实例,可以直接跑起来的

    1.javaDB4o源代码(JavaDB4o.rar),里面包括了Db40的使用JavaBean和实例(原创)。 2.JavaDB4o.zip这个里面主要是有一个架要导入到1中的源码中,因为这是个外部架,是用来支持DB4o数据库的,所以必须要 3.db4o-8.0-...

    javaDB的数据库的配置安装[归类].pdf

    JavaDB 数据库配置安装详解 JavaDB 是一个基于 Java 的关系数据库管理系统,由 Apache 软件基金会开发和维护。JavaDB 也被称为 Derby,是一个开源的关系数据库管理系统,支持标准的 SQL 语句,能够在 Java 应用程序...

    javadb 连接数据库的JAVA示例.rar_javadb_javadb-2.2.tar

    JavaDB,全称为Apache Derby,是Java平台上的一个开源、免费的关系型数据库管理系统,由Apache软件基金会维护。它轻量级、嵌入式且完全符合SQL标准,是初学者和小型应用程序的理想选择。本示例将详细介绍如何使用...

    JavaDB_Driver

    JavaDB_Driver是一个关键的组件,它主要用于与JavaDB数据库进行交互。JavaDB,也称为Apache Derby,是一款轻量级、开源的关系型数据库管理系统(RDBMS),由Apache软件基金会维护。它完全遵循Java Database ...

    db_driver.rar_Java DB2 Driver_db2java.jar_informix_java database

    本文将深入探讨标题“db_driver.rar_Java DB2 Driver_db2java.jar_informix_java database”所涉及的知识点,包括Java数据库连接(JDBC)驱动、DB2 Java驱动(db2java.jar)、Informix数据库、Oracle数据库以及Java...

    javadb-10_5_3_0.zip_javadb_10_5_3_0.m

    JavaDB,全称为Apache Derby,是Java平台上的一个开源、免费的关系型数据库管理系统(RDBMS),它由Apache软件基金会维护。JavaDB是基于Java语言编写,因此它具有跨平台的特性,可以在任何支持Java的环境中运行。这...

    java操作javaDB数据库程序实例

    两个java程序,一个是以嵌入式访问javadb,一个以网络模式访问javadb。 两个程序均已实际调通并运行成功。 带有编译两个java程序的命令。 这个程序做了大多数数据库应用都可能会做的操作: 在 DBMS 中创建了一个名...

    JAVADB-MYSQL

    JavaDB和MySQL是两种不同的关系型数据库管理系统(RDBMS),在软件开发中,尤其是在Java应用程序中,它们常被用于存储和管理数据。下面将详细解释这两个数据库系统以及它们在MyEclipse集成开发环境中的应用。 Java...

    JavaDB2驱动JavaDB2驱动

    JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动JavaDB2驱动

    Getting Started with Java DB.pdf

    ### Java DB 入门知识点概览 #### 一、Java DB与Derby的关系 Java DB是基于Java编程语言和SQL的一种关系型数据库管理系统。它实际上是由Apache Software Foundation(ASF)开源的关系型数据库项目——Derby发展而...

    Java DB Developers (英文)

    Java DB,全称为Derby,是Oracle公司提供的一款开源、轻量级的关系型数据库管理系统(RDBMS),它是Java平台上的一个嵌入式数据库。它完全由Java编写,因此可以无缝地集成到Java应用程序中,尤其适合于小型到中型的...

    ejb资料 javadb资料

    【ejb资料 javadb资料】 EJB(Enterprise JavaBeans)是Java EE平台中用于构建企业级应用的核心组件,它提供了一种规范化的、面向服务的架构来开发分布式、事务处理和安全的应用。EJB 3.0是其一个重要版本,引入了...

    java db 省市区编码表

    在Java DB中,省市区编码表是一个用于存储中国省级、市级和区县级行政区域编码的数据结构,常用于地理信息系统、地址管理或者与地理位置相关的应用程序。这个表通常包含四个字段:`id`、`areaid`、`area` 和 `...

Global site tag (gtag.js) - Google Analytics