2017-05-15 55 views
0

vb.net에서 타이머를 실행하고 처리 할 원격 디렉터리의 파일을 찾는 사용자 지정 Windows 서비스를 작성했습니다. VSS 서비스가 실패하면 오후 10시 4 분 경 약간의 서버에서 정확한 시간에 오류없이 오류가 발생합니다. 서비스 오류는 다음과 같습니다 :VSS 백업으로 인해 사용자 지정 Windows 서비스가 실패합니다.

'프로세스가 다른 프로세스에서 사용 중이므로 filename.txt 파일에 액세스 할 수 없습니다.'

때때로 오류는 없지만 서비스가 중단됩니다. 이것이 VSS 서비스라고 가정합니다. 그럼에도 불구하고 CPU에는 최대 100 %의 거대한 스파이크가 있으며 다시 가동됩니다. 모든 활동을 나에게 릴레이하는 로그 (위의 파일은 쓸 수 없습니다)가 있으며 각 프로세스는 try..catch로 래핑되어 있습니다.이 시도는 또한 로그를 예외로보고합니다. 이 일은 아무것도 일어나지 않습니다. 프로세스는 일반적으로 폴링 타이머와 때로는 경고없이 처리 중간에 코드의 무작위 부분에서 실패합니다. 서비스가 중지되지만 여전히 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 

답변

0

업데이트 :

이 같은 간단한 솔루션의 생각도 못 했어하지만, 작업 관리자에서, 나는 바로 서비스를 클릭하고 희망에 우선 순위를 "실시간"으로 설정하는 높은 CPU 부하 백업 중에는 서비스에 영향을 미치지 않습니다. 여태까지는 그런대로 잘됐다.

이 작업은 프로그래밍 방식으로 수행 할 수 있으므로 서비스를 다시 시작할 때마다 우선 순위가 높아집니다.

VB.NET :

System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime 
이 내 ONSTART()에