SlideShare a Scribd company logo
1 of 36
Download to read offline
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

What's hot

Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Lucidworks
 
How to make a simple cheap high availability self-healing solr cluster
How to make a simple cheap high availability self-healing solr clusterHow to make a simple cheap high availability self-healing solr cluster
How to make a simple cheap high availability self-healing solr cluster
lucenerevolution
 
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Lucidworks
 

What's hot (20)

SFBay Area Solr Meetup - June 18th: Benchmarking Solr Performance
SFBay Area Solr Meetup - June 18th: Benchmarking Solr PerformanceSFBay Area Solr Meetup - June 18th: Benchmarking Solr Performance
SFBay Area Solr Meetup - June 18th: Benchmarking Solr Performance
 
Deploying and managing Solr at scale
Deploying and managing Solr at scaleDeploying and managing Solr at scale
Deploying and managing Solr at scale
 
Solrcloud Leader Election
Solrcloud Leader ElectionSolrcloud Leader Election
Solrcloud Leader Election
 
Tuning Solr and its Pipeline for Logs: Presented by Rafał Kuć & Radu Gheorghe...
Tuning Solr and its Pipeline for Logs: Presented by Rafał Kuć & Radu Gheorghe...Tuning Solr and its Pipeline for Logs: Presented by Rafał Kuć & Radu Gheorghe...
Tuning Solr and its Pipeline for Logs: Presented by Rafał Kuć & Radu Gheorghe...
 
Scaling SolrCloud to a Large Number of Collections - Fifth Elephant 2014
Scaling SolrCloud to a Large Number of Collections - Fifth Elephant 2014Scaling SolrCloud to a Large Number of Collections - Fifth Elephant 2014
Scaling SolrCloud to a Large Number of Collections - Fifth Elephant 2014
 
Apache SolrCloud
Apache SolrCloudApache SolrCloud
Apache SolrCloud
 
Solr cluster with SolrCloud at lucenerevolution (tutorial)
Solr cluster with SolrCloud at lucenerevolution (tutorial)Solr cluster with SolrCloud at lucenerevolution (tutorial)
Solr cluster with SolrCloud at lucenerevolution (tutorial)
 
Scaling SolrCloud to a large number of Collections
Scaling SolrCloud to a large number of CollectionsScaling SolrCloud to a large number of Collections
Scaling SolrCloud to a large number of Collections
 
Solr Performance Monitoring with SPM
Solr Performance Monitoring with SPMSolr Performance Monitoring with SPM
Solr Performance Monitoring with SPM
 
Lucene Revolution 2013 - Scaling Solr Cloud for Large-scale Social Media Anal...
Lucene Revolution 2013 - Scaling Solr Cloud for Large-scale Social Media Anal...Lucene Revolution 2013 - Scaling Solr Cloud for Large-scale Social Media Anal...
Lucene Revolution 2013 - Scaling Solr Cloud for Large-scale Social Media Anal...
 
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Deploying and managing SolrCloud in the cloud using the Solr Scale ToolkitDeploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
 
Scaling search with SolrCloud
Scaling search with SolrCloudScaling search with SolrCloud
Scaling search with SolrCloud
 
Building a near real time search engine & analytics for logs using solr
Building a near real time search engine & analytics for logs using solrBuilding a near real time search engine & analytics for logs using solr
Building a near real time search engine & analytics for logs using solr
 
GIDS2014: SolrCloud: Searching Big Data
GIDS2014: SolrCloud: Searching Big DataGIDS2014: SolrCloud: Searching Big Data
GIDS2014: SolrCloud: Searching Big Data
 
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
 
How to make a simple cheap high availability self-healing solr cluster
How to make a simple cheap high availability self-healing solr clusterHow to make a simple cheap high availability self-healing solr cluster
How to make a simple cheap high availability self-healing solr cluster
 
Loading 350M documents into a large Solr cluster: Presented by Dion Olsthoorn...
Loading 350M documents into a large Solr cluster: Presented by Dion Olsthoorn...Loading 350M documents into a large Solr cluster: Presented by Dion Olsthoorn...
Loading 350M documents into a large Solr cluster: Presented by Dion Olsthoorn...
 
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
 
