9.2 Increasing the Stack Size for Recursive Workflows

If you have workflows that are recursive in nature (that execute loops), you might see a StackOverflow error at the execution time.

For example, if you have a Provisioning Request Definition with a branch activity, multiple condition activities, and a merge activity, Identity Applications may become unresponsive due to the following reasons:

  • Exceeded stack size limit

    Java does not effectively handle the stack space for recursive type functions. The default value for the stack size in the JVM is 1024K. Therefore, you must increase the stack size for the JVM to 4M depending on the recursive logic defined in the workflow. To increase the stack size, define the new value in the -Xss setting in the JAVA_OPTS entry in your Tomcat start script file (/opt/netiq/idm/apps/tomcat/bin/setenv.sh or C:\NetIQ\idm\apps\tomcat\bin\setenv.bat). For example, to set the stack size to 4M, change the setting to -Xss4M.

    JAVA_OPTS="-server -Xss4M -Xms512M -Xmx512M"
  • Exhausted database connection

    An exhausted database connection can lead to a delayed response from the application when the application is performing database intensive operations such as executing complex workflows and bulk task approvals. In such cases, you must analyze the thread dump to detect if the database communication is degrading your JVM performance. If the delay is caused by the database communication, set the value for the maxTotal property for your database in the server.xml file located at /opt/netiq/idm/apps/tomcat/conf or C:\NetIQ\idm\apps\tomcat\conf to 200. For example:

    <Resource auth="Container" driverClassName="org.postgresql.Driver" factory="com.netiq.tomcat.jdbc.pool.CustomBasicDataSourceFactory" initialSize="10" maxTotal="200" maxIdle="10" minIdle="10" name="shared/IDMUADataSource" password="<passsword>" testOnBorrow="true" type="javax.sql.DataSource" url="jdbc:postgresql://<ip-address>:port/idmuserappdb" username="idmadmin" validationInterval="120000" validationQuery="SELECT 1"/>