SlideShare a Scribd company logo
Comparative Performance of XSLT
Processors in Cocoon
John Berry
Vadim Gritsenko
Jack Ivers
Franqueli Mendez
Scott Roth
The testbed: Merck Manual Second Home Edition
• http://www.merck.com/mmhe/index.html
• http://mmh.banyu.co.jp/mmhe2j/index.html
• Free, on-line version of the widely-recognized book
– Content complete
– Includes additional multimedia features
• Two of Merck’s highest traffic sites
• Single source XML publishing: same XML content
drives production of printed book and website
– Adobe FrameMaker used to maintain the XML master
Cocoon site wins 2005 Webby Award!
http://www.webbyawards.com/webbys/current.php
Application details
• All pages are dynamically rendered
• 20MB XML transformed into 4000+ topic-level XML
chunks, 10-100K in size, as part of an off-line process
(Cocoon CLI)
– Plus a few larger chunks: index, etc.
• Rather complex aggregate page-rendering pipeline:
Trouble
• MMHE2 application easily passed rigorous lab tests
• Application was then launched in production; but
began to fail with Java OOM errors
– Irregularly, every 3-10 days
– Soft correlation with load
• Unable to reproduce failures in any test environment
• Crisis!
Diagnostics
• Multiple rounds of optimization / tweaking / re-launch
– Greatly improved pipeline cacheability
– Reduced size of large XML files, eliminated some large index pages
– But still OOM …
• Enabled core logging on production so we could
observe memory & store janitor behavior
– Observed “cache crashes” and “memory gobbles”
• XSLT style sheet validation
– Worked with Jacek Ambroziak of Ambrosoft, developer of Gregor, to
see if our XSLTs were inherently flawed
– Found and corrected a few issues, but nothing large and no impact
on OOMs
Breakthrough
• Finally reproduced failure on test server
– After weeks of trying, we were able to reproduce OOM error on test
server by applying extremely heavy loads
• In-depth memory profiling of all code, not just ours,
uncovered serious memory problems in Xalan 2.4
– Heavy memory utilization in multi threaded environment due to Xalan
not always releasing its internal object pools
• Because of shared configuration restrictions, we were
unable to implement Xalan 2.6
• The only option was to explore other XSLT processors
Initial testing: February 2005
• We tested Xalan 2.4* and Saxon 7 (JDK 1.4)
• Because problem only visible under load, testing was
conducted under load
– Webstress tool used to generate simulated multi-user load
– 1000s of unique URLs taken from production clickstream
– Pipeline caching disabled to force heavy XSLT processing
• Primary measure was “garbage collection velocity” or
“memory churn”
– Enable verbose GC
– Watch the catalina output for [GC …] and [Full GC …] messages
– Watch frequency of messages and % of full GCs
• Unscientific in some ways but seemed to bear most
directly on our “OOM under load” problem
*As bundled with JDK 1.4
Initial results
• Xalan 2.4 memory churn was extremely high
• Saxon 7 was far better
– Much lower memory churn
– Did require XSLT changes: less forgiving of XSLT sloppiness, some
namespace related quirks
• We shifted to Saxon 7 in production, OOM errors went
away
Sept 2005 testing
• Goals
– Better, more scientific tests, conducted under less time pressure
– Good enough to publish and share with the Cocoon community
• XSLT processor / JVM configurations tested
– On JDK 1.4 (primarily to confirm earlier test results)
• Xalan 2.4*
– On JDK 1.5
• Xalan 2.7
• Saxon 7
• Saxon 8
• XSLTC
– Xalan serializer used in all cases
• We plan to test Gregor and publish the results after GT
*As bundled with JDK 1.4
Sept 2005 test methodology
• More scientific multi-user “memory churn” test
– Placed a ~4 pageview/second load on the application (single server, 256M
JVM, pipeline caching disabled)
– Measurements:
• Total garbage collected
• CPU utilization
• Average response time
• Memory footprint
• Added a single user test
– Using Apache Bench, we ran single-user 1000 iteration tests on specific URLs
– Measured:
• Elapsed time (processing time)
• Total garbage collected
• Memory footprint
Results: Single-user: garbage collected
0
2,000,000,000
4,000,000,000
6,000,000,000
8,000,000,000
10,000,000,000
12,000,000,000
14,000,000,000
Section4
Section16
Section64
Index4
Index16
Index64
C
hapter4
C
hapter16
C
hapter64
Xalan 2.4
Xalan 2.7
Saxon 7
Saxon 8
XSLTC
Total garbage collected
Results: Single-user: execution time
0.0
20.0
40.0
60.0
80.0
100.0
120.0
140.0
Section4
Section16
Section64
Index4
Index16
Index64
C
hapter4
C
hapter16
C
hapter64
Xalan 2.4
Xalan 2.7
Saxon 7
Saxon 8
XSLTC
Execution time
Results: Multi-user: garbage collected
Total garbage collected (GB)
0 10 20 30 40 50 60 70 80
Saxon 7.9.1
Saxon 8.5.1
XSLTC 2.7
Xalan 2.7
Xalan 2.4 (1.4)*
*Extrapolated
Results: Multi-user: memory footprint
Memory footprint after test and Full GC
(MB)
0 50 100 150 200 250 300
Saxon 7.9.1
Saxon 8.5.1
XSLTC 2.7
Xalan 2.7
Xalan 2.4 (1.4)*
*Extrapolated
Results: Multi-user: CPU utilization
Average uptime 15 min stats
0 0.2 0.4 0.6 0.8 1 1.2
Saxon 7.9.1
Saxon 8.5.1
XSLTC 2.7
Xalan 2.7
Xalan 2.4 (1.4)*
*Extrapolated
Results: Multi-user: response time
Webstress response time stats
(ms)
0 100 200 300 400 500
Saxon 7.9.1
Saxon 8.5.1
XSLTC 2.7
Xalan 2.7
Xalan 2.4 (1.4)*
*Extrapolated
XSLT processors compared
• Xalan
– 2.4 was a seriously flawed release
– 2.7 appears to have corrected many of these deficiencies
• No longer lags Saxon significantly
– Xalan serializer is superior to Saxon’s: faster, with desired behavior on disable-output-
escaping
• Saxon
– XSLT changes required due to more strict syntax enforcement
– Both V7 and V8 appear to have case-specific inefficiencies in some cases – see spikes
on charts – but in different cases
– V8 Corrects one specific issue that had been troublesome in V7: handing of namespace
exceptions, which were causing problems in Cocoon Unit
– Serializer slower with undesired behavior on disable-output-escaping
• XSLTC
– Required code changes to get it working
• >65K method size
• Patch submitted http://issues.apache.org/jira/browse/XALANJ-2206
– XSLT changes were also required (not fully explored yet)
– Once working, the clear winner on performance
Testing caveats
• During multi-user testing, JVM behavior was
unpredictable, with occasional long Full GCs (15+ sec)
– These in turn impacted average response times as well as CPU
utilization
– We reran tests that had long Full GCs, but they highlight the fragility
of both CPU and response time metrics
• Xalan 2.4 on JDK 1.4 failed the multi-user test
– Unable to handle the load, Full GC meltdown
– Results listed are extrapolated from a partial run
• On the whole, however, we feel comfortable that the
results provide a reasonably accurate measure of
relative XSLT processor performance in Cocoon
More details … and Gregor
• More details and additional downloads are available
here:
– www.agilepartners.com/blog
– Including full details on the test and Cocoon configuration
• We plan to run the same tests on Gregor
– Will update the article and notify dev list when available

