Резервные копии VSS вызывают сбой пользовательской службы Windows

Я создал пользовательские службы Windows в vb.net, которые запускаются по таймеру и ищут файлы в удаленном каталоге для обработки. На нескольких серверах они выходят из строя без каких-либо ошибок в одно и то же время, около 22:04, когда происходит сбой службы VSS. Ошибки сервиса выглядят так:

«Процесс не может получить доступ к файлу filename.txt, поскольку он используется другим процессом».

Иногда ошибок нет, но служба зависает. Я предполагаю, что это служба VSS. Несмотря на это, происходит огромный всплеск загрузки ЦП до 100% и обратно. У меня есть журналы (то есть файл выше, в который нельзя записать), которые передают мне всю активность, и каждый процесс обернут в try..catch, который также будет сообщать об исключениях в журналах для меня. Из этого ничего не выходит. Процессы терпят неудачу в случайных частях кода, обычно в таймере опроса, а иногда и в середине обработки без предупреждения. Служба зависает, но говорит, что все еще работает в services.msc.

Кто-нибудь сталкивался с этой проблемой или знает решение? Я думал сделать сервисы многопоточными, чтобы можно было проверить другой в случае зависания одного потока, но я не уверен, решит ли это проблему. Мы попытались предоставить больше ресурсов серверам, и это немного помогло, но не решило проблему полностью. В какие-то дни он перегружается, в какие-то нет. Использую Windows Server 2008 x64.

Заранее спасибо за вашу помощь!

    Public Shared aTimer As New Timers.Timer

    Public Shared Sub SetTimer()
        aTimer.Interval = 60000
        ' Hook up the Elapsed event for the timer.  
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
        aTimer.Enabled = True

    End Sub

    ' The event handler for the Timer.Elapsed event.  
    Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Dim gen = New Service1
        aTimer.Enabled = False
        gen.ProcessEvents() 'This is the main function of the service
        aTimer.Enabled = True
    End Sub

person Andrew Steiger    schedule 15.05.2017    source источник


Ответы (1)


Обновлять:

Никогда не думал о таком простом решении, как это, но в диспетчере задач я щелкнул правой кнопкой мыши службу и установил приоритет «В реальном времени» в надежде, что высокая загрузка ЦП во время резервного копирования не повлияет на службу. Все идет нормально.

Это можно сделать программно, поэтому каждый раз, когда служба перезапускается, она имеет более высокий приоритет. Это в моем OnStart():

ВБ.NET:

System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime
person Andrew Steiger    schedule 25.05.2017