I've been dabbling with the ODL REST API to create and delete flows to an OpenFlow controlled switch. The script is in Python (not that it matters). I've started the Lithium distribution, turned up the dlux and openflow plugin features, pointed my switch at the running ODL instance and started running the script against it. The script creates then deletes just under 2500 flows and is repeatedly executed. I was seeing what sort of flow rates I could get this way. Letting this run for a while (~30 minutes), I see the VM memory use countinously climb and eventually flow creation/deletions rates fall off dramatically and eventually Java exceptions begin to fire (and the one in particular that I see often is "GC overhead limit exceeded"). The CPU use goes up dramatically too. I suspect garbage collection is going crazy trying to tidy up some space as the VM memory fills and eventually the wheels come off.
I have confirmed that a single run of the script correctly creates and deletes all flows from the underlying switch. Perhaps there are some left-overs in the ODL framework that need tidying. I'm doing everything via REST right now. I'd like to see what's going on but am new to this whole ODL/Java world. Any idea how I'd find out what's holding on to this memory? Has anyone else noticed this behavior?
I'm creating and deleting using the ...restconf/config/opendaylight-inventory:nodes/node/nodeid/table/tableid/flow/flowid URL (PUTs to create with an XML payload detailing the flow and DELETEs to, as you'd expect, delete).