Hi all,
I’ve been doing some performance tuning on our OpenSHR reference application based on OpenMRS. I have implemented some simple caching mechanisms to improve performance. Here are some of the results I have seen. I created a basic performance testing tool which posts provide and register transactions at the SHR (https://github.com/jembi/xds-repo-benchmark). Using this tool I got the following results:
Before caching or any performance enhancements
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Target URL: http://localhost:8081/openmrs/ms/xdsrepository
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Max time (s): 30
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Concurrency level: 5
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Agent: none
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Completed requests: 2
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Total errors: 0
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Total time: 30.014284876 s
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Requests per second: 0
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Total time: 30.014284876 s
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO Percentage of the requests served within a certain time
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO 50% 17227 ms
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO 90% 17227 ms
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO 95% 17227 ms
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO 99% 17227 ms
[Thu Mar 05 2015 10:26:49 GMT+0200 (SAST)] INFO 100% 17227 ms (longest request)
After performance enhancement, but with the cache still warming up
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Target URL: http://localhost:8081/openmrs/ms/xdsrepository
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Max time (s): 30
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Concurrency level: 5
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Agent: none
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Completed requests: 29
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Total errors: 0
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Total time: 30.009019514 s
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Requests per second: 1
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Total time: 30.009019514 s
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO Percentage of the requests served within a certain time
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO 50% 1428 ms
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO 90% 22962 ms
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO 95% 25522 ms
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO 99% 26759 ms
[Thu Mar 05 2015 10:29:27 GMT+0200 (SAST)] INFO 100% 26759 ms (longest request)
After performance enhancement, but with and after the cache has warmed up
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Target URL: http://localhost:8081/openmrs/ms/xdsrepository
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Max time (s): 30
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Concurrency level: 5
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Agent: none
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Completed requests: 136
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Total errors: 0
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Total time: 30.010083283 s
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Requests per second: 5
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Total time: 30.010083283 s
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO Percentage of the requests served within a certain time
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO 50% 1142 ms
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO 90% 1453 ms
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO 95% 1549 ms
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO 99% 1688 ms
[Thu Mar 05 2015 10:30:09 GMT+0200 (SAST)] INFO 100% 1775 ms (longest request)
So, in summary we have gone from 17s long requests to under 2s with most requests under 1.5s. With the performance improvements we are able to handle about 5 requests per second on my (fairly quick) laptop. This is still not where we want to be, however it is much better than what we had. This should be good for most smaller implementations.
Let me know if you have any questions about these results.
Cheers,
Ryan
···
Ryan Crichton
Lead Developer, Jembi Health Systems | SOUTH AFRICA
Mobile: +27845829934 | Skype: ryan.graham.crichton
E-mail: ryan@jembi.org