Customer Portal

Clover exceeding Java max memory using

Comments 8

  • Avatar
    avackova
    0
    Comment actions Permalink
    Hello Ken,
    you probably have components, that requires a lot of memory. There is only few general advices how to decrease memory requirements. First of all try to not use external jars in jdbc, jms connections - rather add them to the classpath when running graph. Also some components are memory gluttons and often can be replaced by others, that don't require so much memory (e.g. HashJoin vs. MergeJoin). Some components can be adjusted by proper attributes values (see eg. ExtSort vs. FastSort – which one is better for me?). But, when you suspect a graph to require too much memory, it requires an analysis for this concrete graph.
  • Avatar
    ken9iron
    0
    Comment actions Permalink
    Based on the log output attached, is there anything that sticks out that is eating up all the memory?
  • Avatar
    avackova
    0
    Comment actions Permalink
    Can attach the log again? No attachment is visible in the post.
  • Avatar
    ken9iron
    0
    Comment actions Permalink
    Clover logs attached, including vmstat logs showing memory utilization.
  • Avatar
    avackova
    0
    Comment actions Permalink
    Hello Ken,
    the main problem in your graph is with huge amount of buffered edges. Each buffered edge allocates two buffers of Record.MAX_RECORD_SIZE * 10 size, and Record.MAX_RECORD_SIZE is 12kb (in CloverETL 2.9, in. 3.1 it is 64kb by default). Each direct edge allocates two buffers of Record.MAX_RECORD_SIZE * 4 size. So I would advice to use rather direct edges, than buffered and decrease the Record.MAX_RECORD_SIZE in default properties file (see Changing Default CloverETL Settings).
  • Avatar
    ken9iron
    0
    Comment actions Permalink
    Thanks Agata. Would using direct edges change the functionality of the graph in any way compared to the buffered edges? i.e. Does it affect grouping and sorting, etc?

    --Ken
  • Avatar
    avackova
    0
    Comment actions Permalink
    Hello Ken,
    you can even use directFastPropagate edges, that allocates buffers for one record only. If the buffered edge is required, CloverETL uses it independently what type is set by user.
  • Avatar
    ken9iron
    0
    Comment actions Permalink
    Thanks for your help, Agata.

    --Ken

Please sign in to leave a comment.