Thanks Rajesh, that's immensley valuable information. Part of the problem I'm currently facing is that about 50% of the time, one of the threads will crash, leaving a run incomplete.
I currently do 4 parallel runs on a 4-core server, so I'll reduce that to 3 as that may be causing the instability. I already follow that with a single-thread rerun, and am working on rerunning any failures from that in isolation.
I'll take a look at doing the separate selenium nodes on Xvnc. I suspect the method for that will be to add the selenium command to the ~/.vnc/xstartup file, and changing the port number before each vncserver command.