I have created a pull request with this change. https://github.com/apache/tomcat85/pull/9
On 30 August 2017 at 15:57, Venkata Pavan Kumar Sannisetty < sunny...@gmail.com> wrote: > I think we can cache the AuthConfigFactory instance in AuthenticatorBase > (or somewhere else) without having lock. AuthConfigFactory already > caching it but it is taking a lock (take a look at the code below). We can > do the same as below without synchronization. > > public static synchronized AuthConfigFactory getFactory() { > checkPermission(getFactorySecurityPermission); > if (factory != null) { > return factory; > } > > On 29 August 2017 at 23:14, Venkata Pavan Kumar Sannisetty < > sunny...@gmail.com> wrote: > >> I have tried with 8.5.15 still experiencing the same issue. I have seen >> this particular piece of code getting changed from 8.5.11 to 8.5.15. But >> hitting the same issue, >> >> On 29 August 2017 at 23:11, Mark Thomas <ma...@apache.org> wrote: >> >>> On 29/08/17 17:27, Venkata Pavan Kumar Sannisetty wrote: >>> > Hi, >>> > >>> > Our Application is running on Tomcat 8.5.11 with Java Security >>> Manager. We >>> > see a huge difference in performance dip with tomcat when Java security >>> > manager is enabled. The test uses Jmeter and measures the throughput. >>> Using >>> > JVisualVM provided few bottlenecks in our application as well as with >>> > Tomcat. Our application is around 5 times slow. Jvisualvm shows in each >>> > thread the below call is taking around 70 percent of cpu time. I think >>> this >>> > is because the synchronized call made to AuthConfigFactory.getFactory() >>> > method. >>> > >>> > When security manager is enabled tomcat most of the time spends >>> > at AuthenticatorBase.getJaspicProvider() call. Looking at this piece >>> of >>> > code in Tomcat Github >>> > >>> > >>> > private AuthConfigProvider getJaspicProvider() { >>> > AuthConfigProvider provider = jaspicProvider; >>> > if (provider == null) { >>> > provider = findJaspicProvider(); >>> > } >>> > if (provider == NO_PROVIDER_AVAILABLE) { >>> > return null; >>> > } >>> > return provider; >>> > } >>> > >>> > private AuthConfigProvider findJaspicProvider() { >>> > AuthConfigFactory factory = AuthConfigFactory.getFactory() >>> > ;//bottleneck >>> > AuthConfigProvider provider = null; >>> > if (factory != null) { >>> > provider = factory.getConfigProvider("HttpServlet", >>> > jaspicAppContextID, this); >>> > } >>> > if (provider == null) { >>> > provider = NO_PROVIDER_AVAILABLE; >>> > } >>> > jaspicProvider = provider; >>> > return provider; >>> > } >>> > >>> > The jaspicProvider variable is an instance variable i am assuming may >>> be it >>> > is getting created in each and every request (just my assumption). >>> > >>> > Is it possible cache the AuthConfigFactory instance in the code >>> > findJaspicProvider to improve the performance of tomcat with java >>> security >>> > manager. >>> > >>> > Please let me know your inputs. >>> >>> And if you test with a more recent version than 8.5.11 ? >>> >>> Mark >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>> For additional commands, e-mail: users-h...@tomcat.apache.org >>> >>> >> >