1 电信资源管理系统性能测试总结
陈建慧
2007-7-30
1.1 技术问题与解决方法
1.1.1 Loadrunner JAVA脚本 唯一参数问题
最初采用JNI 调用delphi的DLL,JAVA脚本中未使用static synchronized关键字时只能2个并发用户就报错
private static native synchronized String getUrl();
static{
// System.loadLibrary("PairConn");
System.loadLibrary("AppServerDll");
}
,加上static synchronized对于复杂DLL在高并发时还是出现错误,在DLL中加共享内存互斥信号量问题依然存在,网上有提到JNI对于多线程支持不是很好,最后放弃JNI接口,采用调用服务器端的EJB来获取参数。
最初DLL用ADO直接从数据库临时表中读参数数据,测试过程中发现读取参数占用大量数据库资源,最后改为将临时表中的数据生成数据文件,DLL和EJB都直接读取数据文件,由于数据文件比较大,读取参数时不能一次性把所有参数数据加载,多线程之间共享文件指针。
1.1.2 Weblogic 部署问题
1.1.2.1 创建domain
创建domain时用产品模式
1.1.2.2 更新包
通过删除 包的cache 然后重启实例彻底更新
停止实例
#!/bin/sh
cd /app/bea/user_projects/domains/rms7002/bin
./stopWebLogic.sh &
删除cache脚本
#!/bin/sh
rm -r /app/bea/user_projects/domains/rms7001/servers/AdminServer
重启实例脚本
#!/bin/sh
cd /app/bea/user_projects/domains/rms7001
rm nohup.out
nohup ./startWebLogic.sh &
查看控制台输出
#!/bin/sh
tail -f /app/bea/user_projects/domains/rms7002/nohup.out
1.1.2.3 java虚拟机配置
-Xms1024m –Xmx1024m 最大不超过2G
永久域太小导致
EJB
无法部署 –XX:MaxPermSize=256m
1.1.2.4 连接池
初始连接和最大连接数都设置成一样,目前设置为80
1.1.2.5 EJB配置
高并的EJB需加大 ,需修改xdoclet的EJB注释
<pool>
<max-beans-in-free-pool>1000</max-beans-in-free-pool>
<initial-beans-in-free-pool>20</initial-beans-in-free-pool>
</pool>
1.1.3 数据库
1.1.3.1 大数据量表分区
按500万条记录分一个区,pair_conn 13个分区、connector表34个分区,分别进行了分区
1.1.3.2 大并发操作表
n 删除无用的索引和所有外键
n 增加表和索引的initrans 参数,connector表改到了24,其它高并发表改到16
n 增加表和索引的FREELIST参数FREELISTS 10
n 所有索引和主键都放入索引表空间
n 所有表和索引都改成NOLOGGING
1.1.3.3 数据导入
1.1.3.3.1 重建用户的脚本
drop user rms cascade;
CREATE USER "RMS" PROFILE "DEFAULT"
IDENTIFIED BY "XXXXX" DEFAULT TABLESPACE "TRMSDATA"
ACCOUNT UNLOCK;
GRANT DELETE ANY TABLE TO "RMS";
GRANT EXECUTE ANY PROCEDURE TO "RMS";
GRANT INSERT ANY TABLE TO "RMS";
GRANT SELECT ANY SEQUENCE TO "RMS";
GRANT SELECT ANY TABLE TO "RMS";
GRANT UNLIMITED TABLESPACE TO "RMS";
GRANT UPDATE ANY TABLE TO "RMS";
GRANT "CONNECT" TO "RMS";
GRANT "DBA" TO "RMS";
1.1.3.3.2 导入数据脚本
imp rms/XXXXX@trmstest file=rmsdb.dmp full=y
commit=y ignore=y buffer=1024000 feedback=100000
1.1.3.3.3 分析表
导入数据后要进行oracle表分析提高性能
大表用单独session 加大sort_area_size提高分析速度
alter session set sort_area_size = 100000000;
alter session set sort_area_retained_size = 100000000;
alter session set sort_multiblock_read_count = 128;
alter session set db_file_multiblock_read_count = 128;
analyze table rms.ATOM_RES_SERV_INS compute statistics;
1.1.4 程序问题
1.1.4.1 EJB注释配置不正确
多数为helper-bean-id 用spring配置文件中的bean-name不相符
1.1.4.2 Hibernate 、JDBC、存贮过程
l 批量操作改成使用存贮过程速度比用JDBC高出近100倍
l Hibernate效率最低,设备增加原来采用Hibernate时weblogic服务器CPU很高
l 数据库连接泄漏,没有按要求使用JDBCTemplete,而是自己写JDBC代码,程序存贮过程调用中大量存在这类问题
1.1.4.3 SQL优化
l Is null 不会使用索引只会做全表扫描
l Where 条件中 结果集小的条件放在后面
l 对于大表子查询的效率高于表连接
l 复杂查询语句用PL/SQL查看执行计划,看是否有利用有效索引,是否存在对大表的全表扫描
1.1.5 操作系统
1.1.5.1 调整oracle9i数据库主机
kctune -h nproc=4096
kctune -h STRMSGSZ=65535
kctune -h dnlc_hash_locks=512
kctune -h ksi_alloc_max=32768
kctune -h max_thread_proc=256
kctune -h maxdsiz=1073741824
kctune -h maxdsiz_64bit=2147483648
kctune -h maxssiz=134217728
kctune -h maxssiz_64bit=1073741824
kctune -h maxswapchunks=16384
kctune -h maxtsiz=0X4000000
kctune -h maxtsiz_64bit=0X40000000
kctune -h maxuprc=3000
kctune -h maxusers=4096
kctune -h msgmap=4098
kctune -h msgmni=4096
kctune -h msgseg=16384
kctune -h msgtql=4096
kctune -h ncallout=8000
kctune -h ncsize=34816
kctune -h nfile=63488
kctune -h nflocks=4096
kctune -h ninode=34816
kctune -h nkthread=7184
kctune -h nstrpty=60
kctune -h semmni=8192
kctune -h semmns=16384
kctune -h semmnu=4092
kctune -h semvmx=32768
kctune -h shmmax=16743656000
kctune -h shmmni=512
kctune -h shmseg=32
kctune -h vps_ceiling=64
1.1.5.2 weblogic9.2主机内核参数
kctune -h max_thread_proc=4096
kctune -h maxusers=2048
kctune -h maxfiles=2048
kctune -h maxuprc=1024
kctune -h maxdsiz=0x40000000
kctune -h maxdsiz_64bit=0x80000000
1.1.5.3 操作系统补丁
未安装操作系统补丁,正式测试过程中用HP工程师提供的HPjconfig发现系统未安装Java 1.5补丁