最近对ADF项目进行了一次压力测试,发现频繁的对PS_TXN表进行读写操作,消耗了很大的性能。经过查询官方资料,AM的钝化可以不存入数据库,而是磁盘目录下。
具体办法:
1.在linux服务器 建出目录:/home/oracle/ADFAMCache/
2.修改bc4j.xcfg文件 在<AppModuleConfig>标签下增加属性
jbo.passivationstore="file"
jbo.tmpdir="/home/oracle/ADFAMCache/"
补充:对AM的钝化机制不是很清楚,在反复压力测试过程中:
1.目录ADFAMCache下会生产很多的文件,每个文件应该就是一个AM实例的钝化内容,大小在几K 到几十K不等,同时ps_txn表一直空着,也不会有任何操作。
2.ADF架构应该会清理ADFAMCache文件,并不是一味的增长,但不知是什么原因(或是改设置哪里),文件总不能完全清除,及时隔一天时间不做任何操作文件也存在,为了不让磁盘写满,做了个linux脚本,定时清理改目录下的文件。具体写法如下——
2.1写一个sh脚本,起名/home/oracle/delADFAMCache.sh。
#!/bin/bash
FILE_PATH="/home/oracle/ADFAMCache/"
SIZE=$(du -sb $FILE_PATH | cut -f1)
# 10GB = 10737418240 bytes
if [ $SIZE -gt 10737418240 ]; then
echo 'Condition returned True'
find $FILE_PATH/* -daystart -mmin +300 -exec rm -rf {} \;
fi
意思是 当该文件达到10G的时候,删除5个小时前创建的文件
2.2打开/etc/crontab文件 增加如下语句——
05 * * * * root /bin/bash /home/oracle/delADFAMCache.sh
意思是每小时执行一次
可以通过以下命令查看目录下文件个数,以确定设置是否生效
cd /home/oracle/ADFAMCache/
ls -l |grep "^-"|wc -l