[infinispan-issues] [JBoss JIRA] (ISPN-3702) Too many threads for cleaning up infinispan transactions

Prasanth Pallamreddy (JIRA) jira-events at lists.jboss.org
Tue Nov 12 18:53:05 EST 2013


Prasanth Pallamreddy created ISPN-3702:
------------------------------------------

             Summary: Too many threads for cleaning up infinispan transactions
                 Key: ISPN-3702
                 URL: https://issues.jboss.org/browse/ISPN-3702
             Project: Infinispan
          Issue Type: Bug
          Components: Distributed Cache, Transactions
    Affects Versions: 5.3.0.Final
         Environment: Mac and Linux
            Reporter: Prasanth Pallamreddy
            Assignee: Mircea Markus


When using multiple transactional caches, we are seeing that each cache has a dedicated cleanup thread. While this is not an issue for small number of caches, when the number of caches is high as in our case (~100), we see around a 100 threads dedicated for cleanup like the following.

"TxCleanupService,{default}_{XXX},user-mac-54275" daemon prio=5 tid=0x00007fa0f50d3800 nid=0x10f03 waiting on condition [0x00000001a5a5d000]
"TxCleanupService,{default}_{XXX},user-mac-54275" daemon prio=5 tid=0x00007fa0f507e800 nid=0x10e03 waiting on condition [0x00000001a595a000]
"TxCleanupService,{default}_{XXX},user-mac-54275" daemon prio=5 tid=0x00007fa0f507e000 nid=0x10d03 waiting on condition [0x00000001a5857000]
"TxCleanupService,{default}_{XXX},user-mac-54275" daemon prio=5 tid=0x00007fa0f5817800 nid=0x10c03 waiting on condition [0x00000001a5754000]
...

Looking at the source code for 
https://github.com/infinispan/infinispan/blob/master/core/src/main/java/org/infinispan/transaction/TransactionTable.java#L126

      if (!totalOrder) {
         // Periodically run a task to cleanup the transaction table from completed transactions.
         ThreadFactory tf = new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
               String address = rpcManager != null ? rpcManager.getTransport().getAddress().toString() : "local";
               Thread th = new Thread(r, "TxCleanupService," + cacheName + "," + address);
               th.setDaemon(true);
               return th;
            }
         };

         executorService = Executors.newSingleThreadScheduledExecutor(tf);


This code can benefit from drawing the threads from a dedicated pool which is bounded. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the infinispan-issues mailing list