More Related Content

What's hot

End-to-End Reactive Data Access Using R2DBC with RSocket and Proteus
End-to-End Reactive Data Access Using R2DBC with RSocket and ProteusEnd-to-End Reactive Data Access Using R2DBC with RSocket and Proteus
End-to-End Reactive Data Access Using R2DBC with RSocket and Proteus
VMware Tanzu
 
Continuous delivery with jenkins pipelines @devopsdays cairo
Continuous delivery with jenkins pipelines  @devopsdays cairoContinuous delivery with jenkins pipelines  @devopsdays cairo
Continuous delivery with jenkins pipelines @devopsdays cairo
Roman Pickl
 
Simon Jia - The Kohana Framework
Simon Jia - The Kohana FrameworkSimon Jia - The Kohana Framework
Simon Jia - The Kohana Framework
Caroline_Rose
 
8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style
8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style
8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style
Athens Big Data
 
Database Migrations with Gradle and Liquibase
Database Migrations with Gradle and LiquibaseDatabase Migrations with Gradle and Liquibase
Database Migrations with Gradle and Liquibase
Dan Stine
 
WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013
Michel Schildmeijer
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
Ryan Cuprak
 
12 Things About WebLogic 12.1.3 #oow2014 #otnla15
12 Things About WebLogic 12.1.3 #oow2014 #otnla1512 Things About WebLogic 12.1.3 #oow2014 #otnla15
12 Things About WebLogic 12.1.3 #oow2014 #otnla15
Frank Munz
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOps
Andrei Solntsev
 
