Bpmx是一个较大的平台,直接发布的话会有内存问题,经查阅一些资料,java1.5没有解决好之前版本的历史问题,所以在垃圾处理gc上有很多配置需要手动完成,之后的版本同上。
Bpmx平台自带的文档中部分解决了这个问题,在开发平台上运行没有问题。在直接发布到tomcat上的时候,也可由此确定此项目的内存需求,大约在500m到1g之间,class内存在256m,但是经测试,他的配置是有问题的。
接下来直接讨论具体的实施细节。
1、tomcat安装和项目拷贝目录没有变化。注意先配置jdk环境变量。
2、在tomcat安装目录下的bin文件夹,找到catalina.bat,右击鼠标选择编辑。在 @echo off下面插入一行,就是第二行,输入一下内容。
3、输入: set JAVA_OPTS=-server -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:MaxTenuringThreshold=31 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
4、保存退出后,还是在bin文件夹,双击打开startup.bat
5、弹出的命令窗口不要关闭,如果需要关闭服务,在这个命令窗口输入Ctr-C即可。
实施细节就这么些,这个配置将适用于2g以下内存的项目,这些数值需要符合一定的算法,不要随便修改这些参数,可能直接导致服务崩溃。根据需要可以删除-XX:+Print开头的属性项,在访问比较频繁的时候,大量的回显也会影响系统效率。
下面说一说原理方面的。
除回显配置外,其他的主要是两方面,内存设置和垃圾回收设置。根据资料提供的经验,-Xmx和-Xms应该输入相同的值,相应的-Xmn应当是这个值的4分之一,这个设置在绝大多数项目中就是足够的,但是在部署bpmx的时候,会出现OOM异常,消息大致是gc...limit,这个报错如果在百度上搜索是找不到的,基本上和第一条的都是出自一个版本,链接如下:http://blog.csdn.net/kongls08/article/details/8468713。这篇文章写得也很不错,但是只提到了3个报错,都不是关于gc的,所谓gc就是java的垃圾回收,这个报错的原理就是前面所说的,在旧版中sun公司没有预料到动态内存调用会像现在这么流行,从而在没有足够的配置的时候gc会产生一些类似于指针方面的问题。我不知道为什么关于gc的资料会这么少,直接搜索gc配置,又会弹出很多不想关的资料。都说程序员查东西需要谷歌,没办法我就只好上bing.com。都说这个搜索不怎么样,我还是找到了一些东西。先说说平台文档的问题,他建议的配置中-XX:MaxNewSize这种类似的东西,是适用于jdk1.3和jdk1.4的,在1.4以上已经被-Xmn所取代。配置的是新生代内存的最大值和初始值,但是新的配置中已经被并到了一起。持久内存空间-XX:PermSize和-XX:MaxPermSize是比较独立的一部分,如果在访问jsp文件的时候经常出错,就可以把这一对值调大一点。
在另一个站点中,我找到了处理垃圾回收的办法。http://hllvm.group.iteye.com/ group/wiki/2870-JVM。他的内存设得比我们的需求要大的多,但是我们的问题在于tomcat没有把丰富的系统资源利用起来,而不是系统资源不够,调的大一些暂时不会有问题。