Troubleshooting
Problem
Logging simliar to the following example is seen in the tm1server.log file. 12345 [] WARN 2016-08-02 15:18:47.491 TM1.Cube Execution aborted - Evaluation Stack Overflow 8877 [11] ERROR 2016-08-02 15:18:47.507 TM1.Server : Evaluation stack overflow, process terminated : "Cubename" ['Element 1','100','Element B','999','Jan 16','Actual'] This logging is often noticed after a performance issue or crash of the TM1 server has already occurred.
Cause
One possible cause for a stack overflow error message is a loop condition in rules. For example, Cube A may have a rule that reads from a cell in Cube B. If Cube B also has a rule that populates the same cell that is sourced by the rule in Cube A, and the rule in Cube A sources the rule derived cell in Cube B, then a stack overflow error can occur when opening a cubeview that displays the rule derived cell from either Cube A or Cube B.
Resolving The Problem
This problem can be difficult to diagnose. To help understand which cubes, rules, and cells are involved in the loop a Ti process with the following Ti code, in the prolog section of a new Ti process, can be run. Replace Cubename with the actual name of the cube that was named in the stack overflow error message.
DebugUtility( 107, 0, 0, 'Cubename', 'Debug.txt', '' );
DebugUtility( 118, 0, 0, ' ', ' ', ' ' );
After the Ti process is run reproduce the stack overflow error by opening the same cubeview that caused the stack overflow error. The following logging will be written to the tm1server.log file.
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server LOOP START OUTPUT
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server CELL: "Cube A" ['Element 1','100','Element B','999','Jan 16','Actual']
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server RUNS RULE: line:10 [] = N:DB('Cube B','Element 1','100','Element B','999','Jan 16','Actual');
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server --- LOOP ON FOLLOWING CELL ---
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server CELL: "Cube B" ['Element 1','100','Element B','999','Jan 16','Actual']
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server RUNS RULE: line:15 [] = N:DB('Cube A','Element 1','100','Element B','999','Jan 16','Actual');
6424 [18] INFO 2016-08-03 12:42:47.604 TM1.Server LOOP END OUTPUT
The above logging is a very simple example of how similar rules in two cubes could loop. This logging provides an example of a cell in each cube that ran a rule to read a value from the other cube. It's possible that more than two cubes or multiple rules for each cell are involved in a loop.
To correct this problem the only possible solution is to update the rules in one or more cubes so they do not cause a loop when processed.
Was this topic helpful?
Document Information
Modified date:
15 June 2018
UID
swg21988306