SlideShare a Scribd company logo
High Performance Solr and JVM Tuning Strategies used for MapQuest’s Search Ahead: Presented by Darren Spehr, MapQuest
High Performance Solr and JVM 
Tuning Strategies used for 
MapQuest’s Search Ahead 
Darren Spehr – System Architect
MapQuest 
Going strong … 
since 1967 
• Maps 
• Directions 
• Routing 
• Geocoding 
• Mobile 
• B2B
Every Adventure has a Beginning 
Our mobile client needs an overhaul … 
Oh, and we need an auto-correct feature 
… well, auto-complete 
… actually, search ahead
… Top Secret Meeting Minutes 
• How 
do 
we 
use 
auto-­‐complete 
today? 
• What 
are 
we 
searching 
over? 
• How 
fast 
can 
a 
person 
type? 
• What 
are 
we 
going 
to 
say 
in 
response? 
• When 
do 
we 
have 
to 
launch 
this?
Characteristics 
• Searches 
march 
from 
le; 
to 
right 
• Expect 
the 
first 
term 
to 
be 
highly 
relevant 
• Term 
order 
and 
proximity 
are 
clues 
• Spaces 
are 
now 
really 
important 
• Expect 
mixed 
query 
types 
• AbbreviaCons 
and 
misspellings 
are 
common 
• People 
can 
type 
really 
fast 
(but 
generally 
less 
than 
10 
keystrokes 
per 
sec) 
• Users 
frequently 
want 
to 
browse
Requirements 
Fast, 
Like really fast 
140 milliseconds maximum response time
Methodology 
Some 
opCmizaCons 
can 
be 
planned 
Others 
need 
to 
be 
discovered 
Test 
alternaCves 
– 
opCmize 
low 
hanging 
fruit 
early 
Finally: 
Take 
it 
to 
task
Multiple Types Possible
The Data: 
Categories 
Franchises 
Locations 
• Neighborhoods 
to 
Countries 
Points of Interest 
• Airports 
• Businesses 
• Landmarks 
Addresses 
• Individual 
• Block 
(Interpolated) 
In all – over 10 Billion unique documents
Architecture 
Solr 
API 
Clusters 
Mobile 
Client 
Mobile 
App 
API-­‐East 
Targeted 
LocaCon 
Business 
Address 
1 
Address 
2 
API-­‐West 
Targeted: 
4 
VMs 
1 
shard, 
283,000 
docs 
Frequent 
Low 
Volume 
Updates 
Loca7on: 
3 
VMs 
1 
shard, 
4.3 
million 
docs 
Frequent 
Low 
Volume 
Updates 
Business: 
5 
VMs 
1 
shard, 
13.4 
million 
docs 
Heavy 
Updates 
Address: 
30 
VMs 
10 
shards, 
100 
million 
docs 
No 
Updates 
Interpolated 
Address: 
30 
VMs 
10 
shards, 
10 
billion 
docs* 
No 
Updates
Special Cases 
Business data 
Ø Complex synonyms 
Ø Stemming needs 
Ø The memory factor 
Ø Complex query patterns 
Addresses 
Ø So many! 
Ø Nested structure 
Ø Interpolated positions 
Ø Updates an issue 
Airports 
Ø Airport codes 
Ø International issues 
Locations 
Ø International issues 
Ø Relevance
Move Analysis to the ETL 
A typical job includes: 
• Basic 
text 
processing 
/ 
cleansing 
• Stemming 
• Synonyms 
and 
subsCtuCon 
• Cloning 
• Filtering 
• Various 
permutaCons 
• RegionalizaCon 
• Pre-­‐calculaCng 
relevance
Custom Doc Routing 
Address data won’t fit in memory or perform well … 
Both collections are sharded so the size on disk is around 6-8 GB 
Initial, naïve balancing wasn’t nearly good enough 
Optimization problem that accounts for: 
- Size on disk 
- Predicted query volumes 
- FST load (entropy)
Setting Up the Indexes 
Clean up schema.xml and solrconfig.xml 
Exact and Fuzzy queries tested – String fields WIN! 
(Thank you FST and prefix queries!) 
Geo-sensitivity made easy using Spatial4J 
(Thank you David Smiley!) 
Optimization required 
No NRT functionality needed
Query-Time Considerations 
Jetty 
-­‐ <New 
class=“java.uCl.concurrent.ArrayBlockingQueue”> 
-­‐ Limit 
thread 
pool 
based 
on 
projected 
need 
Filters used judiciously 
Pull in a single field from the indexes for display. 
Shard/route aware clients used for Addresses 
Estimate caching needs
The API has to be Fast Too 
Pool as many resources as it makes sense 
A Note on connection pools: 
- The DefaultHttpClient avoids key registry overhead 
- Ask for keep-alive support 
- Balance pool according to use 
Thread level caching used to avoid ClassLoader overhead 
Take out some insurance with TTLs 
Solr 
Query 
HfpClient 
Executors
Keep Queries Simple 
Federate a larger number of queries 
Break queries out by type and expectation 
Use custom search handlers to move the 
burden of “tough” queries to Solr 
Special case: 
Ø Interpolated Addresses 
Ø Business Names 
Collec7on 
Query 
Count 
Category 
3 
Franchise 
3 
Airport 
1 
CriCcal 
Address 
1 
LocaCons 
4 
Businesses 
3 
Addresses 
(both) 
2 
each
At this point the service is up and running … 
but the fun has only begun
Getting Ready to Test 
Choose your tool set … 
Ø Test Suite (JMeter) 
Ø Application Monitoring (VisualVM) 
Ø GC Monitoring (VisualGC) 
Ø On Host tools (top, pidstat) 
Ø Runtime exposure (JMX, jsvc) 
Ø Offline analysis (JMeter, GCHisto)
Set Boundary Conditions 
Production Query Volume 
• What is the expected peak QPS 
• Estimate 50th, 75th percentiles 
Know what success looks like: 
• What availability are you looking for? 
• What about latency? 
• Caching success? 
Know what failure looks like: 
• When do you consider a machine maxed out?
So, Let’s Talk About …
Memory Settings 
Max Heap = anticipated index size in memory + delta for new gen 
Min Heap = Max Heap to limit HotSpot optimizations 
-Xmx = -Xms 
Sizing the new generation (-Xmn): 
Ø Start with around 1/3 of your heap size 
Ø Set the Survivor space (-XX:SurvivorRatio=15) 
Determine the Eden Space: 
eden = -Xmn - 2 * ( -Xmn / 15 )
Example 
7 GB Index + 3 GB for new generation: 
-Xms10G 
-Xmx10G 
-Xmn3G 
-XX:SurvivorRatio=15 
-XX:PermSize=64m 
-XX:MaxPermSize=64m 
Survivor Size: 3 GB / 15 = 205 MB 
Eden Space: 3 GB – 2 * 205 MB = 2.7 GB
Baseline JVM Settings 
Simple and verbose 
-verbose:gc 
-XX:HeapDumpPath=/logs/solr_heap.hprof 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCApplicationStoppedTime 
-Xloggc:/logs/gc.log 
-XX:+UseConcMarkSweepGC 
-XX:+CMSParallelRemarkEnabled
Other Settings We Use 
TargetSurvivorRatio=70 
MaxTenuringThreshold=5 
PretenureSizeThreshold=64m 
CMSFullGCsBeforeCompaction=1 
CMSInitiatingOccupancyFraction=70 
CMSTriggerPermRatio=80 
CMSMaxAbortablePrecleanTime=6000 
+CMSScavengeBeforeRemark 
+UseCMSInitiatingOccupancyOnly 
+CMSParallelRemarkEnabled 
+ParallelRefProcEnabled
Establish Single Test Thread Settings 
<ConstantThroughputTimer guiclass="TestBeanGUI" 
testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" 
enabled="true"> 
<intProp name="calcMode">0</intProp> 
<doubleProp> 
<name>throughput</name> 
<value>1600.0</value> 
<savedValue>0.0</savedValue> 
</doubleProp> 
</ConstantThroughputTimer>
Test Cycle 
Monitor 
Record 
Evaluate 
? 
JVM 
Page 
Faults 
CPU 
GC 
Rates 
Threading 
Context 
Switches 
Locks 
Swapping 
Network 
Traffic 
Availability 
Throughput 
Latency 
Thread 
Count 
Have 
I 
met 
my 
exit 
condiCons? 
Add 
More 
Threads
Monitoring the JVM 
Watch your application come to life! 
Memory Steady States: 
• Old 
GeneraCon: 
⅓ 
to 
¼ 
the 
size 
of 
your 
sepngs 
• Permanent 
GeneraCon: 
½ 
its 
size 
Tenure histogram sizes should drop off 
… this is your ideal level 
14000 
12000 
10000 
8000 
6000 
4000 
2000 
0 
Tenure 
Size 
1 
2 
3 
4 
5 
Tenure 
Size
Monitoring Solr Caches 
The UI is a wealth of information! 
Cache Strategy 
Ø Size 
Ø Type 
Look at the hit and eviction statistics 
Use “binary sizing” to walk the sizes up 
until there are diminishing returns 
<filterCache class="solr.LRUCache" 
size="8384" 
initialSize="8384" 
autowarmCount="0"/> 
<documentCache class="solr.LRUCache" 
size="8384" 
initialSize="8384" 
autowarmCount="0"/>
JVM Tuning Strategies 
Smaller eden spaces result in: 
Ø more frequent minor GCs 
Ø a higher probability of premature promotion 
Ø the best performance 
Watch out for too much eager promotion and lengthening major GCs 
Mitigate major GC STW pauses by: 
Ø Keeping the old generation as small as possible 
Ø Maybe even a little smaller 
Ø Turn off swapping 
Ø Consider explicit GC
Bookkeeping Demo … 
VisualVM 
GCHisto 
Performance Stats
Planning for the Future 
What we used to do predictive expansion: 
1) Target max VM capacity 
2) Matching QPS 
3) Breakdown of traffic load 
4) Scaling factor
Conclusions 
7 Habits of Highly Effective Tuners 
1. Know where you’re going 
2. Know where you’re starting from 
3. Test incrementally 
4. Monitor with intent 
5. Make small changes 
6. Know when to stop 
7. Plan ahead
Questions? 
Darren Spehr 
darren.spehr@mapquest.com
Resources 
VisualVM 
VisualGC 
GCHisto 
Java Performance – Hunt and John 
The Garbage Collection Handbook – Jones, Hosking and Moss 
Solr In Action – Grainger and Potter