Grpc load balancing
Grpc load balancingGrpc load balancing
Grpc load balancing
Soohan Ahn
 
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
Andrew Wang
 
Consume wsa
Consume wsaConsume wsa
Consume wsa
mahe797
 
PAC 2019 virtual Scott Moore
PAC 2019  virtual   Scott Moore PAC 2019  virtual   Scott Moore
PAC 2019 virtual Scott Moore
Neotys
 
Software Defined Networking: The OpenDaylight Project
Software Defined Networking: The OpenDaylight ProjectSoftware Defined Networking: The OpenDaylight Project
Software Defined Networking: The OpenDaylight Project
Great Wide Open
 
OpenDaylight and YANG
OpenDaylight and YANGOpenDaylight and YANG
OpenDaylight and YANG
CoreStack
 
Parallel processing for splitter in mule esb
Parallel processing for splitter in mule esbParallel processing for splitter in mule esb
Parallel processing for splitter in mule esb
Sunil Kumar
 
Tuenti Release Workflow
Tuenti Release WorkflowTuenti Release Workflow
Tuenti Release Workflow
Tuenti
 
Task flow
Task flowTask flow
Task flow
Vishal Yadav
 
Jolokia - JMX on Capsaicin (Devoxx 2011)
Jolokia - JMX on Capsaicin (Devoxx 2011)Jolokia - JMX on Capsaicin (Devoxx 2011)
Jolokia - JMX on Capsaicin (Devoxx 2011)
roland.huss
 
FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...
FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...
FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...
FileCatalyst
 

What's hot (20)

End-to-End Reactive Data Access Using R2DBC with RSocket and Proteus
End-to-End Reactive Data Access Using R2DBC with RSocket and ProteusEnd-to-End Reactive Data Access Using R2DBC with RSocket and Proteus
End-to-End Reactive Data Access Using R2DBC with RSocket and Proteus
 
Continuous delivery with jenkins pipelines @devopsdays cairo
Continuous delivery with jenkins pipelines  @devopsdays cairoContinuous delivery with jenkins pipelines  @devopsdays cairo
Continuous delivery with jenkins pipelines @devopsdays cairo
 
Simon Jia - The Kohana Framework
Simon Jia - The Kohana FrameworkSimon Jia - The Kohana Framework
Simon Jia - The Kohana Framework
 
8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style
8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style
8th Athens Big Data Meetup - 1st Talk - Riding The Streaming Wave DIY Style
 
Database Migrations with Gradle and Liquibase
Database Migrations with Gradle and LiquibaseDatabase Migrations with Gradle and Liquibase
Database Migrations with Gradle and Liquibase
 
WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
 
12 Things About WebLogic 12.1.3 #oow2014 #otnla15
12 Things About WebLogic 12.1.3 #oow2014 #otnla1512 Things About WebLogic 12.1.3 #oow2014 #otnla15
12 Things About WebLogic 12.1.3 #oow2014 #otnla15
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOps
 
Grpc load balancing
Grpc load balancingGrpc load balancing
Grpc load balancing
 
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
 
Consume wsa
Consume wsaConsume wsa
Consume wsa
 
PAC 2019 virtual Scott Moore
PAC 2019  virtual   Scott Moore PAC 2019  virtual   Scott Moore
PAC 2019 virtual Scott Moore
 
Software Defined Networking: The OpenDaylight Project
Software Defined Networking: The OpenDaylight ProjectSoftware Defined Networking: The OpenDaylight Project
Software Defined Networking: The OpenDaylight Project
 
OpenDaylight and YANG
OpenDaylight and YANGOpenDaylight and YANG
OpenDaylight and YANG
 
Parallel processing for splitter in mule esb
Parallel processing for splitter in mule esbParallel processing for splitter in mule esb
Parallel processing for splitter in mule esb
 
Tuenti Release Workflow
Tuenti Release WorkflowTuenti Release Workflow
Tuenti Release Workflow
 
Task flow
Task flowTask flow
Task flow
 
