A "java.lang.StackOverflowError" occurs when you use complex calculated data items in SAS® Customer Intelligence


When you execute campaigns in SAS Customer Intelligence, a java.lang.StackOverflowError might occur.

For example, a stack overflow occurs in the following scenario:

When the stack overflow occurs, the SASCustIntelCore6.6.log file contains errors similar to the following:

2020-07-23 18:04:37,035 DEBUG [CIAsyncExec-80] [a485a250a2418c14:6aab575f:1737c3effea:-48ba] [sasdemo] rm.custdata.datapattern.MAInformationMap - MAIM1:Time to store 255 StoredCalculatedItems: 0.008 seconds (+0 seconds)
2020-07-23 18:04:37,035 DEBUG [CIAsyncExec-80] [a485a250a2418c14:6aab575f:1737c3effea:-48ba] [sasdemo] rm.custdata.datapattern.MAInformationMap - CITEM: time to setupScoreVariables: 0 seconds (+0 seconds)
2020-07-23 18:04:37,036 DEBUG [CIAsyncExec-80] [a485a250a2418c14:6aab575f:1737c3effea:-48ba] [sasdemo] rm.custdata.datapattern.MAInformationMap - Time to tryRemove: 0.001 seconds (+0.001 seconds)
2020-07-23 18:04:37,176 DEBUG [CIAsyncExec-80] [a485a250a2418c14:6aab575f:1737c3effea:-48ba] [sasdemo] s.analytics.crm.task.ejb.TaskManagerBean - Sent paste status "MAPFDPasteDisabled" to SID a485a250a2418c14:6aab575f:1737c3effea:-48ba
2020-07-23 18:04:37,176 ERROR [CIAsyncExec-80] [a485a250a2418c14:6aab575f:1737c3effea:-48ba] [sasdemo] tics.crm.cm.ejb.CampaignManagerProxyImpl - Encountered client exception:null
java.lang.StackOverflowError
at com.sas.iquery.metadata.expr.iqtextparser.NodeLexer.getNextToken(NodeLexer.java:164)
at com.sas.iquery.metadata.expr.iqtextparser.NodeLexer.readToken(NodeLexer.java:258)
at com.sas.iquery.metadata.expr.iqtextparser.TokenizerImpl.next(TokenizerImpl.java:65)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_ResourceName(NodeParserImpl.java:1605)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_Term(NodeParserImpl.java:1512)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_CommentBeforeTerm(NodeParserImpl.java:1464)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_TypeCast(NodeParserImpl.java:1316)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_Exponent(NodeParserImpl.java:1259)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_Unary(NodeParserImpl.java:1244)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_UnaryWithPrecomments(NodeParserImpl.java:1182)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_UnaryWithComments(NodeParserImpl.java:1147)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_MultDivCat(NodeParserImpl.java:1102)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_AddSub(NodeParserImpl.java:1057)
at com.sas.iquery.metadata.expr.iqtextparser.NodeParserImpl.parse_ExpressionPhrase(NodeParserImpl.java:452)

To work around this issue, increase the thread stack-size setting from 256k to 2m by updating the setenv.sh (Linux and UNIX operating environments) or the wrapper.conf file (Microsoft Windows operating environments) in SASServer6. Those files are located in the following directories:

In the appropriate file, update the JVM_OPTS= environment variable, as follows:

JVM_OPTS="-Xmx2048m -Xss2m -Xms1024m

After you update the thread stack-size setting, restart SASServer6 to effect the change.