Сайт умирает через столько времени? - PullRequest
1 голос
/ 26 сентября 2011

У меня есть сайт, делающий вещи, которые я никогда раньше не видел.Мой сервер - Win 2003 с IIS6. Я использую C # и .Net 4.0.

Сайт представляет собой веб-сайт по недвижимости, в котором данные хранятся непосредственно в моей базе данных.Некоторое время сайт будет отлично работать, а потом просто умрет.Я имею в виду, что вы попытаетесь просмотреть сведения о недвижимости, и загрузка сайта займет 2-3 минуты, если он вообще загрузится.Если я просто заново сохраню файл web.config и повторно загрузлю его, чтобы перезапустить приложение, оно некоторое время будет работать нормально, а затем снова умрет.Это продолжается снова и снова.Я пошел в локальную копию, в то время как живой сайт «умер», и локальная копия будет работать нормально, а затем она умрет через столько же времени.Время, которое уходит на это, варьируется от 5 до 30 минут, я думаю, это связано с количеством запросов.

Кто-нибудь знает, что может происходить?Единственный запрос данных на странице - это получение основных данных, которые являются запросом LINQ ниже:

public Listing GetListingByMLNumber(string MLNumber)
{
    try
    {
        DatabaseDataContext db = new DatabaseDataContext();
        var item = (from a in db.Listings
                    where a.ML_.ToLower() == MLNumber.ToLower()
                    select a).FirstOrDefault();

        return item;
    }
    catch (Exception ex)
    {
        Message = ex.Message;
        return null;
    }
}

Ответы [ 3 ]

2 голосов
/ 26 сентября 2011

Не закрытие контекста базы данных выделяется как очевидная ошибка в предоставленном вами коде. Оберните его в оператор using, чтобы убедиться, что он правильно расположен.

Пока контекст существует, вы будете удерживать соединение SQL, которое является ограниченным ресурсом. Вы также будете тратить память, отслеживая изменения возвращенных вами объектов. Учитывая ваш код, в какой-то момент контекст должен собираться мусором, но это все еще может быть проблемой (И, независимо от того, является ли это проблемой, вы должны утилизировать контексты базы данных).

Попробуйте выполнить локальное тестирование, чтобы увидеть, можете ли вы воспроизвести проблему. Если вы можете, то используйте отладчик, чтобы выяснить проблему. Если нет, то вам, вероятно, нужно добавить ведение журнала, чтобы сузить проблему.

Вы также можете посмотреть на процесс IIS, чтобы узнать, использует ли он абсурдные объемы памяти, дескрипторы и т. Д. Также проверьте параметры IIS для производительности и повторного использования пула приложений, как предлагается в другом ответе здесь.

0 голосов
/ 27 сентября 2011

Если вы когда-нибудь столкнетесь с проблемой такого типа снова, вам следует добавить DebugDiag / ADPlus и WinDBG в ваш диагностический инструментарий.

Когда ваше приложение снова зависает или занимает слишком много времени, чтобы ответить на запросы, тогда перехватитедамп рабочего процесса с использованием DebugDiag или ADPlus.Загрузите это в WinDBG, загрузите SOS (Son of Strike), который является расширением WinDBG для отладки управляемого кода, и начинайте копаться.

У Тесс Феррандез есть большой набор учебных пособий и лабораторных работ по использованию этих инструментов.эффективно:

.NET Отладка Демо - Информация и инструкции по настройке

Они вытащили меня из нескольких солений несколько раз, и это хорошостоит потратить время на ознакомление с ними.

0 голосов
/ 26 сентября 2011

Я бы взглянул на настройки пула приложений, чтобы увидеть, как перерабатываются рабочие процессы, и я бы также посмотрел на вкладке «Быстродействие» в IIS, чтобы узнать, не указан ли порог пропускной способности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...