.NET Windows服务重新启动服务器

.NET Windows服务重新启动服务器,.net,vb.net,windows-services,.net,Vb.net,Windows Services,我开发了一个Windows服务,它按计划备份我的文件和文件夹。它执行以下任务: 1-读取文件夹和文件的列表 2-将它们压缩并放在临时目录中(将大文件分成50MB的块) 3-将临时文件夹的内容上载到FTP 4-删除临时文件夹 现在临时文件夹的大小可能在3GB左右,并且服务每天运行两次。现在我的服务器随机重启(不是在服务创建或上传数据期间),我开始认为这可能是导致服务器重启的i/O问题 在.NET中优化服务器的最佳方法是什么?我可以将PriorityClass设置为低于正常值,但我认为这不会有帮助。

我开发了一个Windows服务,它按计划备份我的文件和文件夹。它执行以下任务:

1-读取文件夹和文件的列表

2-将它们压缩并放在临时目录中(将大文件分成50MB的块)

3-将临时文件夹的内容上载到FTP

4-删除临时文件夹

现在临时文件夹的大小可能在3GB左右,并且服务每天运行两次。现在我的服务器随机重启(不是在服务创建或上传数据期间),我开始认为这可能是导致服务器重启的i/O问题

在.NET中优化服务器的最佳方法是什么?我可以将PriorityClass设置为低于正常值,但我认为这不会有帮助。我的onStart看起来像这样

Protected Overrides Sub OnStart(ByVal args() As String)
    ' Add code here to start your service. This method should set things
    ' in motion so your service can do its work.
    Try
        Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.BelowNormal
        Dim s As New BackupLibraryV2.main
    Catch ex As Exception
        BackupLibraryV2.util.LogEntry("", ex.Message, DateTime.Now, DateTime.Now)
    End Try

End Sub
(我应该在新线程中启动服务吗?)

有没有其他建议,我可以尝试优化我的服务器,以减少CPU密集度

以下是重新启动日志:

crash dump file: C:\Windows\Minidump\120212-14227-01.dmp
This was probably caused by the following module: ntoskrnl.exe (nt+0x7EFC0) 
Bugcheck code: 0x3B (0xC0000005, 0xFFFFF800019A7382, 0xFFFFF88008DFA9E0, 0x0)
Error: SYSTEM_SERVICE_EXCEPTION
file path: C:\Windows\system32\ntoskrnl.exe
product: Microsoft® Windows® Operating System
company: Microsoft Corporation
description: NT Kernel & System
Bug check description: This indicates that an exception happened while executing a routine that transitions from non-privileged code to privileged code. 
This appears to be a typical software driver bug and is not likely to be caused by a hardware problem. 
The crash took place in the Windows kernel. Possibly this problem is caused by another driver that cannot be identified at this time.

崩溃不太可能是由应用程序代码引起的。事件日志中的语句

这似乎是一个典型的软件驱动程序错误

这可能是正确的

由于应用程序正在执行大量IO,因此可能会在IO子系统驱动程序中引发问题。您的IO系统是否使用Windows安装中未提供的驱动程序,或者您是否从制造商处更新了IO驱动程序?如果是,请尝试运行较旧版本的驱动程序

我应该在新线程中启动服务吗

OnStart事件处理程序应立即将控制权返回给系统。在单独的线程上进行处理

我可以将PriorityClass设置为低于正常值,但我认为这不会有帮助

BelowNormal对于这样的后台任务可能是一个合理的设置(取决于服务器的其他功能),但您是对的,它不应该影响服务器的重新启动

有没有其他建议,我可以尝试优化我的服务器,以减少CPU密集度


您为什么担心CPU利用率?是从邮政局来的吗?如果是的话,你可以考虑使用7Zip。它是免费的,可以从命令行调用,也可以从.NET程序链接,使您能够设置所需的压缩级别(更高的压缩=更多的CPU和内存使用),并允许您控制用于压缩的线程数。如果需要,它与ZIP兼容,并且还提供高级的专有.7z压缩格式。

崩溃不太可能是由应用程序代码引起的。事件日志中的语句

这似乎是一个典型的软件驱动程序错误

这可能是正确的

由于应用程序正在执行大量IO,因此可能会在IO子系统驱动程序中引发问题。您的IO系统是否使用Windows安装中未提供的驱动程序,或者您是否从制造商处更新了IO驱动程序?如果是,请尝试运行较旧版本的驱动程序

我应该在新线程中启动服务吗

OnStart事件处理程序应立即将控制权返回给系统。在单独的线程上进行处理

我可以将PriorityClass设置为低于正常值,但我认为这不会有帮助

BelowNormal对于这样的后台任务可能是一个合理的设置(取决于服务器的其他功能),但您是对的,它不应该影响服务器的重新启动

有没有其他建议,我可以尝试优化我的服务器,以减少CPU密集度


您为什么担心CPU利用率?是从邮政局来的吗?如果是的话,你可以考虑使用7Zip。它是免费的,可以从命令行调用,也可以从.NET程序链接,使您能够设置所需的压缩级别(更高的压缩=更多的CPU和内存使用),并允许您控制用于压缩的线程数。如果需要的话,它可以与ZIP兼容,并且还提供了一种高级的、专有的.7z压缩格式。

听起来不像是Windows服务的用户模式错误,因为它不太可能切换到内核模式。那么kenny,你认为这是另外一种吗?我担心的原因是我几天前将它部署到服务器上,今天服务器重新启动时出现了意外错误。是的,这是我的猜测。虽然你的应用程序可能会给失败的IO子系统增加压力。你是否让运行你的服务的服务器停止运行以查看错误是否仍然发生?请查看应用程序日志部分的事件日志。它应该有一个包含堆栈跟踪的服务错误条目。这听起来不像是Windows服务的用户模式错误,因为它不太可能将上下文切换到内核模式。那么kenny,你认为是其他原因吗?我担心的原因是我几天前将它部署到服务器上,今天服务器重新启动时出现了意外错误。是的,这是我的猜测。虽然你的应用程序可能会给失败的IO子系统增加压力。你是否让运行你的服务的服务器停止运行以查看错误是否仍然发生?请查看应用程序日志部分的事件日志。它应该有一个包含堆栈跟踪的服务的错误条目。谢谢Eric的详细回答,我检查了应用程序日志,什么都没有发现。我正在使用Ionic.dll进行zip操作。你认为我是否在onStart事件中启动一个新线程很重要,或者它现在的设置方式很好?@highwingers:我无法从你的代码中判断新线程的启动位置。行
Dim作为新的BackupLibraryV2.main构建一个新对象。它是否也开始运行一个新线程?当OnStart返回时,我会认为
s
将超出范围并接受垃圾收集,但是我的VB.Net从来都不好(这就是C#的情况)。简短的回答,是的,开始新的生活