<div dir="ltr">You are using direct grant to authenticate a user and obtain a token in the example above. This authenticates and creates a new session for each request. Are you not planning on using web based flow?<div><br></div><div>What do you have password hashing intervals set to? Verifying password is CPU intensive, more than signing tokens.</div><div><br></div><div>It shouldn&#39;t matter that user is stored in RedHat IdM as the user would be cached in Keycloak after first authentication, but it may be an idea to just double check by trying to authenticate to a user in Keycloak and not RH IdM.</div><div><br></div><div>What results are you actually getting?</div><div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 20 May 2016 at 11:27, Vaibhav Naldurgkar <span dir="ltr">&lt;<a href="mailto:vaibhav_naldurgkar@persistent.com" target="_blank">vaibhav_naldurgkar@persistent.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Hi Stian,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">After reading your tests results of 10000 token refreshes in under 60 seconds on your laptop, I am sure I am not following correct configuration and the documents
 are missing for reference. <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Could you please verify the below steps along with the screen-shots for the steps which I am following for the adding client and testing the Load performance
 using Jmeter. Please suggest if any changes are needed in the client configuration. In this case we are obtaining the token for user from KeyCloak.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">In my case the user have been stored on RedHat IdM which has been federated using KeyCloak.  <u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:&quot;Calibri&quot;,sans-serif">Step 1. Create new client called “LoadTest” , use the Client Protocol as “Openid-connect”.<u></u><u></u></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-family:&quot;Calibri&quot;,sans-serif">Used all defaults values post save of the client action.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:&quot;Calibri&quot;,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-family:&quot;Calibri&quot;,sans-serif">Step 2. Start the load tests using Jmeter and using the path as
</span><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">“/auth/realms/master/protocol/openid-connect/token”</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">
</span><span style="font-size:10.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:black">.
</span><span style="font-family:&quot;Calibri&quot;,sans-serif">Used 20 Number of Threads and used Post method.</span><span style="font-size:10.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:black"><u></u><u></u></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:&quot;Segoe UI&quot;,sans-serif;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:&quot;Segoe UI&quot;,sans-serif;color:black"><u></u> <u></u></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:&quot;Segoe UI&quot;,sans-serif;color:black">Below is the screen-shot for the step 1 related to Add Client.</span><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><img width="1307" height="572" src="cid:image001.png@01D1B2A2.4E84D7F0"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif"><u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Below is the screen shot for the load test using Jmeter. In this case the Client ID was used as HelloTest.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><img width="989" height="300" src="cid:image002.png@01D1B2A2.4E84D7F0"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Http requests.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><img width="962" height="299" src="cid:image003.png@01D1B2A2.4E84D7F0"><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Thanks, Vaibhav<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif"> Stian Thorgersen [mailto:<a href="mailto:sthorger@redhat.com" target="_blank">sthorger@redhat.com</a>]
<br>
<b>Sent:</b> Friday, May 20, 2016 1:01 PM</span></p><div><div class="h5"><br>
<b>To:</b> Vaibhav Naldurgkar<br>
<b>Cc:</b> <a href="mailto:keycloak-user@lists.jboss.org" target="_blank">keycloak-user@lists.jboss.org</a><br>
<b>Subject:</b> Re: [keycloak-user] Keycloak OAuth High CPU usage<u></u><u></u></div></div><p></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Can you please elaborate a bit more on how your are testing scenario is? I&#39;m a bit confused to what you are testing when you are talking about generating new tokens. Are you using OIDC or SAML? Are you talking about code-&gt;token exchanges,
 refresh token requests, or what?<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">To test if your hardware is capable to deal with the load you need to test logins (verifying passwords are CPU intensive) as well as obtaining tokens (both code-&gt;token, done after login, and refreshing token, done ~1 min or so by active
 users, but most users won&#39;t continuously use the application).<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">500 users should be no problem at all. As an example with a single thread (which will use a single core) I could invoke 10000 token refreshes in under 60 seconds on my laptop. So a single core on my laptop should be able to handle 500 users.<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On 20 May 2016 at 08:00, Vaibhav Naldurgkar &lt;<a href="mailto:vaibhav_naldurgkar@persistent.com" target="_blank">vaibhav_naldurgkar@persistent.com</a>&gt; wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Hi Stian,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Thank you for your reply.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">The new tokens needs to be generated for each user, which is needed from security point of view. The
 performance tests were also conducted using single Admin user and token for admin user; however in that case the performance was not good. In between 15th to 20th admin token access requests – the CPU usage of keycloak Java process was crossing 90 to 120%
 mark.</span><u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">As you have mentioned, Creating tokes are expected to be a bit CPU intensive – what should be the server
 configuration in terms of CPU to deal with more than 500 users to use keycloak as OAuth provider.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d">Thanks, Vaibhav</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif"> Stian Thorgersen [mailto:<a href="mailto:sthorger@redhat.com" target="_blank">sthorger@redhat.com</a>]