More Related Content

PPTX
Benchmarking Solr Performance at Scale
PDF
High Performance Solr
PDF
Introduction to SolrCloud
PDF
Search-time Parallelism: Presented by Shikhar Bhushan, Etsy
PDF
Best practices for highly available and large scale SolrCloud
PDF
Call me maybe: Jepsen and flaky networks
PDF
Cross Datacenter Replication in Apache Solr 6
PPTX
SFBay Area Solr Meetup - June 18th: Benchmarking Solr Performance
Benchmarking Solr Performance at Scale
High Performance Solr
Introduction to SolrCloud
Search-time Parallelism: Presented by Shikhar Bhushan, Etsy
Best practices for highly available and large scale SolrCloud
Call me maybe: Jepsen and flaky networks
Cross Datacenter Replication in Apache Solr 6
SFBay Area Solr Meetup - June 18th: Benchmarking Solr Performance

What's hot (20)

PDF
Deploying and managing Solr at scale
PPTX
Solrcloud Leader Election
PDF
Tuning Solr and its Pipeline for Logs: Presented by Rafał Kuć & Radu Gheorghe...
PDF
Scaling SolrCloud to a Large Number of Collections - Fifth Elephant 2014
ODP
Apache SolrCloud
PDF
Solr cluster with SolrCloud at lucenerevolution (tutorial)
PPTX
Scaling SolrCloud to a large number of Collections
PPT
Solr Performance Monitoring with SPM
PPTX
Lucene Revolution 2013 - Scaling Solr Cloud for Large-scale Social Media Anal...
PPTX
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
PDF
Scaling search with SolrCloud
PDF
Building a near real time search engine & analytics for logs using solr
ODP
GIDS2014: SolrCloud: Searching Big Data
PDF
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
PDF
How to make a simple cheap high availability self-healing solr cluster
PDF
Loading 350M documents into a large Solr cluster: Presented by Dion Olsthoorn...
PDF
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
PPTX
Scaling Through Partitioning and Shard Splitting in Solr 4
PDF
Scaling massive elastic search clusters - Rafał Kuć - Sematext
PDF
Mail Search As A Sercive: Presented by Rishi Easwaran, Aol
Deploying and managing Solr at scale
Solrcloud Leader Election
Tuning Solr and its Pipeline for Logs: Presented by Rafał Kuć & Radu Gheorghe...
Scaling SolrCloud to a Large Number of Collections - Fifth Elephant 2014
Apache SolrCloud
Solr cluster with SolrCloud at lucenerevolution (tutorial)
Scaling SolrCloud to a large number of Collections
Solr Performance Monitoring with SPM
Lucene Revolution 2013 - Scaling Solr Cloud for Large-scale Social Media Anal...
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Scaling search with SolrCloud
Building a near real time search engine & analytics for logs using solr
GIDS2014: SolrCloud: Searching Big Data
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
How to make a simple cheap high availability self-healing solr cluster
Loading 350M documents into a large Solr cluster: Presented by Dion Olsthoorn...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Scaling Through Partitioning and Shard Splitting in Solr 4
Scaling massive elastic search clusters - Rafał Kuć - Sematext
Mail Search As A Sercive: Presented by Rishi Easwaran, Aol
Ad

