Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. If one or more worker nodes in a clustered deployment require access to the management console, you would need to increase the entity expansion limit as follows in the <BPS_HOME>/bin/wso2server.bat file (for Windows) or the <BPS_HOME>/bin/wso2server.sh file (for Linux/Solaris). The default entity expansion limit is 64000.

    Code Block
    languagexml
    -DentityExpansionLimit=100000
    Tip

    Tip: This is not included by default in the wso2server.sh file. You must add this in explicitly.

  2. Memory allocated for the BPS can be increased by modifying <BPS_HOME>/bin/wso2server.bat file (for Windows) or the <BPS_HOME>/bin/wso2server.sh file (for Linux/Solaris). 
    • Default setting for WSO2 ESB 4.6.0 and later is: -Xms256m -Xmx512m -XX:MaxPermSize=256m
    • This can be changed for benchmarking as shown in the following example: -Xms2048m -Xmx2048m -XX:MaxPermSize=1024m (for Java 7) or -Xms2048m -Xmx2048m (for Java 8)

...

Configure an external database server such as MySQL as the persistence storage instead of embedded H2 database. Although slight performance gains can be experienced when using simple BPEL processes with H2 database, it cannot handle multiple concurrent requests and complex processes with the same efficiency. 

JDBC connections

JDBC connections are useful when your application requires high throughput.

...

Configure the BPS datasource by editing the <BPS_HOME>/repository/conf/datasources/bps-datasources.xml file and changing the maxActive value . .

Code Block
languagexml
  <datasources>
        <datasource>
            <name>BPS_DS</name>
            <description></description>
            <jndiConfig>
                <name>bpsds</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://localhost:3306/bpsds</url>
                    <username>root</username>
                    <password>root</password>
                    <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                    <testOnBorrow>true</testOnBorrow>
                    <validationQuery>SELECT 1</validationQuery>
                    <validationInterval>30000</validationInterval>
                    <useDataSourceFactory>false</useDataSourceFactory>
                    <defaultAutoCommit>true</defaultAutoCommit>
                    <maxActive>100</maxActive>
                    <maxIdle>20</maxIdle>
                    <maxWait>10000</maxWait>
                </configuration>
            </definition>
        </datasource>
    </datasources>

 

Activiti Datasource 

Activiti BPMN engine uses Activiti datasource.  

Execution of each BPMN process instance makes multiple database calls. Therefore, when executing multiple process instances by concurrent threads (i.e., users), multiple database connections are used. Accordingly, the database connection pool has to be configured to provide the required number of connections based on the expected maximum concurrent process executions. This can be configured by setting the maxActive parameter of the <BPS_HOME>/repository/conf/datasources/activiti-datasource.xml file. To avoid failures that may occur due to the congestion for db connections, maxActive should be equal to the expected number of concurrent process executions. However, lesser number of connections may be sufficient depending on the properties of executed process models (i.e., number/type of tasks) and the behavior of processes (i.e. presence of timer events, reaction time of process participants). If db connection pool size (i.e. maxActive) has to be reduced, it has to be done based on load tests with actual process models and expected process behaviors.

...

Code Block
languagexml
    <datasources>
        <datasource>
            <name>ACTIVITI_DB</name>
            <description>The datasource used for activiti engine</description>
            <jndiConfig>
                <name>jdbc/ActivitiDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://localhost:3306/activity<activitiDS</url>
                    <username>root</username>
                    <password>root</password>
                    <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                    <maxActive>50</maxActive>
                    <maxWait>60000</maxWait>
                    <testOnBorrow>true</testOnBorrow>
                    <validationQuery>SELECT 1</validationQuery>
                    <validationInterval>30000</validationInterval>
                </configuration>
            </definition>
        </datasource>
    </datasources>

...

Configure this by adding the following to the <BPS_HOME>/repository/conf/bps.xml file if it isn't there already.

Code Block
<tns:odeschedulerthreadpoolsize>50<ODESchedulerThreadPoolSize>50</tns:odeschedulerthreadpoolsize>ODESchedulerThreadPoolSize>

 

Multi-threaded HTTP connection manager

...

Code Block
languagehtml/xml
<tns:WSO2BPSxmlnsWSO2BPS xmlns:tns="http://wso2.org/bps/config">
    ...
    <tns:MultithreadedHttpConnectionManagerConfig>
        <tns:maxConnectionsPerHostvaluemaxConnectionsPerHost value="100"/>
        <tns:maxTotalConnectionsvaluemaxTotalConnections value="200"/>
    </tns:MultithreadedHttpConnectionManagerConfig>
    ...
</tns:WSO2BPS>

...

TimeOuts

This configuration is relevant when partner services take more time to response. When partner services are slow or take more time to response, callee BPEL process's invoke activity fails due to message exchange timeout. By increasing time will avoid these kind of failures. Also note that, slow partner services will slow entire BPEL process. This will cause to timeout the client application. Thus it is required increase timeout interval for client application. To do this, configure the <BPS_HOME>/repository/conf/bps.xml file and the <BPS_HOME>/repository/conf/axis2/axis2.xml file as shown below.

...

Code Block
languagehtml/xml
<tns:ProcessDehydration maxCount="100" value="true"><tns:MaxAgevalueMaxAge value="300000"/></tns:ProcessDehydration>
  • MaxAgevalueMaxAge value: Sets the maximum age of a process before it is dehydrated.
  • ProcessDehydration maxCount: The maximum deployed process count that can exist in memory at a particular time.

In-memory execution

For performance purposes, a process can be defines as being executed only in-memory. This greatly reduces the amount of generated queries and puts far less load on the database. Both persistent and non-persistent processes can cohabit in WSO2 BPS.

...

Code Block
languagehtml/xml
<processname<process name="pns:HelloWorld2"> 
    <in-memory>true</in-memory>
    <provide <providepartnerLinkpartnerLink="helloPartnerLink">
        <service <servicenamename="wns:HelloService" port="HelloPort"/>
    </provide>
</process>

...

Info

Configuration details for these optimizations vary in older BPS versions. Also, these optimizations are supported by Apache ODE, but configuration is different from WSO2 BPS.

BPMN performance tuning

The BPMN runtime frequently accesses the database for persisting and retrieving process instance states. Therefore, performance of BPMN processes depends heavily on the database server. In order to get best performance, it is recommended to have a high speed network connection between BPS instances and the database server.

...