]
RH Bugzilla Integration updated ISPN-3702:
------------------------------------------
Bugzilla References:
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: Core, Transactions
Affects Versions: 5.3.0.Final
Environment: Mac and Linux
Reporter: Prasanth Pallamreddy
Assignee: Pedro Ruivo
Fix For: 9.0.0.Alpha2, 8.2.2.Final
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/o...
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.