EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
学习指南
更新说明
安装与集成
上线指南
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
常见问题
  • 性能调优指南
  • 一、系统关键参数配置
  • 设置操作系统的open files大小
  • 二、jvm关键参数配置
  • 三、数据库关键参数配置
  • 四、应用关键参数配置
  • 1. web容器的线程配置参数
  • 2. 修改日志级别
  • 3. 修改序列号生成器的缓冲池大小
  • 4. 关闭统计监控
  • 五、BPS Server调优方式
  • 1. 修改日志配置
  • 2. 修改BPS引擎配置
  • 六、业务调优

# 性能调优指南

# 一、系统关键参数配置

# 设置操作系统的open files大小

  1. 通过ulimit -a 命令能产看当前系统的open files大小。

  2. 执行vim /etc/security/limits.conf命令在文件中配置以下内容。

  root soft nofile 65536
  root hard nofile 65536
  1. 修改之后注销用户,然后重新登录,配置的open files就能生效。

# 二、jvm关键参数配置

在启动脚本(%InstallPath%/bin/startup.sh)中添加以下配置内容。

    # 配置堆内存、非堆内存大小和SUN JDK 的GC策略,具体根据实际情况调整,以下配置仅供参考
    export EOS_DAP_MEM_OPTS="-Xms512m -Xmx4096m -Xmn256m"
    export JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+UseConcMarkSweepGC"

# 三、数据库关键参数配置

根据场景的实际并发数,设置数据库的连接池最大连接数和最小连接数。

例如,场景中使用的用户并发数为100,所以将数据库初始连接数和最小连接数设置为200,最大连接数设置为300。 注意:数据库服务端的最大连接数需要大于300(比如2000);连接最大等待超时时间也要调大,比如至少一个小时。

修改user-config.xml文件:

      <group name="default">
          <configValue key="Database-Type">MySql</configValue>
          <configValue key="Jdbc-Type"/>
          <configValue key="C3p0-DriverClass">com.mysql.jdbc.Driver</configValue>
          <configValue key="C3p0-Url">jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false</configValue>
          <configValue key="C3p0-UserName">root</configValue>
          <configValue key="C3p0-Password">root</configValue>
          <!-- 初始连接数 -->
          <configValue key="C3p0-PoolSize">200</configValue>
          <!-- 最小连接数 -->
          <configValue key="C3p0-MinPoolSize">200</configValue>
          <!-- 最大连接数 -->
          <configValue key="C3p0-MaxPoolSize">300</configValue>
          <!-- 最大空闲时间,单位秒,0表示连接永不过期 -->
          <configValue key="C3p0-MaxIdleTime">600</configValue>
          <!-- 空闲监测周期,单位秒 -->
          <configValue key="C3p0-IdleConnectionTestPeriod">900</configValue>
          <!-- 辅助线程数,用于执行后台任务(如连接测试、清理、Statement 缓存回收等) -->
          <configValue key="C3p0-NumHelperThreads">5</configValue>
          <!-- PreparedStatement缓存最大语句数,0表示不缓存 -->
          <configValue key="C3p0-MaxStatements">0</configValue>
          <!-- 控制当连接池中没有可用连接时,客户端等待获取连接的最长时间,单位毫秒 -->
          <configValue key="C3p0.checkoutTimeout">3000</configValue>
          <configValue key="Transaction-Isolation">ISOLATION_DEFAULT</configValue>
          <configValue key="Test-Connect-Sql">SELECT count(*) from EOS_UNIQUE_TABLE</configValue>
          <configValue key="Retry-Connect-Count">-1</configValue>
      </group>

# 四、应用关键参数配置

# 1. web容器的线程配置参数

根据场景的实际并发数,设置所需要的处理线程数,一般不超过1000。

修改application.properties文件中web容器相关参数配置:

  # 请求队列大小
  server.app-server.accept-count=1000
  # 最大线程数
  server.app-server.max-threads=500
  # 最小空闲线程数
  server.app-server.min-spare-threads=100
  # 最大并发连接数
  server.app-server.max-connections=500
  # 连接超时时间,单位为ms,压测时按需调整
  server.app-server.connection-timeout=10000
  server.connection-timeout=10000

# 2. 修改日志级别

修改logback-spring.xml文件,调整日志级别,根据项目需要调整具体日志级别,建议在下面三个级别中选择 INFO/WARN/ERROR。

    <property name="EOS_ENGINE_LOG_LEVEL" value="ERROR"/>
    <property name="EOS_TRACE_LOG_LEVEL" value="ERROR"/>
    <property name="EOS_SQL_LOG_LEVEL" value="ERROR"/>
    <property name="EOS_SYS_LOG_LEVEL" value="ERROR"/>
    <property name="EOS_DAP_APP_LOG_LEVEL" value="ERROR"/>
    <property name="EOS_DAP_TRACE_LOG_LEVEL" value="ERROR"/>

# 3. 修改序列号生成器的缓冲池大小

为了不在每次递增序列号的时候都访问数据库,提高性能,序列号生成器从数据库中预定了一定范围的序列号(默认为20)。 当每秒会向数据库中插入大量数据时,需要将序列号生成器的缓冲池大小改大。

修改sys-config.xml文件中PoolSize:

  <group name="PoolSize">
      <configValue key="PoolSize">10000</configValue>
  </group>

# 4. 关闭统计监控

Server的统计监控功能会影响性能,可选择性关闭统计监控功能。

修改user-config.xml文件中各group中key="Status"的值为close:

