[jbossts-issues] [JBoss JIRA] Commented: (JBTM-688) TransactionReaper synchronization is a performance bottleneck
Jonathan Halliday (JIRA)
jira-events at lists.jboss.org
Tue Jan 19 10:41:47 EST 2010
[ https://jira.jboss.org/jira/browse/JBTM-688?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12506973#action_12506973 ]
Jonathan Halliday commented on JBTM-688:
----------------------------------------
It's already addressed in trunk. We don't currently plan to backport the enhancements.
> TransactionReaper synchronization is a performance bottleneck
> -------------------------------------------------------------
>
> Key: JBTM-688
> URL: https://jira.jboss.org/jira/browse/JBTM-688
> Project: JBoss Transaction Manager
> Issue Type: Patch
> Security Level: Public(Everyone can see)
> Components: JTS
> Affects Versions: 4.6.1.CP04
> Environment: Linux 32-bit, Sun JDK 6
> Reporter: Oleg Nitz
> Assignee: Andrew Dinn
>
> During stress testing I found that threads often massively block on synchronization on TransactionReaper.class, due to synchronized static methods create() and transactionReaper() in the TransactionReaper class.
> I propose to use "double-checked locking idiom" (see http://en.wikipedia.org/wiki/Double-checked_locking ) to avoid unnecesary synchronizations.
> My patch follows.
> --- TransactionReaper.java.orig 2010-01-04 16:27:21.000000000 +0200
> +++ TransactionReaper.java 2010-01-11 17:19:55.000000000 +0200
> @@ -1059,7 +1059,7 @@
> * Could get priority from environment.
> */
>
> - public static synchronized TransactionReaper create(long checkPeriod)
> + public static TransactionReaper create(long checkPeriod)
> {
> if (tsLogger.arjLogger.debugAllowed())
> {
> @@ -1070,6 +1070,10 @@
>
> if (TransactionReaper._theReaper == null)
> {
> + synchronized (TransactionReaper.class) {
> + if (TransactionReaper._theReaper == null)
> + {
> +
> // default to dynamic mode
> TransactionReaper._dynamic = true;
>
> @@ -1215,6 +1219,8 @@
>
> _reaperWorkerThread.start();
> }
> + }
> + }
>
> return TransactionReaper._theReaper;
> }
> @@ -1233,7 +1239,7 @@
> * If parameter is true then do a create.
> */
>
> - public static synchronized TransactionReaper transactionReaper(
> + public static TransactionReaper transactionReaper(
> boolean createReaper)
> {
> if (createReaper)
> @@ -1315,7 +1321,7 @@
> */
> private int _zombieMax = 0;
>
> - private static TransactionReaper _theReaper = null;
> + private static volatile TransactionReaper _theReaper = null;
>
> private static ReaperThread _reaperThread = null;
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jbossts-issues
mailing list