Similar to High Performance Solr and JVM Tuning Strategies used for MapQuest’s Search Ahead: Presented by Darren Spehr, MapQuest (20)

PDF
Performance and Predictability - Richard Warburton
PDF
Performance and predictability (1)
PPTX
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
PPT
Everything You Need to Know About Sharding
PDF
Optimizing Tiered Storage for Low-Latency Real-Time Analytics at AI Scale
PDF
Aerospike Go Language Client
PDF
Three Perspectives on Measuring Latency
PDF
SOLR Power FTW: short version
PPTX
SnappyData Ad Analytics Use Case -- BDAM Meetup Sept 14th
PDF
High Performance Erlang - Pitfalls and Solutions
PDF
How to use Impala query plan and profile to fix performance issues
PPTX
Fastest Servlets in the West
PDF
Aerospike Hybrid Memory Architecture
PPT
Performance tuning jvm
PDF
High Performance With Java
PPTX
Low latency in java 8 by Peter Lawrey
PDF
Presto at Tivo, Boston Hadoop Meetup
PDF
EVCache: Lowering Costs for a Low Latency Cache with RocksDB
PDF
Tweaking performance on high-load projects
PDF
Presto At Treasure Data
Performance and Predictability - Richard Warburton
Performance and predictability (1)
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Everything You Need to Know About Sharding
Optimizing Tiered Storage for Low-Latency Real-Time Analytics at AI Scale
Aerospike Go Language Client
Three Perspectives on Measuring Latency
SOLR Power FTW: short version
SnappyData Ad Analytics Use Case -- BDAM Meetup Sept 14th
High Performance Erlang - Pitfalls and Solutions
How to use Impala query plan and profile to fix performance issues
Fastest Servlets in the West
Aerospike Hybrid Memory Architecture
Performance tuning jvm
High Performance With Java
Low latency in java 8 by Peter Lawrey
Presto at Tivo, Boston Hadoop Meetup
EVCache: Lowering Costs for a Low Latency Cache with RocksDB
Tweaking performance on high-load projects
Presto At Treasure Data
Ad