Jolokia - JMX on Capsaicin (Devoxx 2011)
Jolokia - JMX on Capsaicin (Devoxx 2011)Jolokia - JMX on Capsaicin (Devoxx 2011)
Jolokia - JMX on Capsaicin (Devoxx 2011)
 
FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...
FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...
FileCatalyst January 2016 Webinar: TransferAgent is coming to FileCatalyst Wo...
 

Viewers also liked

X P S Auger I S S 1
X P S  Auger  I S S 1X P S  Auger  I S S 1
X P S Auger I S S 1
bchornik
 
Mas sobre lineas de transmision
Mas sobre lineas de transmisionMas sobre lineas de transmision
Mas sobre lineas de transmision
Cris Matias
 
Tem
TemTem
Unidad ii-caract. mat. (clase 4) (1)
Unidad ii-caract. mat. (clase 4) (1)Unidad ii-caract. mat. (clase 4) (1)
Unidad ii-caract. mat. (clase 4) (1)
Ministerio de Educación
 
Microscopio electrónico
Microscopio electrónicoMicroscopio electrónico
Microscopio electrónico
Andres crespo
 
T.3. principios de microscopía
T.3. principios de microscopíaT.3. principios de microscopía
T.3. principios de microscopía
Maria Constanza Bl Enfermera
 
Microscopia electronica de barrido
Microscopia electronica de barridoMicroscopia electronica de barrido
Microscopia electronica de barrido
Jhonás A. Vega
 
Apache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloudApache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloud
Robert Munteanu
 

Viewers also liked (8)

X P S Auger I S S 1
X P S  Auger  I S S 1X P S  Auger  I S S 1
X P S Auger I S S 1
 
Mas sobre lineas de transmision
Mas sobre lineas de transmisionMas sobre lineas de transmision
Mas sobre lineas de transmision
 
Tem
TemTem
Tem
 
Unidad ii-caract. mat. (clase 4) (1)
Unidad ii-caract. mat. (clase 4) (1)Unidad ii-caract. mat. (clase 4) (1)
Unidad ii-caract. mat. (clase 4) (1)
 
Microscopio electrónico
Microscopio electrónicoMicroscopio electrónico
Microscopio electrónico
 
T.3. principios de microscopía
T.3. principios de microscopíaT.3. principios de microscopía
T.3. principios de microscopía
 
Microscopia electronica de barrido
Microscopia electronica de barridoMicroscopia electronica de barrido
Microscopia electronica de barrido
 
Apache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloudApache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloud
 

Similar to Comparative Performance of XSLT Processors in Apache Cocoon

Real-World Load Testing of ADF Fusion Applications Demonstrated - Oracle Ope...
Real-World Load Testing of ADF Fusion Applications Demonstrated  - Oracle Ope...Real-World Load Testing of ADF Fusion Applications Demonstrated  - Oracle Ope...
Real-World Load Testing of ADF Fusion Applications Demonstrated - Oracle Ope...
Getting value from IoT, Integration and Data Analytics
 
Life In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesLife In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPages
Ulrich Krause
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
Ender Aydin Orak
 
Toronto High Scalability meetup - Scaling ELK
Toronto High Scalability meetup - Scaling ELKToronto High Scalability meetup - Scaling ELK
Toronto High Scalability meetup - Scaling ELK
Andrew Trossman
 
Oracle WebLogic Diagnostics & Perfomance tuning
Oracle WebLogic Diagnostics & Perfomance tuningOracle WebLogic Diagnostics & Perfomance tuning
Oracle WebLogic Diagnostics & Perfomance tuning
Michel Schildmeijer
 
jvm.pptx
jvm.pptxjvm.pptx
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
confluent
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 Presentation
Tomcat Expert
 
Live Container Migration: OpenStack Summit Barcelona 2016
Live Container Migration: OpenStack Summit Barcelona 2016Live Container Migration: OpenStack Summit Barcelona 2016
Live Container Migration: OpenStack Summit Barcelona 2016
Phil Estes
 
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
BCC - Solutions for IBM Collaboration Software
 
Building large scale, job processing systems with Scala Akka Actor framework
Building large scale, job processing systems with Scala Akka Actor frameworkBuilding large scale, job processing systems with Scala Akka Actor framework
Building large scale, job processing systems with Scala Akka Actor framework
Vignesh Sukumar
 
Apache Performance Tuning: Scaling Out
Apache Performance Tuning: Scaling OutApache Performance Tuning: Scaling Out
Apache Performance Tuning: Scaling Out
Sander Temme
 
WebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck ThreadsWebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck Threads
Maarten Smeets
 
From Zero to Performance Hero in Minutes - Agile Testing Days 2014 Potsdam
From Zero to Performance Hero in Minutes - Agile Testing Days 2014 PotsdamFrom Zero to Performance Hero in Minutes - Agile Testing Days 2014 Potsdam
From Zero to Performance Hero in Minutes - Agile Testing Days 2014 Potsdam
Andreas Grabner
 
Capacity Management/Provisioning (Cloud's full, Can't build here)
Capacity Management/Provisioning (Cloud's full, Can't build here)Capacity Management/Provisioning (Cloud's full, Can't build here)
Capacity Management/Provisioning (Cloud's full, Can't build here)
andyhky
 
FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...
FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...
FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...
Mohamed Sayed
 
Tuenti Release Workflow v1.1
Tuenti Release Workflow v1.1Tuenti Release Workflow v1.1
Tuenti Release Workflow v1.1
Tuenti
 
Performance Tuning RocksDB for Kafka Streams’ State Stores
Performance Tuning RocksDB for Kafka Streams’ State StoresPerformance Tuning RocksDB for Kafka Streams’ State Stores
Performance Tuning RocksDB for Kafka Streams’ State Stores
confluent
 
Radical Speed for SQL Queries on Databricks: Photon Under the Hood
Radical Speed for SQL Queries on Databricks: Photon Under the HoodRadical Speed for SQL Queries on Databricks: Photon Under the Hood
Radical Speed for SQL Queries on Databricks: Photon Under the Hood
Databricks
 
Upgrading to AtoM 2.4 - experiences at The National Library of Wales
Upgrading to AtoM 2.4 - experiences at The National Library of WalesUpgrading to AtoM 2.4 - experiences at The National Library of Wales
Upgrading to AtoM 2.4 - experiences at The National Library of Wales
Vicky-Phillips
 

Similar to Comparative Performance of XSLT Processors in Apache Cocoon (20)

Real-World Load Testing of ADF Fusion Applications Demonstrated - Oracle Ope...
Real-World Load Testing of ADF Fusion Applications Demonstrated  - Oracle Ope...Real-World Load Testing of ADF Fusion Applications Demonstrated  - Oracle Ope...
Real-World Load Testing of ADF Fusion Applications Demonstrated - Oracle Ope...
 
Life In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesLife In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPages
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
 
Toronto High Scalability meetup - Scaling ELK
Toronto High Scalability meetup - Scaling ELKToronto High Scalability meetup - Scaling ELK
Toronto High Scalability meetup - Scaling ELK
 
Oracle WebLogic Diagnostics & Perfomance tuning
Oracle WebLogic Diagnostics & Perfomance tuningOracle WebLogic Diagnostics & Perfomance tuning
Oracle WebLogic Diagnostics & Perfomance tuning
 
jvm.pptx
jvm.pptxjvm.pptx
jvm.pptx
 
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 Presentation
 
