Glad that seems to have addressed the issue; the fix will be in the 1.13.0 which I'm hoping will be released in the next 2 weeks.
Regarding [3], I did complete the review of any other use of 'synchronized'. In most places the keyword seemed to be unjustified so has been removed, but I don't expect that those removals will cause any appreciable improvements in throughput. -- Dan On 6 June 2016 at 23:53, César Camilo Lugo Marcos <cesar.l...@sisorg.com.mx> wrote: > Dan, > > In our first tests we experienced a very significant improvement. Before > 2 concurrent users significantly decreased response time, while 5 > friezed the server. Now we have ran 100 and 400 concurrent users, and > response time does not get impacted that much. Very significant > improvement, definitely looks like you are heading in the right > direction. Any updates on this will be appreciated as per [3]. > > Cesar. > > On Sat, 2016-06-04 at 11:56 +0100, Dan Haywood wrote: > > A further update re [1]; > > > > I've now pushed a commit [2] which seems to have addressed Cesar's issue > > ... removing a synchronized modifier. > > > > I'm going to do a review of other uses of 'synchronized', to see if they > > are justified or not [3]. > > > > Thx > > Dan > > > > > > [1] https://issues.apache.org/jira/browse/ISIS-1421 > > [2] > > > https://github.com/apache/isis/commit/746176991b523fe9e8ab069392d83ff17af08624 > > [3] https://issues.apache.org/jira/browse/ISIS-1428 > > > > > > > > > > On 3 June 2016 at 13:28, Dan Haywood <d...@haywood-associates.co.uk> > wrote: > > > > > Just as an update on this; I've run Cesar's JMeter tests, and it has > > > revealed an issue in Isis core ... my suspicion being a possible > > > synchronized deadlock. [1] > > > > > > Will investigate with a view to fixing in 1.13.0 > > > > > > Thx > > > Dan > > > > > > > > > [1] https://issues.apache.org/jira/browse/ISIS-1421 > > > > > > On 2 June 2016 at 16:50, César Camilo Lugo Marcos < > > > cesar.l...@sisorg.com.mx> wrote: > > > > > >> Hello. > > >> > > >> We are looking into several recommended topics to tune up the > > >> application. One of them is the use of JDO Optimistic locking instead > > >> of the Datanucleus default pessimistic locking, to improve > concurrency. > > >> I have not found a setting within Datanucleus to change this setting > > >> globally or per transaction, just found this to define the property to > > >> be used as version on the domain object: > > >> > > >> @PersistenceCapable > > >> @Version(strategy=VersionStrategy.VERSION_NUMBER) > > >> public class MyClass > > >> { > > >> ... > > >> } > > >> > > >> Do you know about how to set it globally? > > >> > > >> > > >> On Tue, 2016-05-31 at 18:54 +0000, César Camilo Lugo Marcos wrote: > > >> > Hello Dan. Answers to your questions: > > >> > > > >> > - which version of Isis are you on? > > >> > 1.12.0 > > >> > - how have you implemented the stress test? is it automated, eg > > >> JMeter, or just adhoc manual testing? > > >> > Using JMeter. We recorded a quite simple script with about 6 > read > > >> only operations using th Wicket viewer. All samplers are the recorded > HTTP. > > >> > - is this stress testing the app running locally on Tomcat, or up in > > >> the cloud (on Amazon Elastic Beanstalk)? > > >> > We have it installed in the AWS Elastic Beanstalk with > PostgreSQL. > > >> > We also made a test on a local host with Tomcat and MySQL, > > >> obtaining very similar results. > > >> > > - how much DB traffic does a single request create? Is it all > > >> read-only; or are there also writes? > > >> > Quite low traffic, About 6 read only operations per user. > > >> > - for reads, are you seeing any N+1 issues? if so, have you tried > to > > >> prevent them using DataNucleus eager loading hint (the "fetch groups" > > >> concept)? > > >> > Not sure what N+1 is. We are letting Datanucleous handle all > > >> foreign keys and primary keys. We have not configured any fetch > groups or > > >> any other configurations than defaults. > > >> > - for writes, are they expected? > > >> > Did not understand this question. Please explain. > > >> > - have you configured any of the various addons that could be > writing > > >> to the DB, eg auditing, command or publishing? are these perhaps > enabled > > >> for safe/query-only actions? If so for any looping within the app > itself, > > >> can you eliminate using the QueryResultsCache? > > >> > We are only using the logging add-on, to log login and logout > > >> operations. No auditing, command or publishing add ons. > > >> > - what data volumes is this on? If large volumes of data, are there > > >> perhaps missing indices? What's the performance like with small > volumes of > > >> data? > > >> > No Data Object or table has more that a few tens of records. > > >> > - is this for in-memory HSQLDB or out-of-memory DB (eg Postgres)? > > >> What's the performance like of one versus the other > > >> > This is PostgreSQL. Also tried MySQL with very similar results. > > >> Have not tried in memory HSQLDB. > > >> > > > >> > > > >> > Cesar. > > >> > > > >> > > > >> > On Tue, 2016-05-31 at 18:53 +0100, Dan Haywood wrote: > > >> > > > >> > > > >> > Hi Cesar, > > >> > > > >> > Those action semantics don't play a large part in the transaction > > >> > management; they are mostly used to determine which type of HTTP > method > > >> to > > >> > expose the action under (GET, PUT or POST) and there is also the > > >> constraint > > >> > that contributed/mixin properties/collections can only be supplied > by > > >> SAFE > > >> > actions. The _ARE_YOU_SURE variants only impact the Wicket > viewer. The > > >> > _REQUEST_CACHEABLE is only honoured if the action is invoked via the > > >> > wrapper factory. > > >> > > > >> > As Martin and Jeroen have said, using JProfiler or similar will > likely > > >> > yield valuable info. > > >> > > > >> > If the issue is with database concurrency (which does seem like a > good > > >> > hypothesis), then for the most part that is under the management of > > >> > DataNucleus itself. There are a bunch of configuration properties > that > > >> can > > >> > be specified in persistor_datanucleus.properties (or > isis.properties, > > >> > actually); we strip off any "isis.persistor.datanucleus.impl" > prefix and > > >> > pass the rest of the key down to DN to configure. > > >> > > > >> > Questions for you: > > >> > - which version of Isis are you on? > > >> > - how have you implemented the stress test? is it automated, eg > > >> JMeter, or > > >> > just adhoc manual testing? > > >> > - is this stress testing the app running locally on Tomcat, or up > in the > > >> > cloud (on Amazon Elastic Beanstalk)? > > >> > - how much DB traffic does a single request create? Is it all > > >> read-only; > > >> > or are there also writes? > > >> > - for reads, are you seeing any N+1 issues? if so, have you tried > to > > >> > prevent them using DataNucleus eager loading hint (the "fetch > groups" > > >> > concept)? > > >> > - for writes, are they expected? > > >> > - have you configured any of the various addons that could be > writing to > > >> > the DB, eg auditing, command or publishing? are these perhaps > enabled > > >> for > > >> > safe/query-only actions? If so > > >> > - for any looping within the app itself, can you eliminate using the > > >> > QueryResultsCache? > > >> > - what data volumes is this on? If large volumes of data, are there > > >> > perhaps missing indices? What's the performance like with small > > >> volumes of > > >> > data? > > >> > - is this for in-memory HSQLDB or out-of-memory DB (eg Postgres)? > > >> What's > > >> > the performance like of one versus the other > > >> > > > >> > I think what I would look for is fast response times for a 1-user > system > > >> > running locally on Tomcat, with an inmemory database, and low data > > >> > volumes. From there, ramp up in different ways, but change one > thing > > >> at a > > >> > time. > > >> > > > >> > HTH > > >> > Dan > > >> > > > >> > > > >> > > > >> > On 31 May 2016 at 15:12, César Camilo Lugo Marcos < > > >> cesar.l...@sisorg.com.mx<mailto:cesar.l...@sisorg.com.mx>> > > >> > wrote: > > >> > > > >> > > Thank you both for the hint. I am looking into JProfiler. Still, > > >> > > anything about the concurrency control options? > > >> > > > > >> > > Cesar. > > >> > > > > >> > > On Tue, 2016-05-31 at 11:13 +0200, Jeroen van der Wal wrote: > > >> > > > I agree with Martin that profiling is the only way to go. To > > >> illustrate: > > >> > > we > > >> > > > recently made some code 8 times faster by a few simple code > changes > > >> on > > >> > > > bottlenecks revealed by JProfiler. And those were in places that > > >> we've > > >> > > > never guessed. > > >> > > > > > >> > > > On 31 May 2016 at 08:39, Martin Grigorov <mgrigo...@apache.org > > >> <mailto:mgrigo...@apache.org>> wrote: > > >> > > > > > >> > > > > Hi, > > >> > > > > > > >> > > > > To find out where is the problem you will have to use a > profiler > > >> like > > >> > > > > JProfiler, Yourkit, JVisualVM, etc. > > >> > > > > Even some thread dumps would help to see what is going on. > > >> > > > > > > >> > > > > Martin Grigorov > > >> > > > > Wicket Training and Consulting > > >> > > > > https://twitter.com/mtgrigorov > > >> > > > > > > >> > > > > On Mon, May 30, 2016 at 9:00 PM, César Camilo Lugo Marcos < > > >> > > > > cesar.l...@sisorg.com.mx<mailto:cesar.l...@sisorg.com.mx>> > wrote: > > >> > > > > > > >> > > > > > Hello, > > >> > > > > > > > >> > > > > > I would like to add to this topic the following: > > >> > > > > > > > >> > > > > > Most of the transactions we are testing in these stress > tests > > >> are not > > >> > > > > > bound in ACTIONS, but just plain reads or default > transactions > > >> using > > >> > > > > > Apache ISIS wicket viewer defaults. I don't see any place > where > > >> I > > >> > > could > > >> > > > > > define semantics for default read or write transactions not > > >> bound > > >> > > into > > >> > > > > > ACTION methods. Is there any place I should look into for > that? > > >> > > > > > > > >> > > > > > Cesar. > > >> > > > > > > > >> > > > > > > > >> > > > > > On Mon, 2016-05-30 at 18:45 +0000, César Camilo Lugo Marcos > > >> wrote: > > >> > > > > > > Hello, > > >> > > > > > > > > >> > > > > > > We have sarted performing some stress tests to our Apache > ISIS > > >> > > > > > > application. We have found this behavior: > > >> > > > > > > > > >> > > > > > > - If we run 1 concurrent user, average response times to > the > > >> main > > >> > > > > object > > >> > > > > > > reads through the wicket viewer are from 1 to 1.5 seconds. > > >> > > > > > > - If we run 2 concurrent users, same transactions go to > > >> average > > >> > > > > response > > >> > > > > > > times up to 16 to 27 seconds. > > >> > > > > > > - If we run 10 concurrent users, the transactions start to > > >> slow > > >> > > down > > >> > > > > > > significantly until the app server freezes and we have to > > >> restart > > >> > > it. > > >> > > > > > > > > >> > > > > > > As you can see, this is a very significant increase in > > >> response > > >> > > time > > >> > > > > for > > >> > > > > > > such a slight change in user load (from 1 user to 2 > users). > > >> So we > > >> > > are > > >> > > > > > > guessing we should look into the concurrency control. > > >> > > > > > > > > >> > > > > > > In the documentation I have found that the only way to > > >> influence > > >> > > the > > >> > > > > way > > >> > > > > > > Apache ISIS manages transactions and concurrency checking > is > > >> by > > >> > > using > > >> > > > > > > the semantics configuration of the ACTION annotation. > > >> > > > > > > > > >> > > > > > > semantics=SAFE_AND_REQUEST_CACHEABLE > > >> > > > > > > semantics=SAFE > > >> > > > > > > semantics=IDEMPOTENT > > >> > > > > > > semantics=IDEMPOTENT_ARE_YOU_SURE > > >> > > > > > > semantics=NON_IDEMPOTENT > > >> > > > > > > semantics=NON_IDEMPOTENT_ARE_YOU_SURE > > >> > > > > > > > > >> > > > > > > I just wanted to confirm if this is the place to look > into, > > >> or are > > >> > > > > there > > >> > > > > > > any other places where we should be looking into too, to > > >> solve the > > >> > > > > > > performance issue. > > >> > > > > > > > > >> > > > > > > Cesar. > > >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > >> > > > > >> > > > >> > > > >> > > >> > > > > >