http://www.mchange.com/projects/c3p0/#other_ds_configuration>
numHelperThreads およびmaxAdministrativeTaskTime DataSourceスレッドプールの動作を構成するのに役立ちます。デフォルトでは、各データソースには3つの関連するヘルパースレッドしかありません。高負荷でパフォーマンスが低下しているように見える場合、またはJMXまたはPooledDataSourceの直接検査で観察した場合、「保留中のタスク」の数が通常ゼロより大きい場合は、numHelperThreadsを増やしてみてください。 maxAdministrativeTaskTime いつまでもハングするタスクや「APPARENTDEADLOCK」メッセージを経験しているユーザーに役立つ場合があります。 (詳細については、付録Aを参照してください。)
maxAdministrativeTaskTime デフォルト:0秒前にc3p0のスレッドプールは明らかにハングしたタスクを中断しようとします。めったに役に立ちません。 c3p0の機能の多くは、クライアントスレッドによって実行されるのではなく、内部スレッドプールによって非同期的に実行されます。 c3p0の非同期性は、クライアントのパフォーマンスを直接向上させ、ロックを保持しないスレッドで低速のjdbc操作が実行されるようにすることで、重要なロックが保持される時間を最小限に抑えます。ただし、これらのタスクの一部が「ハング」した場合、つまり、長期間例外で成功も失敗もしなかった場合、c3p0のスレッドプールが使い果たされ、管理タスクがバックアップされる可能性があります。タスクが単純に遅い場合、問題を解決する最善の方法は、 numHelperThreadsを使用してスレッドの数を増やすことです。 。ただし、タスクが無期限にハングすることがある場合は、このパラメーターを使用して、タスクが設定された制限時間を超えたときに、タスクスレッドのinterrupt()メソッドを強制的に呼び出すことができます。 [c3p0は、「APPARENT DEADLOCK」(ログに警告として表示されます)を通知し、スレッドプールタスクスレッドを置き換え、元のスレッドを割り込み()することで、ハングしたタスクから最終的に回復します。ただし、プールをAPPARENT DEADLOCKに入れてから回復させると、一定期間、c3p0のパフォーマンスが低下することを意味します。したがって、これらのメッセージが表示されている場合は、numHelperThreadsを増やしてmaxAdministrativeTaskTimeを設定すると役立つ場合があります 。 maxAdministrativeTaskTimeは、データベースから接続を取得する、接続をテストする、または2つの接続を破棄するという合理的な試みが、設定された時間内に成功または失敗すると予想されるように、十分に大きくする必要があります。ゼロ(デフォルト)は、タスクが中断されないことを意味します。これは、ほとんどの状況で最良かつ最も安全なポリシーです。タスクが遅い場合は、より多くのスレッドを割り当てます。タスクが永遠にハングしている場合は、その理由を理解してみてください。その間、maxAdministrativeTaskTimeを設定すると役立つ場合があります。
The default is 3 for numHelperThreads , increase this to 8-10
setting maxAdministrativeTaskTime will help