我在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
答案 0 :(得分:0)
更新
从未想过这样的简单解决方案,但在任务管理器中,我右键单击该服务并将优先级设置为“Realtime”,希望备份期间的高CPU负载不会影响服务。到目前为止一切都很好。
这可以以编程方式完成,因此每次服务重新启动时都具有更高的优先级。这是我的OnStart():
VB.NET:
{{1}}