db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Øyvind Harboe <oyvind.har...@zylin.com>
Subject Performance degradation with Derby Embedded under Tomcat vs Jetty
Date Sun, 12 Apr 2015 21:50:37 GMT

I'm having problems with performance degrading dramatically when I
deploy our application to a Tomcat container. The application uses
Apache Cayenne ORM on top of Derby.

Does anyone have any pointers on how I can debug this to figure out
what I'm doing wrong?

Generating a report which includes ca. 100 queries and thousands of
records takes less than one second on Jetty, but in the Tomcat
container it takes more than 10 seconds, so a 10x slowdown or so.

I can't believe that Jetty is 10x faster than Tomcat.

I've tried to figure out what the differences are between these two
environments without luck.

Jetty and Tomcat are equal in terms of:

- same VM options
- debug vs. non-debug mode
- tests run on same machine side-by-side
- same database files(copied to another location on the harddisk)

Some differences:

- Jetty is using  org.apache.cayenne.conn.PoolManager rather than
Tomcat's connection pools.

When I suspend Tomcat in the debugger, the typical stack trace is
something about fetching pages:

BaseContainerHandle(Observable).addObserver(Observer) line: 82
StoredPage(BasePage).preLatch(BaseContainerHandle) line: not available
StoredPage(BasePage).setExclusive(BaseContainerHandle) line: not available
RAFContainer4(BaseContainer).latchPage(BaseContainerHandle, BasePage,
boolean) line: not available
RAFContainer4(FileContainer).latchPage(BaseContainerHandle, BasePage,
boolean) line: not available
RAFContainer4(FileContainer).getUserPage(BaseContainerHandle, long,
boolean, boolean) line: not available
RAFContainer4(FileContainer).getPage(BaseContainerHandle, long,
boolean) line: not available
BaseContainerHandle.getPage(long) line: not available
OpenHeap(OpenConglomerate).latchPage(RowPosition) line: not available
DataValueDescriptor[], FormatableBitSet) line: not available
IndexRowToBaseRowResultSet.getNextRowCore() line: not available
ProjectRestrictResultSet.getNextRowCore() line: not available
NestedLoopJoinResultSet.getNextRowCore() line: not available
ProjectRestrictResultSet.getNextRowCore() line: not available
SortResultSet.getRowFromResultSet() line: not available
SortResultSet.getNextRowFromRS() line: not available
SortResultSet.loadSorter() line: not available
SortResultSet.openCore() line: not available
SortResultSet(BasicNoPutResultSetImpl).open() line: not available
GenericPreparedStatement.executeStmt(Activation, boolean, boolean,
long) line: not available
GenericPreparedStatement.execute(Activation, boolean, long) line: not
boolean, boolean) line: not available
EmbedPreparedStatement.executeStatement(Activation, boolean, boolean)
line: not available
EmbedPreparedStatement.executeQuery() line: not available
SelectAction.performAction(Connection, OperationObserver) line: 75
DataNodeQueryAction.runQuery(Connection, Query) line: 87

Øyvind Harboe - Can Zylin Consulting help on your project?

View raw message