When tuning the server thread pool, it is best to size the system based on expected user load, setting the minimum number of threads to between 75% and 100% of the number of requests you expect the system to handle most often. Set the maximum to between 25% and 50% higher than the minimum to handle load spikes. Testing has shown that PingFederate performs quite well when the server thread pool is sized between 25 and 50 server threads per available CPU core, assuming sufficient memory (see Memory). Note that this is guidance and should not necessarily be scaled directly on larger systems. For example, if you are running PingFederate on a system with 24 CPU cores, it does not make sense to size the thread pool at a minimum of 600 threads and a maximum of 1200 unless you expect to normally handle at least 800 concurrent requests

  1. Stop PingFederate.
  2. Edit the <pf_install>/pingfederate/etc/jetty-runtime.xml file.
    Consider making a backup copy of this file.
  3. Find the following section:
    <Get name="ThreadPool">
        <Set name="minThreads" type="int">10</Set>
        <Set name="maxThreads" type="int">200</Set>
        <Set name="detailedDump">false</Set>
    </Get>
  4. Modify it using the following guidelines:
    • Set minThreads to (available CPU cores * 25)
    • Set maxThreads to (available CPU cores * 50)

    For example, if your PingFederate system has 1 CPU with 4 cores, the total available cores is 4. The configuration would be:

    <Get name="ThreadPool">
        <Set name="minThreads" type="int">100</Set>
        <Set name="maxThreads" type="int">200</Set>
        <Set name="detailedDump">false</Set>
    </Get>
  5. When finished, save your changes and restart PingFederate.
  6. For a clustered PingFederate environment, repeat these steps on each engine node as needed.