普元EOS之性能调优

来源:互联网 发布:淘宝网店学校 编辑:程序博客网 时间:2024/05/16 08:00

阅读原文

用户在应用系统正式部署之后,需要进行一些性能调优,以满足上线后维持最佳的性能。性能调优主要有下面几个方面:

1、调整JVM的内存设置

Server启动时会启动应用服务器,这是一个JVM虚拟机,其内存大小对系统的运行很重要,必须要设置,不能使用默认值。内存主要分成两部分,非堆内存区和堆内存区,前者是存放类和方法的元数据信息;后者存放类的对象实例。一个应用系统,根据复杂程度的不同,对于使用类的多少和对象的多少,设置相应的内存区的大小,内存区设置小了,可能导致系统内存溢出(OOM)或宕机。

非堆内存使用MaxPermSize来设置,堆内存使用-Xmx来设置,如set JAVA_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError 。-Xms:用来设置最小的堆内存;-Xmx设置最大的堆内存,XX:MaxPermSize设置最大的永久内存。

JVM的内存分为堆内存、非堆内存两部分。堆内存存放生成的对象实例,而非堆内存存放的是类信息、方法信息等。堆内存一般分为3个部分,新生代区(新的类产生放在这个去)、幸存者区(没有夭折的类放在这个区)、养老院区(长寿的类会移到这个区)。一般来说,方法区内存一般难以回收,基本上是逐步增长的,所以要给足够的内存。对内存放生成的对象,这个区是内存回收的主要目标。一般新产生的对象会放在新生代区,对象在使用完后,如果没有其他根对象引用,就会被JVM的GC进程(垃圾回收进程)回收掉,而回收时机是不确定的。一种方式是区的内存快满的时候一次性回收,这个和不同的JVM实现有关。新生代的内存如果存活时间比较长,会被JVM移动到幸存者区,如果更加长寿,会被移到养老院区。GC对这三个区的回收频率和优先级是:新生代区>幸存者区>养老院区。 对内存的大小要根据业务的繁忙程度来设置大小,繁忙的业务要设置较大的内存。

2、调整应用服务器的线程池数量

应用服务器请求HTTP请求的线程数是可以调整的,比如Tomcat 5的HTTP的线程池的最大线程数为200,如果请求的压力大,可以提高这个数值。当然,数值越大,会消耗更大的内存,也应该响应调整最大堆内存的的大小。由于要应用服务器的HTTP请求时主要的负载,所以一般只调整HTTP连接的线程池大小就可以了,其他的JMX、RMI等类似的不需要调整。另外,使用AJP Connector的(一般用于集群环境下的请求连接),或使用HTTPS Connector的,需要修改相关的线程池的参数。

3、数据库连接池的优化

数据库连接池保持一定数量的数据库的长连接。用户程序要访问数据库就会向连接池请求一个连接,而不需要新建一个连接(新建连接速度较慢)。数据库应该给予足够的最大连接数,这个数目建议是HTTP线程数的1/3-1/2。数据库连接池的最小连接数表示连接池保存的最少的连接数,这个数目不需要过大,一般10-20个就够了,过多,在数据库访问不大的时候会占用过多的连接,会影响其他应用对同一数据库的访问连接数。

4、数据库优化

在执行企业级应用的时候,数据库的优化是比较重要的,特别是对于存在海量数据的应用。应该对大量查询的,或数据量大的业务表,按照查询条件设置索引,索引的前提是字段值的重复性不高;重复值高的字段设置索引起不到效果,还会增加索引的开销。设置索引,对于提高查询效率,更新效率,减少表的块锁是非常有帮助的。

5、日志优化

普元产品提供了一些日志的在线配置,其中包含部署日志、系统日志、引擎日志、跟踪日志,对于部署日志,主要显示一些系统启动、应用部署、集群通知的关键点的信息,默认级别为INFO。系统日志和引擎日志建议关掉,系统日志拥有性能调优,而引擎日志拥有定位业务错误。跟踪日志是具体某个模块的调试日志,一般给开发维护人员开的,建议改为ERROR级别的。BPS也有自己单独的日志开关,正常情况下建议将日志开关关闭,如果遇到有异常情况,再打开定位问题。

日志一般是写文件和控制台的,频繁的输出日志对性能的影响很大,所以一般建议将频繁输出的日志,如系统日志、引擎日志、工作流日志关闭。

6、统计监控

普元Platform/BPS产品提供了对程序运行进行实时监控和阶段性统计功能,实时监控可以监控系统的当前的程序调用情况,如调用了什么服务、逻辑流、SpringBean、页面流、SQL、Web服务等,统计功能统计系统启动以来最长时间的50个调用。统计监控对监控系统的正常运行时有用的,但会消耗较大的性能,建议在系统试运行并可以正常运行之后,将统计监控开关关闭,可以提高性能。

7、流程归档

工作流引擎在运行一段时间后,会形成大量的已经完成的流程实例、活动实例和工作项,参与者与任务的关联记录,造成数据库记录较多,相关的数据库表庞大,这样在查询、插入和更新这些记录的时候,对性能影响较大,因此建议在业务空闲时间,对已经完成的参与者任务、流程实例、工作项、活动实例进行归档,即转历史维护,转移到另外的历史表中,使得这些表的记录数大大减少,从而提高数据库的访问性能。

流程归档是在Governor的"BPS引擎配置--转历史维护"里面的功能。

一)参与者任务表是数据最多的一个表,这个表的转历史策略有三个:

1)按流程实例:流程实例结束后,相关参与者的任务转到历史表。

2)按活动实例:活动实例结束后,相关参与者任务转到历史表。

3)按工作项;工作项结束后,相关参与者任务转到历史表。

4)不转移:不转历史表,这个很少用。

二)流程实例转历史,是将已完成的流程实例转到历史表里面。其策略为基于时间触发的,可以增加在某个时间点进行转历史操作,也可以设置多个转历史的时间。

8、增加序列号生成器缓冲池大小

序列号缓冲池是为了业务操作数据库,插入新记录时,用于取主键时从内存中快速获取主键用的。这个数值表示从数据库一次获取多少个号放入内存中,取主键操作一般使用内存操作,不操作数据库,每次加1,当这些号用完后,再从数据库中取新的号码段,将使用过的最大的号写入数据库。所以如果这个数值过小,压力大时会频繁访问数据库;数据库操作频繁,业务压力过大,可以将这个数值放大,建议配置到10000,以减少数据库访问的次数。

9、增加主键数据源

大多数情况下,获取主键使用和应用访问数据库使用同一个数据源,但对于业务频繁的情况,获取主键会比较频繁,获取主键或定期到数据库更新最新的主键号,这样取主键访问数据库和业务操作在同一事务中,在某些数据库,特别是DB2,容易产生表锁现象。为了解决这个问题,可以将获取主键的数据源和业务操作的数据源分离,也提高了性能。

增加主键数据源,在数据源配置功能中,点击"添加主键数据源",填写数据源参数就可以了。主键数据源默认名称为EOS-Unique,不可以修改。

0 0
原创粉丝点击