cancel
Showing results for 
Search instead for 
Did you mean: 

Where i could find some performance info about Activiti5

totyumengr
Champ in-the-making
Champ in-the-making
Dear All,
We are ready to use Activiti5 replacing our existing workflow engine,
so i have a question that where i could find some performance information about it.

Our system's expected scale:
10000+ process instances per day
max 100 concurrent processes request per second

Thanks a lot.
11 REPLIES 11

totyumengr
Champ in-the-making
Champ in-the-making
Nobody have similar question?
Who can share some best-practice about it.

jbarrez
Star Contributor
Star Contributor
Besides some informal tests, nothing has been conducted yet.
So feel free to try and share your findings 😉

krassib1
Champ in-the-making
Champ in-the-making
I have the same question as I am currently evaluating a possible use of Activity (with Spring Integration) for my company product services needs. Can someone share any benchmarks? Thanks.

leocode
Champ in-the-making
Champ in-the-making
There are some performance numbers on the following page. But I think these values belong to jBPM3.
http://processdevelopments.blogspot.com/2008/04/awsome-jbpm-performance-numbers.html

I also need performance information about Activiti 5.x. My main question is "Activiti can handle millions of process instances per mount?"

Thanks.

ronald_van_kuij
Champ on-the-rise
Champ on-the-rise
The basic architecture of Activiti is not that different from jBPM 3/4, so tese numbers are still kind of valid. The number of active but dormant (just being in the db) is limited to your db size, millons can be easily achieved. Just make sure you have the correct indeces when doing actual work.

mhw
Champ in-the-making
Champ in-the-making
Hi,

I am interested in the performance, too. Since we have very big workflows to realize, I want to find out if there is a limit of the size of the workflow definitions. I wrote this programm to generate big workflows:
/**
  * @param args
  */
public static void main(String[] args) {
  try {
   // Create file
   FileWriter fstream = new FileWriter("out.txt");
   BufferedWriter out = new BufferedWriter(fstream);
   // Close the output stream

   out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
     + "<definitions id=\"definitions\""
     + " xmlns=\"http://www.omg.org/spec/BPMN/20100524/MODEL\""
     + " xmlns:activiti=\"http://activiti.org/bpmn\""
     + " targetNamespace=\"Examples\">"
     + " \n<process id=\"bigProcessBigFile\""
     + "  name=\"Big process in big file\">"
     + " \n <startEvent id=\"startEvent\" name=\"StartProcess\" />");

   int numOfServiceCalls = 1000;
   for (int i = 1; i < numOfServiceCalls; i++) {

    out.write(" \n <serviceTask id=\"javaServiceDoNothingLotOfTimes"
      + i
      + "\" name=\"Read voltage\""
      + " activiti:class=\"com.bigcompany.wfe.activiti.delegate.ServiceDelegate\">"
      + "\n"
      + " \t<extensionElements> "
      + "\n"
      + " \t\t<activiti:field name=\"serviceName\">"
      + "\n"
      + " \t\t<activiti:string>DO_NOTHING_LOT_OF_TIMES</activiti:string>"
      + "\n" + "\t\t </activiti:field> " + "\n"
      + "\t</extensionElements> " + "\n\n" + "\t</serviceTask>"
      + "\n");
    String sourceRef = "javaServiceDoNothingLotOfTimes" + i;
    String targetRef = "javaServiceDoNothingLotOfTimes" + (i + 1);
    if (i == 1) {
     out.write("\t<sequenceFlow targetRef=\"" + sourceRef
       + "\" sourceRef=\"startEvent\"/>" + "\n");
    }
    if (i == numOfServiceCalls - 1) {
     targetRef = "endEvent";
    }
    out.write("\t<sequenceFlow targetRef=\"" + targetRef
      + "\" sourceRef=\"" + sourceRef + "\"/>" + "\n");

   }

   out.write("<endEvent id=\"endEvent\"/></process></definitions>");

   out.close();
  } catch (Exception e) {// Catch exception if any
   System.err.println("Error: " + e.getMessage());
  }
}
With 1000 nodes I get an java.util.EmptyStackException at org.activiti.engine.impl.context.Context.removeExecutionContext(Context.java:73)
at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:79)

Is there a way to configure the memory consumption of activiti?

Best regards,
Michael

ronald_van_kuij
Champ on-the-rise
Champ on-the-rise
great, but what is your actual test? just looping a service call or having hundreds of service calls after one another without any waitstate is not realistic. It's like doing a while loop in java and adding a single char to a string. You'll get an OOM exception then as well…

mhw
Champ in-the-making
Champ in-the-making
Hi Ronald,

my intention was to test how much nodes are possible. We have indeed workflows here with hundreds of service calls. We want to do mesurements reading values from a bus in automotive area.
One service needs a value from the service called before.
That scenario is not like looping in java. By the way: with 1000 chars you get a OOM? Must be a very old PC  :lol:

What I have to understand is why it is not possible to run more than about 80 service calls one after another. Will continue to investigate….

Best regards,
Michael

ronald_van_kuij
Champ on-the-rise
Champ on-the-rise
It is possible to run more than 80 one after another, but that requires tuning of your vm and or Activiti. If you search the forum about loops and memory, you'll get an impression on how Activiti works, what needs to be kept in memory and why etc.

Turning of history helps, storing only small variables and not huge documents, or store them in a different transaction. Or use async functionality if you do not need rollbacks etc, it all helps.