Scaling Through Partitioning and Shard Splitting in Solr 4
Scaling Through Partitioning and Shard Splitting in Solr 4Scaling Through Partitioning and Shard Splitting in Solr 4
Scaling Through Partitioning and Shard Splitting in Solr 4
 
Scaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - SematextScaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - Sematext
 

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

Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-FinalSizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Vigyan Jain
 

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

Performance and predictability (1)
Performance and predictability (1)Performance and predictability (1)
Performance and predictability (1)
 
Performance and Predictability - Richard Warburton
Performance and Predictability - Richard WarburtonPerformance and Predictability - Richard Warburton
Performance and Predictability - Richard Warburton
 
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-FinalSizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
 
Everything You Need to Know About Sharding
Everything You Need to Know About ShardingEverything You Need to Know About Sharding
Everything You Need to Know About Sharding
 
Aerospike Go Language Client
Aerospike Go Language ClientAerospike Go Language Client
Aerospike Go Language Client
 
Three Perspectives on Measuring Latency
Three Perspectives on Measuring LatencyThree Perspectives on Measuring Latency
Three Perspectives on Measuring Latency
 
Making (Almost) Any Database Faster and Cheaper with Caching
Making (Almost) Any Database Faster and Cheaper with CachingMaking (Almost) Any Database Faster and Cheaper with Caching
Making (Almost) Any Database Faster and Cheaper with Caching
 
SOLR Power FTW: short version
SOLR Power FTW: short versionSOLR Power FTW: short version
SOLR Power FTW: short version
 
SnappyData Ad Analytics Use Case -- BDAM Meetup Sept 14th
SnappyData Ad Analytics Use Case -- BDAM Meetup Sept 14thSnappyData Ad Analytics Use Case -- BDAM Meetup Sept 14th
SnappyData Ad Analytics Use Case -- BDAM Meetup Sept 14th
 
High Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and SolutionsHigh Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and Solutions
 
How to use Impala query plan and profile to fix performance issues
How to use Impala query plan and profile to fix performance issuesHow to use Impala query plan and profile to fix performance issues
How to use Impala query plan and profile to fix performance issues
 
Fastest Servlets in the West
Fastest Servlets in the WestFastest Servlets in the West
Fastest Servlets in the West
 
Aerospike Hybrid Memory Architecture
Aerospike Hybrid Memory ArchitectureAerospike Hybrid Memory Architecture
Aerospike Hybrid Memory Architecture
 
Performance tuning jvm
Performance tuning jvmPerformance tuning jvm
Performance tuning jvm
 
Making (Almost) Any Database Faster and Cheaper with Caching
Making (Almost) Any Database Faster and Cheaper with CachingMaking (Almost) Any Database Faster and Cheaper with Caching
Making (Almost) Any Database Faster and Cheaper with Caching
 
High Performance With Java
High Performance With JavaHigh Performance With Java
High Performance With Java
 
Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey
 
Presto at Tivo, Boston Hadoop Meetup
Presto at Tivo, Boston Hadoop MeetupPresto at Tivo, Boston Hadoop Meetup
Presto at Tivo, Boston Hadoop Meetup
 
EVCache: Lowering Costs for a Low Latency Cache with RocksDB
EVCache: Lowering Costs for a Low Latency Cache with RocksDBEVCache: Lowering Costs for a Low Latency Cache with RocksDB
EVCache: Lowering Costs for a Low Latency Cache with RocksDB
 
Tweaking performance on high-load projects
Tweaking performance on high-load projectsTweaking performance on high-load projects
Tweaking performance on high-load projects
 

More from Lucidworks

Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Intelligent Insight Driven Policing with MC+A, Toronto Police Service and Luc...
Lucidworks
 

More from Lucidworks (20)

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

Recently uploaded

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Recently uploaded (20)

WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 

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

  • 1.
  • 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