<module name="Statistic">
        <!--logic flow execution statistics-->
        <group name="Bizflow">
            <!--possible values :openore close, statistics is enabled only when is open-->
            <configValue key="Status">close</configValue>
            <!--the statistics data queue length,range (0,1000],default to 50-->
            <configValue key="Queue-Length">50</configValue>
        </group>
        <!--pageflow execution statistics-->
        <group name="Pageflow">
            <!--open|close-->
            <configValue key="Status">close</configValue>
            <configValue key="Queue-Length">50</configValue>
        </group>
        <!--sql execution statistics-->
        <group name="Sql">
            <!--open|close-->
            <configValue key="Status">close</configValue>
            <configValue key="Queue-Length">50</configValue>
        </group>
        <!--the service call statistics-->
        <group name="Service">
            <!--open|close-->
            <configValue key="Status">close</configValue>
            <configValue key="Queue-Length">50</configValue>
        </group>
        <!--the webService call statistics-->
        <group name="InvokeWebService">
            <!--open|close-->
            <configValue key="Status">close</configValue>
            <configValue key="Queue-Length">50</configValue>
        </group>
        <group name="SpringBean">
            <!--open|close-->
            <configValue key="Status">close</configValue>
            <configValue key="Queue-Length">50</configValue>
        </group>
        <group name="EOSService">
            <!--open|close-->
            <configValue key="Status">close</configValue>
            <configValue key="Queue-Length">50</configValue>
        </group>
    </module>

修改sys-config.xml文件中,Connection/Monitor group中值设置为false:

<module name="Connection">
    <!--
      UnclosedConn[true|false,默认值false]:
      是否统计未关闭的连接;
      StackConn[true|false,默认值false]:
      是否记录连接的调用栈,主要用于分析调用的路径,例如,可以观察那个调用导致长时间的连接未关闭;
      UnclosedStatement[true|false,默认值false]:
      是否统计未关闭的Statement;
      StackStatement[true|false,默认值false]:
      是否记录Statement的调用栈,主要用于分析调用的路径,例如,可以观察那个调用导致长时间的Statement未关闭;
      UnclosedResultSet[true|false,默认值false]:
      是否统计未关闭的ResultSet;
      StackResultSet[true|false,默认值false]:
      是否记录ResultSet的调用栈,主要用于分析调用的路径,例如,可以观察那个调用没有关闭ResultSet;
      IsLogSqlExcTimes[true|false,默认值false]:是否统计SQL的执行次数

      LogSqlWhenTimeout(单位毫秒):
      SQL记录的执行时间阈值,如果超过(>=阈值)阈值则记录SQL语句(记录到系统日志中),否则不记录;
      IsLogActiveConnNum[true|false,默认值false]:
      是否统计当前活动的数据库连接数;
  -->
      <group name="Monitor">
          <configValue key="UnclosedConn">false</configValue>
          <configValue key="StackConn">false</configValue>
          <configValue key="UnclosedStatement">false</configValue>
          <configValue key="StackStatement">false</configValue>
          <configValue key="UnclosedResultSet">false</configValue>
          <configValue key="StackResultSet">false</configValue>
          <!-- deprecated
  		<configValue key="IsLogSqlExcTimes">false</configValue>
  		<configValue key="IsLogSqlTime">false</configValue>
  		 -->
          <configValue key="LogSqlWhenTimeout">-1</configValue>
          <configValue key="IsLogActiveConnNum">false</configValue>
          <configValue key="IsLogSqlExcTimes">false</configValue>
          <configValue key="IsLogSqlTime">false</configValue>
      </group>
  </module>

# 五、BPS Server调优方式

# 1. 修改日志配置

修改logback-spring.xml文件,调整日志级别,根据项目需要调整具体日志级别,建议在下面三个级别中选择 INFO/WARN/ERROR

  <property name="EOS_ENGINE_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_TRACE_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_SQL_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_SYS_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_DAP_APP_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_DAP_TRACE_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_WF_AUDIT_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_WF_SYS_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_WF_MESSAGE_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_WF_REQUEST_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_WF_SOL_LOG_LEVEL" value="ERROR"/>
  <property name="EOS_WF_MON_TX_LOG_LEVEL" value="ERROR"/>

# 2. 修改BPS引擎配置

将BPS运行参数配置中的实例缓存最大节点数和代理缓存最大节点数改大。inst_cache_max_nodes、agent_cache_max_nodes以下为示例

修改/config/BPS-SERVER/config/wfengine-config.xml文件:

    <module name="wfcluster">
      <group name="wfcache">
        <!-- 引擎集群通知开关 -->
          <configValue key="enable">false</configValue>
        <!-- 流程实例缓存的实例数上限 -->
          <configValue key="inst_cache_max_nodes">20000</configValue>
        <!-- 代理关系缓存的实例数上限 -->
          <configValue key="agent_cache_max_nodes">20000</configValue>
            <configValue key="auto_delete_processinst">true</configValue>
        <configValue key="always_persistent_processinst">false</configValue>
        <configValue key="always_persistent_activityinst">false</configValue>
        </group>
    </module>

# 六、业务调优

1.使用数据库索引提升查询性能。比如在IDE中表单设置的多个实体关联,应该在关联字段处增加数据库索引提高性能。

2.后台代码,不要在循环中进行数据库操作,应该将数据库操作放在循环外部。

3.数据库语句中,对于大表(超过百万条记录),不要使用count,distinct,group by,查询所有但不分页之类的sql。

← 安全配置指南 第一个表单 →