Live Container Migration: OpenStack Summit Barcelona 2016
Live Container Migration: OpenStack Summit Barcelona 2016Live Container Migration: OpenStack Summit Barcelona 2016
Live Container Migration: OpenStack Summit Barcelona 2016
 
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
XPages Performance Master Class - Survive in the fast lane on the Autobahn (E...
 
Building large scale, job processing systems with Scala Akka Actor framework
Building large scale, job processing systems with Scala Akka Actor frameworkBuilding large scale, job processing systems with Scala Akka Actor framework
Building large scale, job processing systems with Scala Akka Actor framework
 
Apache Performance Tuning: Scaling Out
Apache Performance Tuning: Scaling OutApache Performance Tuning: Scaling Out
Apache Performance Tuning: Scaling Out
 
WebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck ThreadsWebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck Threads
 
From Zero to Performance Hero in Minutes - Agile Testing Days 2014 Potsdam
From Zero to Performance Hero in Minutes - Agile Testing Days 2014 PotsdamFrom Zero to Performance Hero in Minutes - Agile Testing Days 2014 Potsdam
From Zero to Performance Hero in Minutes - Agile Testing Days 2014 Potsdam
 
Capacity Management/Provisioning (Cloud's full, Can't build here)
Capacity Management/Provisioning (Cloud's full, Can't build here)Capacity Management/Provisioning (Cloud's full, Can't build here)
Capacity Management/Provisioning (Cloud's full, Can't build here)
 
FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...
FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...
FOSS4G In The Cloud: Using Open Source to build Cloud based Spatial Infrastru...
 
Tuenti Release Workflow v1.1
Tuenti Release Workflow v1.1Tuenti Release Workflow v1.1
Tuenti Release Workflow v1.1
 
Performance Tuning RocksDB for Kafka Streams’ State Stores
Performance Tuning RocksDB for Kafka Streams’ State StoresPerformance Tuning RocksDB for Kafka Streams’ State Stores
Performance Tuning RocksDB for Kafka Streams’ State Stores
 
Radical Speed for SQL Queries on Databricks: Photon Under the Hood
Radical Speed for SQL Queries on Databricks: Photon Under the HoodRadical Speed for SQL Queries on Databricks: Photon Under the Hood
Radical Speed for SQL Queries on Databricks: Photon Under the Hood
 
Upgrading to AtoM 2.4 - experiences at The National Library of Wales
Upgrading to AtoM 2.4 - experiences at The National Library of WalesUpgrading to AtoM 2.4 - experiences at The National Library of Wales
Upgrading to AtoM 2.4 - experiences at The National Library of Wales
 

Recently uploaded

Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
DanBrown980551
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
Fwdays
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
Fwdays
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
christinelarrosa
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
Pablo Gómez Abajo
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 

Recently uploaded (20)

Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 

Comparative Performance of XSLT Processors in Apache Cocoon

  • 1. Comparative Performance of XSLT Processors in Cocoon John Berry Vadim Gritsenko Jack Ivers Franqueli Mendez Scott Roth
  • 2. The testbed: Merck Manual Second Home Edition • http://www.merck.com/mmhe/index.html • http://mmh.banyu.co.jp/mmhe2j/index.html • Free, on-line version of the widely-recognized book – Content complete – Includes additional multimedia features • Two of Merck’s highest traffic sites • Single source XML publishing: same XML content drives production of printed book and website – Adobe FrameMaker used to maintain the XML master
  • 3.
  • 4.
  • 5. Cocoon site wins 2005 Webby Award! http://www.webbyawards.com/webbys/current.php
  • 6. Application details • All pages are dynamically rendered • 20MB XML transformed into 4000+ topic-level XML chunks, 10-100K in size, as part of an off-line process (Cocoon CLI) – Plus a few larger chunks: index, etc. • Rather complex aggregate page-rendering pipeline:
  • 7. Trouble • MMHE2 application easily passed rigorous lab tests • Application was then launched in production; but began to fail with Java OOM errors – Irregularly, every 3-10 days – Soft correlation with load • Unable to reproduce failures in any test environment • Crisis!
  • 8. Diagnostics • Multiple rounds of optimization / tweaking / re-launch – Greatly improved pipeline cacheability – Reduced size of large XML files, eliminated some large index pages – But still OOM … • Enabled core logging on production so we could observe memory & store janitor behavior – Observed “cache crashes” and “memory gobbles” • XSLT style sheet validation – Worked with Jacek Ambroziak of Ambrosoft, developer of Gregor, to see if our XSLTs were inherently flawed – Found and corrected a few issues, but nothing large and no impact on OOMs
  • 9. Breakthrough • Finally reproduced failure on test server – After weeks of trying, we were able to reproduce OOM error on test server by applying extremely heavy loads • In-depth memory profiling of all code, not just ours, uncovered serious memory problems in Xalan 2.4 – Heavy memory utilization in multi threaded environment due to Xalan not always releasing its internal object pools • Because of shared configuration restrictions, we were unable to implement Xalan 2.6 • The only option was to explore other XSLT processors
  • 10. Initial testing: February 2005 • We tested Xalan 2.4* and Saxon 7 (JDK 1.4) • Because problem only visible under load, testing was conducted under load – Webstress tool used to generate simulated multi-user load – 1000s of unique URLs taken from production clickstream – Pipeline caching disabled to force heavy XSLT processing • Primary measure was “garbage collection velocity” or “memory churn” – Enable verbose GC – Watch the catalina output for [GC …] and [Full GC …] messages – Watch frequency of messages and % of full GCs • Unscientific in some ways but seemed to bear most directly on our “OOM under load” problem *As bundled with JDK 1.4
  • 11. Initial results • Xalan 2.4 memory churn was extremely high • Saxon 7 was far better – Much lower memory churn – Did require XSLT changes: less forgiving of XSLT sloppiness, some namespace related quirks • We shifted to Saxon 7 in production, OOM errors went away
  • 12. Sept 2005 testing • Goals – Better, more scientific tests, conducted under less time pressure – Good enough to publish and share with the Cocoon community • XSLT processor / JVM configurations tested – On JDK 1.4 (primarily to confirm earlier test results) • Xalan 2.4* – On JDK 1.5 • Xalan 2.7 • Saxon 7 • Saxon 8 • XSLTC – Xalan serializer used in all cases • We plan to test Gregor and publish the results after GT *As bundled with JDK 1.4
  • 13. Sept 2005 test methodology • More scientific multi-user “memory churn” test – Placed a ~4 pageview/second load on the application (single server, 256M JVM, pipeline caching disabled) – Measurements: • Total garbage collected • CPU utilization • Average response time • Memory footprint • Added a single user test – Using Apache Bench, we ran single-user 1000 iteration tests on specific URLs – Measured: • Elapsed time (processing time) • Total garbage collected • Memory footprint
  • 14. Results: Single-user: garbage collected 0 2,000,000,000 4,000,000,000 6,000,000,000 8,000,000,000 10,000,000,000 12,000,000,000 14,000,000,000 Section4 Section16 Section64 Index4 Index16 Index64 C hapter4 C hapter16 C hapter64 Xalan 2.4 Xalan 2.7 Saxon 7 Saxon 8 XSLTC Total garbage collected
  • 15. Results: Single-user: execution time 0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 Section4 Section16 Section64 Index4 Index16 Index64 C hapter4 C hapter16 C hapter64 Xalan 2.4 Xalan 2.7 Saxon 7 Saxon 8 XSLTC Execution time
  • 16. Results: Multi-user: garbage collected Total garbage collected (GB) 0 10 20 30 40 50 60 70 80 Saxon 7.9.1 Saxon 8.5.1 XSLTC 2.7 Xalan 2.7 Xalan 2.4 (1.4)* *Extrapolated
  • 17. Results: Multi-user: memory footprint Memory footprint after test and Full GC (MB) 0 50 100 150 200 250 300 Saxon 7.9.1 Saxon 8.5.1 XSLTC 2.7 Xalan 2.7 Xalan 2.4 (1.4)* *Extrapolated
  • 18. Results: Multi-user: CPU utilization Average uptime 15 min stats 0 0.2 0.4 0.6 0.8 1 1.2 Saxon 7.9.1 Saxon 8.5.1 XSLTC 2.7 Xalan 2.7 Xalan 2.4 (1.4)* *Extrapolated
  • 19. Results: Multi-user: response time Webstress response time stats (ms) 0 100 200 300 400 500 Saxon 7.9.1 Saxon 8.5.1 XSLTC 2.7 Xalan 2.7 Xalan 2.4 (1.4)* *Extrapolated
  • 20. XSLT processors compared • Xalan – 2.4 was a seriously flawed release – 2.7 appears to have corrected many of these deficiencies • No longer lags Saxon significantly – Xalan serializer is superior to Saxon’s: faster, with desired behavior on disable-output- escaping • Saxon – XSLT changes required due to more strict syntax enforcement – Both V7 and V8 appear to have case-specific inefficiencies in some cases – see spikes on charts – but in different cases – V8 Corrects one specific issue that had been troublesome in V7: handing of namespace exceptions, which were causing problems in Cocoon Unit – Serializer slower with undesired behavior on disable-output-escaping • XSLTC – Required code changes to get it working • >65K method size • Patch submitted http://issues.apache.org/jira/browse/XALANJ-2206 – XSLT changes were also required (not fully explored yet) – Once working, the clear winner on performance
  • 21. Testing caveats • During multi-user testing, JVM behavior was unpredictable, with occasional long Full GCs (15+ sec) – These in turn impacted average response times as well as CPU utilization – We reran tests that had long Full GCs, but they highlight the fragility of both CPU and response time metrics • Xalan 2.4 on JDK 1.4 failed the multi-user test – Unable to handle the load, Full GC meltdown – Results listed are extrapolated from a partial run • On the whole, however, we feel comfortable that the results provide a reasonably accurate measure of relative XSLT processor performance in Cocoon
  • 22. More details … and Gregor • More details and additional downloads are available here: – www.agilepartners.com/blog – Including full details on the test and Cocoon configuration • We plan to run the same tests on Gregor – Will update the article and notify dev list when available