[Neo] neo4j performance testing
dmitri at livotov.eu
Thu Feb 11 16:25:12 CET 2010
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 single
> 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 "siege".
> 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
>> 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.
>> Neo mailing list
>> User at lists.neo4j.org
More information about the User