More from Lucidworks (20)

PDF
Search is the Tip of the Spear for Your B2B eCommerce Strategy
PDF
Drive Agent Effectiveness in Salesforce
PPTX
How Crate & Barrel Connects Shoppers with Relevant Products
PPTX
Lucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
PPTX
Connected Experiences Are Personalized Experiences
PDF
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
PPTX
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
PPTX
Preparing for Peak in Ecommerce | eTail Asia 2020
PPTX
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
PPTX
AI-Powered Linguistics and Search with Fusion and Rosette
PDF
The Service Industry After COVID-19: The Soul of Service in a Virtual Moment
PPTX
Webinar: Smart answers for employee and customer support after covid 19 - Europe
PDF
Smart Answers for Employee and Customer Support After COVID-19
PPTX
Applying AI & Search in Europe - featuring 451 Research
PPTX
Webinar: Accelerate Data Science with Fusion 5.1
PDF
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
PPTX
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
PPTX
Apply Knowledge Graphs and Search for Real-World Decision Intelligence
PPTX
Webinar: Building a Business Case for Enterprise Search
PPTX
Why Insight Engines Matter in 2020 and Beyond
Search is the Tip of the Spear for Your B2B eCommerce Strategy
Drive Agent Effectiveness in Salesforce
How Crate & Barrel Connects Shoppers with Relevant Products
Lucidworks & IMRG Webinar – Best-In-Class Retail Product Discovery
Connected Experiences Are Personalized Experiences
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
[Webinar] Intelligent Policing. Leveraging Data to more effectively Serve Com...
Preparing for Peak in Ecommerce | eTail Asia 2020
Accelerate The Path To Purchase With Product Discovery at Retail Innovation C...
AI-Powered Linguistics and Search with Fusion and Rosette
The Service Industry After COVID-19: The Soul of Service in a Virtual Moment
Webinar: Smart answers for employee and customer support after covid 19 - Europe
Smart Answers for Employee and Customer Support After COVID-19
Applying AI & Search in Europe - featuring 451 Research
Webinar: Accelerate Data Science with Fusion 5.1
Webinar: 5 Must-Have Items You Need for Your 2020 Ecommerce Strategy
Where Search Meets Science and Style Meets Savings: Nordstrom Rack's Journey ...
Apply Knowledge Graphs and Search for Real-World Decision Intelligence
Webinar: Building a Business Case for Enterprise Search
Why Insight Engines Matter in 2020 and Beyond