<br>
<b>Sent:</b> Thursday, May 19, 2016 6:28 PM<br>
<b>To:</b> Vaibhav Naldurgkar<br>
<b>Cc:</b> <a href="mailto:keycloak-user@lists.jboss.org" target="_blank">keycloak-user@lists.jboss.org</a><br>
<b>Subject:</b> Re: [keycloak-user] Keycloak OAuth High CPU usage</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">Creating tokes are expected to be a bit CPU intensive as they need to be signed. When you say you try to generate tokens for 10-20 users are you doing performance tests and having
 10-20 threads generating tokens? It shouldn&#39;t make any difference if you have 10 or if you have 200 users, it&#39;s the total number of tokens that can be generated that&#39;s an issue. Having 200 concurrent users with a access token timeout of 60 seconds should mean
 that you need to be able to generate roughly 200/60 tokens = 3.3 tokens/sec.<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On 19 May 2016 at 13:24, Vaibhav Naldurgkar &lt;<a href="mailto:vaibhav_naldurgkar@persistent.com" target="_blank">vaibhav_naldurgkar@persistent.com</a>&gt; wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399">Hi All,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399">I am using Keycloak 1.9.3 with default configuration. Keycloak server is installed on RHEL 6.5 virtual image with 4 CPU , 8 GB RAM and
 java version is jdk1.8.0_73 We are trying to use keycloak as a OAuth provider. But when we try and generate token(<a href="http://auth/realms/master/protocol/openid-connect/token" target="_blank">http:///auth/realms/master/protocol/openid-connect/token</a>)
 for more than 10-20 users the server gets too slow and cpu usage goes over 100%.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399">Any pointers on how to improve performance of keycloak OAuth provider. We need to support at least 200 concurrent users.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#333399">Thanks, Vaibhav</span><u></u><u></u></p>
</div>
<p>DISCLAIMER ========== This e-mail may contain privileged and confidential information which is the property of Persistent Systems Ltd. It is intended only for the use of the individual or entity to which it is addressed. If you are not the intended recipient,
 you are not authorized to read, retain, copy, print, distribute or use this message. If you have received this communication in error, please notify the sender and delete all copies of this message. Persistent Systems Ltd. does not accept any liability for
 virus infected mails. <u></u><u></u></p>
</div>
<p class="MsoNormal"><br>
_______________________________________________<br>
keycloak-user mailing list<br>
<a href="mailto:keycloak-user@lists.jboss.org" target="_blank">keycloak-user@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/keycloak-user" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-user</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<div>
<div>
<p>DISCLAIMER ========== This e-mail may contain privileged and confidential information which is the property of Persistent Systems Ltd. It is intended only for the use of the individual or entity to which it is addressed. If you are not the intended recipient,
 you are not authorized to read, retain, copy, print, distribute or use this message. If you have received this communication in error, please notify the sender and delete all copies of this message. Persistent Systems Ltd. does not accept any liability for
 virus infected mails. <u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</div>
</div></div></div><div><div class="h5">
<p>DISCLAIMER
==========
This e-mail may contain privileged and confidential information which is the property of Persistent Systems Ltd. It is intended only for the use of the individual or entity to which it is addressed. If you are not the intended recipient, you are not authorized to read, retain, copy, print, distribute or use this message. If you have received this communication in error, please notify the sender and delete all copies of this message. Persistent Systems Ltd. does not accept any liability for virus infected mails.
</p>
</div></div></div>

</blockquote></div><br></div>