Best Practices for JBoss configuration

This page gives a short overview over some of the settings which can be adjusted to fit your usage. Under each settings you find recommended values for RapidMiner Server installations on your local machine Local on a dedicated server Default and for high load scenarios Big. The following settings are done inside the standalone.xml located in the configuration folder of your RapidMiner Server home directory. You've selected the home directory during the installation process. The home folder's location typically depends on the machine's user with whom you've installed RapidMiner Server (for example C:\Users\TestUser\rapidminer-server\rapidminer-server-home\configuration\standalone.xml).

Database pooling

min-pool-size

The 'min-pool-size' defines the minimum amount of connections that should always be kept open. This reduces the response time but also allocate resources even if RapidMiner Server is not used.

Local 0 Default 5 Big 50

max-pool-size

The 'max-pool-size' defines an upper limit of open database connections. Higher values might require adjustments to the max_connections setting of your database.

Local 20 Default 50 Big 90+

Statement Caching

prepared-statement-cache-size

The number of prepared statements that should be kept in cache. This parameter should only be used in combination with a high min-pool-size value. Setting this value to 100 increases the throughput, but will consume additional RAM for the cache.

Local 0 Default 0 Big 100

share-prepared-statements

Allows to reuse a prepared statement inside a transaction.

Local false Default false Big true

Session Beans

Access Timeout

While not required for normal usage you can increase the 'default-access-timeout' of both stateful and singleton beans to better survive overload peaks.

<stateful default-access-timeout="5000" cache-ref="simple"/>
<singleton default-access-timeout="5000"/>

Local 5000 Default 5000 Big 30000

Pool sizes

Increase the stateless bean pool size to about Number of CPU cores / 8 * 20 on machines with more than 8 logical cores.

<bean-instance-pools>
    <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
    <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
</bean-instance-pools>

Local 20 Default 20 Big Number of CPU cores / 8 * 20

Logging

Reduce the log level

The available log levels are FATAL, ERROR, WARN, INFO, DEBUG and TRACE.

Change the value from INFO to WARN for the console log handler.

<console-handler name="CONSOLE">
    <level name="WARN"/>

Add the log level tag to the server.log handler.

<periodic-rotating-file-handler name="FILE" autoflush="true">
    <level name="WARN"/>

Local INFO Default INFO Big WARN

Disable console logging

Turn off console logging by removing the line <handler name="CONSOLE"/> from the root-logger handlers section to reduce unnecessary I/O operations.

Local enabled Default enabled Big disabled

Deployment scanner

Since the deployment scanner is only needed on startup the scan-interval can be set to an integer value smaller 1.

<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
    <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="0"/>
</subsystem>

Local 0 Default 5000 Big 0

JDBC driver

MS SQL Unicode performance

MS SQL Server offers different data types to store string values: char, varchar, and text. If you want to store unicode data the following types should be used instead: nchar, nvarchar and ntext. By default, the MS SQL JDBC driver will send all string data in the unicode format. This behavior will lead to performance issues if the underlying data type of the MS SQL server is not using an unicode data type as the MS SQL Server needs to convert the corresponding values. If you are not using unicode data types within the RapidMiner Server DB, you should deactivate the unicode format in the JDBC driver by adding the following prefix to the JDBC URL: sendStringParametersAsUnicode=false

<connection-url>jdbc:sqlserver://localhost:1433;databaseName=master;SelectMethod=cursor;sendStringParametersAsUnicode=false</connection-url>

The following SQL Query can be used to identify unicode data columns:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'nchar' OR DATA_TYPE = 'nvarchar' OR DATA_TYPE = 'ntext'