{"action":"created","issue":{"url":"https://api.github.com/repos/apache/tomcat70/issues/11","repository_url":"https://api.github.com/repos/apache/tomcat70","labels_url":"https://api.github.com/repos/apache/tomcat70/issues/11/labels{/name}","comments_url":"https://api.github.com/repos/apache/tomcat70/issues/11/comments","events_url":"https://api.github.com/repos/apache/tomcat70/issues/11/events","html_url":"https://github.com/apache/tomcat70/pull/11","id":179009493,"number":11,"title":"Using concurrent map to avoid severe lock contention issue","user":{"login":"aoindustries","id":20825951,"avatar_url":"https://avatars.githubusercontent.com/u/20825951?v=3","gravatar_id":"","url":"https://api.github.com/users/aoindustries","html_url":"https://github.com/aoindustries","followers_url":"https://api.github.com/users/aoindustries/followers","following_url":"https://api.github.com/users/aoindustries/following{/other_user}","gists_url":"https://api.github.com/users/aoindustries/gists{/gist_id}","starred_url":"https://api.github.com/users/aoindustries/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aoindustries/subscriptions","organizations_url":"https://api.github.com/users/aoindustries/orgs","repos_url":"https://api.github.com/users/aoindustries/repos","events_url":"https://api.github.com/users/aoindustries/events{/privacy}","received_events_url":"https://api.github.com/users/aoindustries/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2016-09-24T04:10:53Z","updated_at":"2016-09-25T22:01:05Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/apache/tomcat70/pulls/11","html_url":"https://github.com/apache/tomcat70/pull/11","diff_url":"https://github.com/apache/tomcat70/pull/11.diff","patch_url":"https://github.com/apache/tomcat70/pull/11.patch"},"body":"We have an application that makes heavy use of custom JSP tags.  We are experiencing a severe concurrency bottleneck, with the system falling flat above a concurrency of two and never able to drive more than four CPU cores.\r\n\r\nWe have profiled and found that, by far, the bottleneck is lock contention on the annotation cache.  This patch replaces the WeakHashMap with a concurrent weak cache.\r\n\r\nBefore this change, we only operate at 1.43 times throughput going from one core to four.  After this change, we operate at 2.36 times throughput going from one core to four."},"comment":{"url":"https://api.github.com/repos/apache/tomcat70/issues/comments/249449450","html_url":"https://github.com/apache/tomcat70/pull/11#issuecomment-249449450","issue_url":"https://api.github.com/repos/apache/tomcat70/issues/11","id":249449450,"user":{"login":"aoindustries","id":20825951,"avatar_url":"https://avatars.githubusercontent.com/u/20825951?v=3","gravatar_id":"","url":"https://api.github.com/users/aoindustries","html_url":"https://github.com/aoindustries","followers_url":"https://api.github.com/users/aoindustries/followers","following_url":"https://api.github.com/users/aoindustries/following{/other_user}","gists_url":"https://api.github.com/users/aoindustries/gists{/gist_id}","starred_url":"https://api.github.com/users/aoindustries/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aoindustries/subscriptions","organizations_url":"https://api.github.com/users/aoindustries/orgs","repos_url":"https://api.github.com/users/aoindustries/repos","events_url":"https://api.github.com/users/aoindustries/events{/privacy}","received_events_url":"https://api.github.com/users/aoindustries/received_events","type":"User","site_admin":false},"created_at":"2016-09-25T22:01:05Z","updated_at":"2016-09-25T22:01:05Z","body":"Found another concurrency bottleneck in our usage.  TagHandlerPool is a source of lock contention as well as requiring tuning to ensure adequate pool sizes.  We have added a ConcurrentTagHandlerPool that neither causes contention nor requires tuning.\r\n\r\nWe tested one of our heavier pages with a concurrency of 20 on a 4-core/8-thread CPU.  Before this change, we were limited to 31.52 requests/second at around 560% CPU utilization (of 800% possible).  After this change 41.32 requests/second at 780% CPU utilization (system maxed).  We achieved a 31% increase in throughput with about 39% increase in CPU utilization.\r\n"}}
{"actor":{"display_login":"aoindustries"}}