Recently uploaded (20)

PPT
Introduction Database Management System for Course Database
PDF
System and Network Administraation Chapter 3
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PPTX
Online Work Permit System for Fast Permit Processing
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Digital Strategies for Manufacturing Companies
PDF
How Creative Agencies Leverage Project Management Software.pdf
PPTX
Essential Infomation Tech presentation.pptx
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Understanding Forklifts - TECH EHS Solution
PPTX
history of c programming in notes for students .pptx
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Transform Your Business with a Software ERP System
PPTX
Materi-Enum-and-Record-Data-Type (1).pptx
PPTX
Introduction to Artificial Intelligence
Introduction Database Management System for Course Database
System and Network Administraation Chapter 3
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
How to Migrate SBCGlobal Email to Yahoo Easily
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Which alternative to Crystal Reports is best for small or large businesses.pdf
How to Choose the Right IT Partner for Your Business in Malaysia
Online Work Permit System for Fast Permit Processing
2025 Textile ERP Trends: SAP, Odoo & Oracle
Digital Strategies for Manufacturing Companies
How Creative Agencies Leverage Project Management Software.pdf
Essential Infomation Tech presentation.pptx
Design an Analysis of Algorithms II-SECS-1021-03
VVF-Customer-Presentation2025-Ver1.9.pptx
Understanding Forklifts - TECH EHS Solution
history of c programming in notes for students .pptx
Design an Analysis of Algorithms I-SECS-1021-03
Transform Your Business with a Software ERP System
Materi-Enum-and-Record-Data-Type (1).pptx
Introduction to Artificial Intelligence

