[Neo] neo4j performance testing
Raul Raja Martinez
raulraja at gmail.com
Thu Feb 11 16:32:08 CET 2010
We have seen JMeter test highly impact the result after running 30+ threads,
but it also depends on hardware.
Somebody should come up with a distributed ec2 ami to run jmeter tests
distributed where you just tell it I want to simulate load for 50.000 users
and it creates ec2 instances that are tears down after the tests.
Other thing to keep in mind is that to simulate load on the servlets you
need to add ramp up time and think time for the users and let it warm up for
a few mins if you're trying to measure performance on a warm cache
2010/2/11 Dmitri Livotov <dmitri at livotov.eu>
> Hi Raul,
> we plan to run multiple agents (on a final test) to reduce wrong timing
> effects from jmeter host, thanks for pointing to http client issue.
> Jmeter now has two built-in implementations - standrad and apache
> httpclient based clients, but it seems we'll need to write custom picker
> with siege as well to compare timings.
> I do not think we'll get the same number of agent hosts to run 1 thread
> per agent host, but will probably be running about 5-10 threads per
> agent. Do you think this will be enough or still too high for single
> jmeter host ? Probably, the better idea then will be to rent a required
> number of VPS'es and gen agent per thread environment (not sure,
> however, if this will be a not too expensive solution) ?
> Thanks for sharing your experience,
> Raul Raja Martinez wrote:
> > Hi DMitri, are you running JMeter distributed with many agents?
> > Is the sample data sent to each servlet for each JMeter agent the same?
> > Our experience with JMeter is that when running multiple threads on a
> > machine the numbers don't really give you a close grasp or reality. Also
> > their http client seems slower than other clients like command line
> > 2010/2/11 Dmitri Livotov <dmitri at livotov.eu>
> >> We started initial complex tests and db performs really well at the
> >> moment. Very nice thing that it does not "eat" heap excessively as most
> >> java dataengines.
> >> Here is what the test data and test cases, please correct/append them if
> >> you think that something is not optimal, we'd like to make a complete
> >> real usecase test and share the results, so they could be useful for
> >> anyone else.
> >> 1) Test database
> >> We've imported the entire linux server filesystem structure with
> >> hierarchy relations, relations to file/folder classes (million relations
> >> to single node case), also with copying file/folder attributes into
> >> their nodes. The total size is 3M of nodes, with almost 10 attributes
> >> per every node.
> >> 2) Test environment
> >> neo4j database in put into a web application, initialized in context
> >> listener and then single database instance is requested by all test
> >> servlets. Web application will be deployed to
> >> glassfish v3 app server with a 2G heap allocated with a total of 4G
> >> memory on the physical server (centos 5.2, 64 bit kernel)
> >> There are several test servlets in the web application, each servlet, on
> >> a request, performs the single operation (several low level operations
> >> with the db are grouped) and responds with either 200 code or 500 code
> >> (on any exception) and zero response size.
> >> Test client is a apache jmeter instance, running on another desktop
> >> machine, tied with a 100M link with the server on the same subnet via 1G
> >> switch.
> >> 3) Test cases
> >> servlet 0 - simulates static web page to see how the db load affects the
> >> entire app server. Does almost nothing - makes a random delay from 10 to
> >> 200 ms and finishes.
> >> servlet 1 - performs random node lookup by a primary key, changes 10
> >> node attributes and commits transaction
> >> servlet 2 - performs random node lookup by a primary key, then
> >> traversing the hieararchy until the end of graph (up and down), iterates
> >> it all in an empty loop.
> >> servlet 3 - long running one, requests all nodes (via traverse request
> >> from the top node), iterates them all and randomly adjust
> >> (add/remove/update) single attribute (no more than 100 attributes per
> >> cycle), then commits.
> >> Should we add more tests servlets you think can be useful for high load
> >> testing, maybe also you suggest to change/update the test data, say more
> >> depth levels, more relationships ?
> >> 4) Load factors
> >> servlet 0 is called from 100 parallel threads
> >> servlets 1 and 2 are called from 50 parallel threads (50 for each one,
> >> so 100 threads in total)
> >> servlet 3 is called from a single thread
> >> so we have 201 parallel threads in total.
> >> Thanks,
> >> Dmitri
> >> _______________________________________________
> >> Neo mailing list
> >> User at lists.neo4j.org
> >> https://lists.neo4j.org/mailman/listinfo/user
> Neo mailing list
> User at lists.neo4j.org
More information about the User