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
>>
>>
>

Reply via email to