High Performance Solr and JVM Tuning Strategies used for MapQuest’s Search Ahead: Presented by Darren Spehr, MapQuest

  • 2. High Performance Solr and JVM Tuning Strategies used for MapQuest’s Search Ahead Darren Spehr – System Architect
  • 3. MapQuest Going strong … since 1967 • Maps • Directions • Routing • Geocoding • Mobile • B2B
  • 4. Every Adventure has a Beginning Our mobile client needs an overhaul … Oh, and we need an auto-correct feature … well, auto-complete … actually, search ahead
  • 5. … Top Secret Meeting Minutes • How do we use auto-­‐complete today? • What are we searching over? • How fast can a person type? • What are we going to say in response? • When do we have to launch this?
  • 6. Characteristics • Searches march from le; to right • Expect the first term to be highly relevant • Term order and proximity are clues • Spaces are now really important • Expect mixed query types • AbbreviaCons and misspellings are common • People can type really fast (but generally less than 10 keystrokes per sec) • Users frequently want to browse
  • 7. Requirements Fast, Like really fast 140 milliseconds maximum response time
  • 8. Methodology Some opCmizaCons can be planned Others need to be discovered Test alternaCves – opCmize low hanging fruit early Finally: Take it to task
  • 10. The Data: Categories Franchises Locations • Neighborhoods to Countries Points of Interest • Airports • Businesses • Landmarks Addresses • Individual • Block (Interpolated) In all – over 10 Billion unique documents
  • 11. Architecture Solr API Clusters Mobile Client Mobile App API-­‐East Targeted LocaCon Business Address 1 Address 2 API-­‐West Targeted: 4 VMs 1 shard, 283,000 docs Frequent Low Volume Updates Loca7on: 3 VMs 1 shard, 4.3 million docs Frequent Low Volume Updates Business: 5 VMs 1 shard, 13.4 million docs Heavy Updates Address: 30 VMs 10 shards, 100 million docs No Updates Interpolated Address: 30 VMs 10 shards, 10 billion docs* No Updates
  • 12. Special Cases Business data Ø Complex synonyms Ø Stemming needs Ø The memory factor Ø Complex query patterns Addresses Ø So many! Ø Nested structure Ø Interpolated positions Ø Updates an issue Airports Ø Airport codes Ø International issues Locations Ø International issues Ø Relevance
  • 13. Move Analysis to the ETL A typical job includes: • Basic text processing / cleansing • Stemming • Synonyms and subsCtuCon • Cloning • Filtering • Various permutaCons • RegionalizaCon • Pre-­‐calculaCng relevance
  • 14. Custom Doc Routing Address data won’t fit in memory or perform well … Both collections are sharded so the size on disk is around 6-8 GB Initial, naïve balancing wasn’t nearly good enough Optimization problem that accounts for: - Size on disk - Predicted query volumes - FST load (entropy)
  • 15. Setting Up the Indexes Clean up schema.xml and solrconfig.xml Exact and Fuzzy queries tested – String fields WIN! (Thank you FST and prefix queries!) Geo-sensitivity made easy using Spatial4J (Thank you David Smiley!) Optimization required No NRT functionality needed
  • 16. Query-Time Considerations Jetty -­‐ <New class=“java.uCl.concurrent.ArrayBlockingQueue”> -­‐ Limit thread pool based on projected need Filters used judiciously Pull in a single field from the indexes for display. Shard/route aware clients used for Addresses Estimate caching needs
  • 17. The API has to be Fast Too Pool as many resources as it makes sense A Note on connection pools: - The DefaultHttpClient avoids key registry overhead - Ask for keep-alive support - Balance pool according to use Thread level caching used to avoid ClassLoader overhead Take out some insurance with TTLs Solr Query HfpClient Executors
  • 18. Keep Queries Simple Federate a larger number of queries Break queries out by type and expectation Use custom search handlers to move the burden of “tough” queries to Solr Special case: Ø Interpolated Addresses Ø Business Names Collec7on Query Count Category 3 Franchise 3 Airport 1 CriCcal Address 1 LocaCons 4 Businesses 3 Addresses (both) 2 each
  • 19. At this point the service is up and running … but the fun has only begun
  • 20. Getting Ready to Test Choose your tool set … Ø Test Suite (JMeter) Ø Application Monitoring (VisualVM) Ø GC Monitoring (VisualGC) Ø On Host tools (top, pidstat) Ø Runtime exposure (JMX, jsvc) Ø Offline analysis (JMeter, GCHisto)
  • 21. Set Boundary Conditions Production Query Volume • What is the expected peak QPS • Estimate 50th, 75th percentiles Know what success looks like: • What availability are you looking for? • What about latency? • Caching success? Know what failure looks like: • When do you consider a machine maxed out?
  • 22. So, Let’s Talk About …
  • 23. Memory Settings Max Heap = anticipated index size in memory + delta for new gen Min Heap = Max Heap to limit HotSpot optimizations -Xmx = -Xms Sizing the new generation (-Xmn): Ø Start with around 1/3 of your heap size Ø Set the Survivor space (-XX:SurvivorRatio=15) Determine the Eden Space: eden = -Xmn - 2 * ( -Xmn / 15 )
  • 24. Example 7 GB Index + 3 GB for new generation: -Xms10G -Xmx10G -Xmn3G -XX:SurvivorRatio=15 -XX:PermSize=64m -XX:MaxPermSize=64m Survivor Size: 3 GB / 15 = 205 MB Eden Space: 3 GB – 2 * 205 MB = 2.7 GB
  • 25. Baseline JVM Settings Simple and verbose -verbose:gc -XX:HeapDumpPath=/logs/solr_heap.hprof -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:/logs/gc.log -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
  • 26. Other Settings We Use TargetSurvivorRatio=70 MaxTenuringThreshold=5 PretenureSizeThreshold=64m CMSFullGCsBeforeCompaction=1 CMSInitiatingOccupancyFraction=70 CMSTriggerPermRatio=80 CMSMaxAbortablePrecleanTime=6000 +CMSScavengeBeforeRemark +UseCMSInitiatingOccupancyOnly +CMSParallelRemarkEnabled +ParallelRefProcEnabled
  • 27. Establish Single Test Thread Settings <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true"> <intProp name="calcMode">0</intProp> <doubleProp> <name>throughput</name> <value>1600.0</value> <savedValue>0.0</savedValue> </doubleProp> </ConstantThroughputTimer>
  • 28. Test Cycle Monitor Record Evaluate ? JVM Page Faults CPU GC Rates Threading Context Switches Locks Swapping Network Traffic Availability Throughput Latency Thread Count Have I met my exit condiCons? Add More Threads
  • 29. Monitoring the JVM Watch your application come to life! Memory Steady States: • Old GeneraCon: ⅓ to ¼ the size of your sepngs • Permanent GeneraCon: ½ its size Tenure histogram sizes should drop off … this is your ideal level 14000 12000 10000 8000 6000 4000 2000 0 Tenure Size 1 2 3 4 5 Tenure Size
  • 30. Monitoring Solr Caches The UI is a wealth of information! Cache Strategy Ø Size Ø Type Look at the hit and eviction statistics Use “binary sizing” to walk the sizes up until there are diminishing returns <filterCache class="solr.LRUCache" size="8384" initialSize="8384" autowarmCount="0"/> <documentCache class="solr.LRUCache" size="8384" initialSize="8384" autowarmCount="0"/>
  • 31. JVM Tuning Strategies Smaller eden spaces result in: Ø more frequent minor GCs Ø a higher probability of premature promotion Ø the best performance Watch out for too much eager promotion and lengthening major GCs Mitigate major GC STW pauses by: Ø Keeping the old generation as small as possible Ø Maybe even a little smaller Ø Turn off swapping Ø Consider explicit GC
  • 32. Bookkeeping Demo … VisualVM GCHisto Performance Stats
  • 33. Planning for the Future What we used to do predictive expansion: 1) Target max VM capacity 2) Matching QPS 3) Breakdown of traffic load 4) Scaling factor
  • 34. Conclusions 7 Habits of Highly Effective Tuners 1. Know where you’re going 2. Know where you’re starting from 3. Test incrementally 4. Monitor with intent 5. Make small changes 6. Know when to stop 7. Plan ahead
  • 35. Questions? Darren Spehr darren.spehr@mapquest.com
  • 36. Resources VisualVM VisualGC GCHisto Java Performance – Hunt and John The Garbage Collection Handbook – Jones, Hosking and Moss Solr In Action – Grainger and Potter