0

我在 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
4

1 回答 1

0

更新:

从来没想过这么简单的解决方案,但在任务管理器中,我右键单击该服务并将优先级设置为“实时”,希望备份期间的高CPU负载不会影响服务。到目前为止,一切都很好。

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

VB.NET:

System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime
于 2017-05-25T17:59:34.333 回答