NetWorker:プロセスごとのメモリーまたはCPU使用率が高い場合のトラブルシューティング
Summary: このKBでは、プロセスによるメモリーやCPUの使用率が高い場合のトラブルシューティング方法の概要について説明します。
Instructions
NetWorker関連の問題のトラブルシューティング中に、1つ以上のプロセスが大量のコンピューティング リソースを消費していると判断される場合があります。top や Windows タスク マネージャーなどのオペレーティング システム コマンドは、システムの使用状況のポイントインタイムの洞察を提供する場合があります。ただし、特定のウィンドウにわたるシステム リソースの使用状況を取得し、他のシステム ログと比較することもできます。
NetWorkerのログとプロセスの詳細については、以下を参照してください。
このKBでは、オペレーティング システムの機能とログを使用する方法について説明します。スクリプトを使用しないアプローチ: NetWorker:「nsrwatchユーティリティーを使用してNetWorkerで明らかなハングをトラブルシューティングする方法(英語)」を参照してください。
Microsoft Windows:
Microsoft Windowsシステムには、タスクマネージャやパフォーマンスモニタなど、特定のプロセスによるリソースの使用状況を監視するために使用できるいくつかのグラフィカルツールがあります。このKBでは、タイムスタンプを取得して、ユーザー定義の間隔で指定したプロセスのCPUとメモリーの使用量を表示できるシンプルなバッチ スクリプトについて説明します。
まず、監視する必要があるプロセスを決定する必要があります。これは、問題によって異なる場合があります。[NetWorkerプロセスとポート]は、プロセスの名前とその処理内容を絞り込むのに役立ちます。
NetWorkerサーバー上のプロセスは、次の方法で識別できます。
- タスク マネージャー。
- タスクリスト
- nsrrpcinfo-p localhost (NetWorkerサーバーまたはNetWorker拡張クライアント パッケージが必要)。
1.以下を含む.batスクリプトを作成します。
@echo OFF
: x
wmic os get LocalDateTime /value >> performance_monitor.out
wmic path win32_perfformatteddata_perfproc_process where IDProcess="PID" get Name, PercentProcessorTime, PrivateBytes, IDProcess /format:list >> performance_monitor.out
timeout INTERVAL_IN_SECONDS
goto x
ここで、
PID = 監視するプロセスのプロセス ID。
INTERVAL_IN_SECONDS = レポートが実行される間隔の秒数を表す数値。
2.スクリプトを process-monitor.bat として、選択した場所に保存します。
3.管理者コマンド プロンプトを開き、スクリプトが保存されたディレクトリーに 「cd 」で移動します。
4.スクリプトを実行します。

これにより、スクリプトが実行されたディレクトリーに process-monitor.out ファイルが作成されます。ファイルには次のものが含まれます。
LocalDateTime=20240307112701.555000-300
IDProcess=6436
Name=nsrd
PercentProcessorTime=0
PrivateBytes=23605248
LocalDateTime=20240307112723.266000-300
IDProcess=6436
Name=nsrd
PercentProcessorTime=0
PrivateBytes=23605248
LocalDateTime=20240307112729.634000-300
IDProcess=6436
Name=nsrd
PercentProcessorTime=0
PrivateBytes=23605248
LocalDateTime=20240307112735.457000-300
IDProcess=6436
Name=nsrd
PercentProcessorTime=0
PrivateBytes=23670784
ここで、
LocalDateTime = 日付と時刻は YYYYMMDDHHMMSS として表示されます
IDProcess = スクリプトに入力されたPID。
Name = PIDが関連付けられているプロセスの名前。
PercentProcessorTime = このプロセスのすべてのスレッドがプロセッサを使用して命令を 100 ナノ秒で実行した経過時間を返します
PrivateBytes = このプロセスが他のプロセスと共有できないメモリに割り当てた現在のバイト数。
5.スクリプトを停止するには、 CTRL+C を使用して、スクリプトを停止または続行するように求められます。
これらの値はNetWorkerコードの一部ではなく、Microsoftの記事 https://learn.microsoft.com/en-us/previous-versions/aa394323(v=vs.85)に詳述されています。
Linuxの場合
Linuxサーバーでは、 top などのツールを使用して、プロセスのシステムリソースの使用状況を監視できます。 このKBでは、タイムスタンプを取得して、ユーザー定義の間隔で指定したプロセスのCPUとメモリーの使用量を表示できるシンプルなシェル スクリプトについて説明します
1.SSH経由でNetWorkerサーバーにログインします。
2.rootに切り替えます。
sudo su -
3.監視するNetWorkerプロセスのPIDを取得します。
ps -ef | grep nsr
4.以下を含む.shを作成します。
vi process_monitor.sh
#!/bin/bash
#Get Date
cat /proc/meminfo > /tmp/`hostname`_monitor-pid.out
cat /proc/cpuinfo >> /tmp/`hostname`_monitor-pid.out
#Monitor PID
while true; do
echo "Press [CTRL+C] to stop the loop."
DATE=$(date +%Y/%m/%d-%H:%M:%S)
echo -e "\\n$DATE" >> /tmp/`hostname`_monitor-pid.out ; ps -p PID -o %cpu,%mem,cmd >> /tmp/`hostname`_monitor-pid.out
# Wait 5 seconds (change as per your discretion)
sleep 5
done
ここで、
PID = 監視するプロセスのプロセス ID。
sleep 5 = 5秒間待機してから再度実行します。この間隔は、お客様の裁量で変更できます。
5.スクリプトを実行可能にします。
chmod +x process_monitor.sh
6.次のスクリプトを実行します。
./process_monitor.sh
nve:~ # ./process_monitor.sh
Press [CTRL+C] to stop the loop.
Press [CTRL+C] to stop the loop.
Press [CTRL+C] to stop the loop.
Press [CTRL+C] to stop the loop.
Press [CTRL+C] to stop the loop.
Press [CTRL+C] to stop the loop.
Press [CTRL+C] to stop the loop.
^C
nve:~ #
7.リソースの過剰使用が疑われる問題を監視または手動で再現する期間、スクリプトを実行したままにします。
8.スクリプトを停止するには、 CTRL+C を使用して、スクリプトを停止または続行するように求められます。
9を使用して停止する必要があります。スクリプトは、/tmpの下に次のシステム ホスト名で出力ファイルを作成します。
nve:~ # ls -l /tmp | grep monitor-pid
-rw------- 1 root root 2030 Jun 3 12:29 nve_monitor-pid.out
ファイルの内容には、スクリプトで指定されたプロセスのCPUとメモリーの使用率を示すタイムスタンプが含まれています。
nve:~ # tail -12 /tmp/nve_monitor-pid.out
2024/06/03-12:28:54
%CPU %MEM CMD
0.0 0.3 /usr/sbin/nsrd
2024/06/03-12:29:02
%CPU %MEM CMD
0.0 0.3 /usr/sbin/nsrd
2024/06/03-12:29:07
%CPU %MEM CMD
0.0 0.3 /usr/sbin/nsrd