Hi, Thanks for the detailed explanation.
On Tue, Nov 8, 2016 at 11:23 AM, Kishanthan Thangarajah <[email protected] > wrote: > DepSynch update/commit on manager node is designed to run with deployment > scheduler task. So on every run, we check whether any changes to the local > repo and then commit those to remote. The above trace is for doing a svn > status check and find whether there are any local file changes > (modification, addition etc) before deciding on executing the svn commit > command. > > The above can run only on a manager / read-write node. What's the impact > with performance? Are we seeing any bottleneck with this task running or is > the resource consumption? > There is an impact on performance as the dep sync task utilizes the CPU most of the time. We noticed the performance issue in a 2 CPU machine. Since the dep sync task is running every 15 seconds, there is not much CPU time for other threads. > > On Mon, Nov 7, 2016 at 1:35 PM, Isuru Perera <[email protected]> wrote: > >> Hi, >> >> When analyzing a performance issue using Java Flight Recorder, I noticed >> that the server is running Deployment Synchronizer task most of the time. >> >> Please see the stack trace below. >> >> >> Stack Trace Sample Count Percentage(%) >> java.util.Stack.peek() 20 1.661 >> >> org.tmatesoft.sqljet.core.internal.table.SqlJetBtreeTable.getCurrentState() >> 20 1.661 >> org.tmatesoft.sqljet.core.internal.table.SqlJetBtreeTable.getCursor() >> 19 1.578 >> org.tmatesoft.sqljet.core.internal.table.SqlJetBtreeTable.hasMoved() >> 11 0.914 >> org.tmatesoft.sqljet.core.internal.table.SqlJetBtreeTable.eof() >> 10 0.831 >> >> org.tmatesoft.sqljet.core.internal.table.SqlJetBtreeTable.getRecord() >> 8 0.664 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetBtreeTable.getValueMem(int) 6 0.498 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetBtreeDataTable.getValueMem(int) 6 0.498 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetBtreeTable.getValueUncached(int) 6 0.498 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetBtreeTable.getValue(int) 6 0.498 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetBtreeDataTable.getValue(int) 6 0.498 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetBtreeTable.getValues() 6 0.498 >> org.tmatesoft.sqljet.core.inte >> rnal.table.SqlJetTableDataCursor$16.run(SqlJetDb) 6 0.498 >> org.tmatesoft.sqljet.core.tabl >> e.SqlJetDb$3.run(SqlJetEngine) 6 0.498 >> org.tmatesoft.sqljet.core.tabl >> e.engine.SqlJetEngine$12.runSynchronized(SqlJetEngine) 6 0.498 >> >> org.tmatesoft.sqljet.core.table.engine.SqlJetEngine.runSynch >> ronized(ISqlJetEngineSynchronized) 6 0.498 >> >> org.tmatesoft.sqljet.core.table.engine.SqlJetEngine.runEngin >> eTransaction(ISqlJetEngineTransaction, SqlJetTransactionMode) 6 >> 0.498 >> >> org.tmatesoft.sqljet.core.table.SqlJetDb.runTransaction(ISqlJetTransaction, >> SqlJetTransactionMode) 6 0.498 >> >> org.tmatesoft.sqljet.core.table.SqlJetDb.runReadTransaction(ISqlJetTransaction) >> 6 0.498 >> >> org.tmatesoft.sqljet.core.internal.table.SqlJetTableDataCursor.getRowValues() >> 6 0.498 >> >> org.tmatesoft.svn.core.internal.db.SVNSqlJetSelectStatement.getRowValues2(Map) >> 5 0.415 >> >> org.tmatesoft.svn.core.internal.db.SVNSqlJetSelectStatement.loadRowValues(boolean) >> 5 0.415 >> >> org.tmatesoft.svn.core.internal.db.SVNSqlJetSelectStatement.next() >> 5 0.415 >> >> org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.addChildren(Set, >> SVNSqlJetStatement) 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.gatherChildren(File, >> boolean, boolean) 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc17.db.SVNWCDb.readChildren(File) >> 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCleanup.repairTimestamps(SVNWCContext, >> File) 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCleanup.repairTimestamps(SVNWCContext, >> File) 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCleanup.repairTimestamps(SVNWCContext, >> File) 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCleanup.repairTimestamps(SVNWCContext, >> File) 2 0.166 >> >> org.tmatesoft.svn.core.internal.wc2.ng.SvnNgCleanup.cleanupInternal(SVNWCContext, >> File) 1 0.083 >> >> org.tmatesoft.svn.core.interna >> l.wc2.ng.SvnNgCleanup.cleanup(SVNWCContext, File) 1 0.083 >> >> org.tmatesoft.svn.core.interna >> l.wc2.ng.SvnNgCleanup.run(SVNWCContext) 1 0.083 >> >> org.tmatesoft.svn.core.interna >> l.wc2.ng.SvnNgCleanup.run(SVNWCContext) 1 0.083 >> >> org.tmatesoft.svn.core.interna >> l.wc2.ng.SvnNgOperationRunner.run() 1 0.083 >> >> >> org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperation) >> 1 0.083 >> >> >> org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperation) 1 >> 0.083 >> >> >> org.tmatesoft.svn.core.wc2.SvnOperation.run() 1 0.083 >> >> >> org.tmatesoft.svn.core.javahl17.SVNClientImpl.cleanup(String) 1 >> 0.083 >> >> >> org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.cleanup(File) >> 1 0.083 >> >> >> org.wso2.carbon.deployment.synchronizer.subversion.SVNBasedArtifactRepository.commit(int, >> String) 1 0.083 >> >> >> org.wso2.carbon.deployment.synchronizer.DeploymentSynchronizer.commit() >> 1 0.083 >> >> >> org.wso2.carbon.deployment.synchronizer.internal.DeploymentS >> ynchronizerServiceImpl.commit(int) 1 0.083 >> >> >> org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.deploymentSyncCommit() >> 1 0.083 >> >> >> org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run() >> 1 0.083 >> >> >> java.util.concurrent.Executors$RunnableAdapter.call() 1 0.083 >> >> >> java.util.concurrent.FutureTask.runAndReset() 1 0.083 >> >> >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu >> tureTask.access$301(ScheduledThreadPoolExecutor$ScheduledFutureTask) >> 1 0.083 >> >> >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run() >> 1 0.083 >> >> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) >> 1 0.083 >> >> >> java.util.concurrent.ThreadPoolExecutor$Worker.run() 1 0.083 >> >> >> java.lang.Thread.run() 1 0.083 >> >> Why is this running periodically? How to configure the time period? >> > > This can be configured via carbon.xml (DeploymentUpdateInterval), but > this is the same task that does the deployment too (on every 15 sec). I > would recommend not to change this. > I think there should be a different parameter for configuring the dep sync task interval. I also noticed this parameter, but I couldn't figure out that it's also related to deployment synchronizer. > > Is there a way to disable this scheduled task and update only when >> there's a notification? >> > > This is run only on a read-write node. So we have to have this as there is > no other way to find out whether there were any local modification and then > commit those to remote. > > >> >> Product is WSO2 API Manager 1.10. >> >> Thanks! >> >> Best Regards, >> >> -- >> Isuru Perera >> Associate Technical Lead | WSO2, Inc. | http://wso2.com/ >> Lean . Enterprise . Middleware >> >> about.me/chrishantha >> Contact: +IsuruPereraWSO2 <https://www.google.com/+IsuruPereraWSO2/about> >> > > > > -- > *Kishanthan Thangarajah* > Technical Lead, > Platform Technologies Team, > WSO2, Inc. > lean.enterprise.middleware > > Mobile - +94773426635 > Blog - *http://kishanthan.wordpress.com <http://kishanthan.wordpress.com>* > Twitter - *http://twitter.com/kishanthan <http://twitter.com/kishanthan>* > -- Isuru Perera Associate Technical Lead | WSO2, Inc. | http://wso2.com/ Lean . Enterprise . Middleware about.me/chrishantha Contact: +IsuruPereraWSO2 <https://www.google.com/+IsuruPereraWSO2/about>
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
