0

スケジュールに基づいてファイルとフォルダのバックアップを実行するWindowsサービスを開発しました。次のタスクを実行します。

1-フォルダとファイルのリストを読み取ります

2-それらを圧縮して一時ディレクトリに配置します(大きなファイルを50MBのチャンクに分割します)

3-一時フォルダのコンテンツをFTPにアップロードします

4-一時フォルダを削除します

現在、一時フォルダのサイズは約3GBになる可能性があり、サービスは1日2回のように実行されます。これで、サーバーがランダムに再起動します(サービスがデータを作成またはアップロードしている間ではありません)。これは、サーバーを再起動する原因となるI/Oの問題である可能性があると考え始めています。

.NETでサーバーを最適化するための最良の方法は何ですか?PriorityClassをBelowNormalに設定できますが、役に立たないと思います。私の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.
4

1 に答える 1

3

クラッシュがアプリケーションコードによって引き起こされる可能性はほとんどありません。イベントログのステートメント

これは典型的なソフトウェアドライバのバグのようです

おそらくスポットです。

アプリケーションはかなりの量のIOを実行しているため、IOサブシステムドライバーで問題が発生する可能性があります。Windowsインストールの一部として提供されていないドライバーを使用するIOシステムがありますか、それともメーカーのIOドライバーを更新しましたか?その場合は、古いバージョンのドライバーを実行してみてください。

新しいスレッドでサービスを開始する必要がありますか?

OnStartイベントハンドラーは、すぐにシステムに制御を戻す必要があります。別のスレッドで処理を実行します。

PriorityClassをBelowNormalに設定できますが、役に立たないと思います

以下は、おそらくこのようなバックグラウンドタスクの妥当な設定です(サーバーが他に何をするかによって異なります)が、その通り、サーバーの再起動にまったく影響を与えないはずです。

CPUをあまり使用しないようにサーバーを最適化するために試すことができる他の提案はありますか?

なぜCPU使用率を心配しているのですか?ZIP操作によるものですか?その場合は、7Zipの使用を検討してください。これは無料で、コマンドラインから呼び出すことも、.NETプログラムからリンクすることもでき、必要な圧縮レベル(より高い圧縮=より多くのCPUとメモリの使用)を設定する機能を提供し、圧縮に使用されるスレッド。必要に応じてZIPと互換性があり、優れた独自の.7z圧縮形式も提供します。

于 2012-12-02T21:48:10.563 に答える