我在 vb.net 中构建了自定义 Windows 服务,这些服务在计时器上运行并在远程目录中查找要处理的文件。在一些服务器上,它们在同一时间(大约晚上 10 点 04 分 VSS 服务失败时)失败而没有任何错误。服务错误如下所示:
“该进程无法访问文件 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