VSS备份导致自定义Windows服务失败

问题描述 投票:0回答:1

我在vb.net中构建了自定义Windows服务,它运行在计时器上并查找远程目录中的文件进行处理。在几台服务器上,当VSS服务失败时,大约在晚上10:04左右,它们在相同的确切时间失败而没有任何错误。服务错误如下所示:

'进程无法访问文件filename.txt,因为它正由另一个进程使用。

有时没有错误,但服务挂起。我假设这是VSS服务。无论如何,CPU都会出现大幅高峰,最高可达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
windows vb.net service timer volume-shadow-service
1个回答
0
投票

更新:

从来没有想过这样的简单解决方案,但在任务管理器中,我右键单击该服务并将优先级设置为“Realtime”,希望备份期间的高CPU负载不会影响服务。到现在为止还挺好。

这可以以编程方式完成,因此每次服务重新启动时都具有更高的优先级。这是在我的OnStart()中:

VB.net:

System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime
© www.soinside.com 2019 - 2024. All rights reserved.