Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

dada
Apr 3, 2020
  10650
(3 votes)

Why is my Find indexing job freezing and dying?

I recently had a support case which I spent maybe a few hours too many on.

The symptom was a find indexing job running for about 5 minutes, web app froze up and restarted causing the indexing job to fail prematurly. After looking into application logs, cpu and memory usage (which looked good overall) we could see the app were being restarted .

We did profiling with some hints that the scheduled job thread was aborted. We then took a memory dump 4 minutes into the indexing job.

In the memory dump we could see StackOverflowException, OutOfMemoryException and ThreadAbortException.
After some more digging we found a call to a custom IsSearchable() for the same content over and over.
This behaviour was due to self-referencing content and some custom logic that made it index the same content over and over.


For future cases I'm gonna use something like below to more easily identify errors like this without profiling or memory dumps.
Run the indexing job and check the logs for 'This content was recently indexed' and it might give you a hint on what it's getting stuck on.

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class InitializationModule2 : IInitializableModule
{

protected static readonly ILog _logger = LogManager.GetLogger(typeof(ContentIndexer));

public void Initialize(InitializationEngine context)
{

    var previouslyIndexedObjects = new Queue<int>();
    int maxLookBack = 1000;

    ContentIndexer.Instance.Conventions.ForInstancesOf<IContent>().ShouldIndex(x =>
    {

        _logger.Info(string.Format("Attempting to index content ID: {0 } Name: {1}", x.ContentLink.ID.ToString(), x.Name.ToString()));

        if (previouslyIndexedObjects.Contains(x.ContentLink.ID))
        {
            _logger.Error(string.Format("WARNING! This content was recently indexed: {0 } Name: {1}", x.ContentLink.ID.ToString(), x.Name.ToString()));
        }

        if (previouslyIndexedObjects.Count() == maxLookBack) { previouslyIndexedObjects.Dequeue(); }
        previouslyIndexedObjects.Enqueue(x.ContentLink.ID);

    return true;
});


...

Apr 03, 2020

Comments

Please login to comment.
Latest blogs
How to Reset or Complete a Stuck Optimizely DXP Integration Deployment using the Optimizely Deployment API

If you’ve deployed to Optimizely’s Integration environment without specifying the DirectDeploy parameter in your PowerShell command, your deploymen...

Johnny Mullaney | Mar 31, 2025 |

Transitioning to Application Insights Connection Strings: Essential Insights for Optimizely CMS

Transitioning to Application Insights Connection Strings: Essential Insights for Optimizely CMS As part of Microsoft's ongoing modernization effort...

Stefan Johansson | Mar 27, 2025

Save The Date - London 2025 Summer Meetup

Following last years very succesful meetup in London July 2024 https://world.optimizely.com/blogs/scott-reed/dates/2024/7/optimizely-london-dev-mee...

Scott Reed | Mar 25, 2025

Revalidate Page in Next.js after Publishing Content in Headless Optimizely PaaS CMS.

Headless CMS implementations are becoming increasingly popular. In this approach, the CMS and the front-end application are decoupled and can use...

Tomek Juranek | Mar 25, 2025

Getting 404 when expecting 401

A short story about the mysterious behavior of an API in headless architecture.

Damian Smutek | Mar 25, 2025 |

A Free Course for Building Headless Applications with Next.js and Optimizely SaaS CMS

I am excited to announce the transformation of Optimizely Headless CMS webinar into a comprehensive, completely free self-paced course that's...

Szymon Uryga | Mar 24, 2025