VSS 备份导致自定义 windows 服务失败
VSS backups cause custom windows service to fail
我在 vb.net 中构建了自定义 windows 服务 运行 在计时器上,并在远程目录中查找要处理的文件。在一些服务器上,它们在同一时间失败而没有任何错误,大约 10:04PM 当 VSS 服务失败时。服务错误如下所示:
'The process cannot access the file filename.txt because it is being used by another process.'
有时没有错误但服务挂起。我假设这是 VSS 服务。无论如何,CPU 有一个巨大的峰值,最高可达 100%,然后回落。
我有将所有 activity 转发给我的日志(即上面无法写入的文件),并且每个进程都包含在 try..catch 中,它也会为我报告日志异常。没有结果。这些进程在代码的随机部分失败,通常是在轮询计时器中,有时是在处理过程中没有警告。服务挂起,但表示仍在 运行ning services.msc。
有没有人遇到过这个问题或知道解决方法?我正在考虑使服务成为多线程的,以便在一个线程挂起时可以检查另一个,但我不确定这是否能解决问题。我们已尝试为服务器提供更多资源,这似乎有所帮助,但并未完全解决问题。有时它会超载,有时则不会。使用 windows 服务器 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
更新:
没想过这么简单的解决方案,但在任务管理器中,我右键单击该服务并将优先级设置为 "Realtime",希望备份期间的高 CPU 负载不会影响服务。到目前为止一切顺利。
这可以通过编程方式完成,因此每次服务重新启动时它都具有更高的优先级。这是在我的 OnStart():
VB.NET:
System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime
我在 vb.net 中构建了自定义 windows 服务 运行 在计时器上,并在远程目录中查找要处理的文件。在一些服务器上,它们在同一时间失败而没有任何错误,大约 10:04PM 当 VSS 服务失败时。服务错误如下所示:
'The process cannot access the file filename.txt because it is being used by another process.'
有时没有错误但服务挂起。我假设这是 VSS 服务。无论如何,CPU 有一个巨大的峰值,最高可达 100%,然后回落。 我有将所有 activity 转发给我的日志(即上面无法写入的文件),并且每个进程都包含在 try..catch 中,它也会为我报告日志异常。没有结果。这些进程在代码的随机部分失败,通常是在轮询计时器中,有时是在处理过程中没有警告。服务挂起,但表示仍在 运行ning services.msc。
有没有人遇到过这个问题或知道解决方法?我正在考虑使服务成为多线程的,以便在一个线程挂起时可以检查另一个,但我不确定这是否能解决问题。我们已尝试为服务器提供更多资源,这似乎有所帮助,但并未完全解决问题。有时它会超载,有时则不会。使用 windows 服务器 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
更新:
没想过这么简单的解决方案,但在任务管理器中,我右键单击该服务并将优先级设置为 "Realtime",希望备份期间的高 CPU 负载不会影响服务。到目前为止一切顺利。
这可以通过编程方式完成,因此每次服务重新启动时它都具有更高的优先级。这是在我的 OnStart():
VB.NET:
System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime