collectl ユーティリティーを使用した Red Hat Enterprise Linux のパフォーマンス問題をトラブルシューティングする方法
collectl は Red Hat によって出荷もサポートもされていませんが、ユーザーやサードパーティーベンダーによって使用されることがあります。
注記: 現在、Red Hat のエンジニアが github のアップストリーム collectl プロジェクトのメンテナーを務めていますが、Red Hat は依然として RHEL 上の collectl を出荷しておらず、サポートも提供していません。
以下の情報は Red Hat が提供していますが、製品サポートのサービスレベルアグリーメント および 製品サポートの対象範囲 の対象外となります。collectl をインストールしても、システムが Red Hat Global Support Services チームによるサポートを受けられなくなるわけではありません。ただし、collectl は標準の Red Hat Enterprise Linux チャネルには同梱されていないため、Red Hat Global Support Services チームは collectl に関する問題や collectl のインストールおよび使用によって発生する問題をサポートまたはデバッグすることはできません。サードパーティーパッケージのインストールは、サードパーティーパッケージに関連する問題やサードパーティーパッケージによって発生する問題に対する Red Hat のサポートが制限されることをユーザーが理解した上で行うことになります。
collectl の入手方法
collectl コミュニティープロジェクトは https://github.com/sharkcz/collectl ⧉ で管理されており、Fedora コミュニティープロジェクトでも提供されています。
RHEL 6 および RHEL 7 の場合、collectl をインストールする最も簡単な方法は、Extra Packages for Enterprise Linux (EPEL) リポジトリーを使用することです。これは、Fedora コミュニティーによって管理されています。
注記: 以前は、メインのコミュニティープロジェクトは http://collectl.sourceforge.net/⧉ にありました。ただし、現在も存在しており、その Web ページの上部に最新バージョンが 4.3.1 Oct 31、2018 としてリストされています。一方、https://sourceforge.net/projects/collectl/files/collectl/⧉ では、2023 年 6 月時点で利用可能な現在のバージョンが 4.3.8 Feb 07、2023 としてリストされています。更新の主な場所は、sourceforge.net のこの コメント に従って、上記の git ハブ に移動されました。
EPEL リポジトリーを設定するには、次の手順に従ってください。セットアップが完了したら、以下のコマンドで collectl をインストールできます。
# yum install collectl
パッケージは、次のリンクを使用して直接ダウンロードすることもできます。
- RHEL 8 collectl は、collectl が
RHEL 8 EPEL
に追加されるまで、現時点ではSourceforge
から直接ダウンロードする必要があります。
wget https://sourceforge.net/projects/collectl/files/collectl/collectl-4.3.2/collectl-4.3.2.src.tar.gz/download -O /tmp/collectl-4.3.2.src.tar.gz
tar -hxvf /tmp/collectl-4.3.2.src.tar.gz
cd collectl
./INSTALL
cd ../
Note! RHEL9+ need to ensure the Perl-English package is installed.
We have much newer versions on
https://github.com/sharkcz/collectl
It is best to clone that and use the INSTALL script so you get the latest fixes.
systemctl start collectl # start data collection service on host
systemctl enable collectl # optional: enable collectl server to be started at boot time
ls -ltr /var/log/collectl/* # where output from collectl is kept
- RHEL 7 x86_64 https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/
- RHEL 6 x86_64 https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/
- RHEL 5 x86_64 (EPEL アーカイブで入手可能) https://archive.fedoraproject.org/pub/archive/epel/5/x86_64/
注記:
collectl が git repo で利用可能になりました。
以下の簡単な git clone で必要なものを入手できます。
これは一般に公開されていますが、コードの変更とコミットは Red Hat のエンジニアによってのみ維持および更新されます。
https://github.com/sharkcz/collectl.git
git clone 後
# cd collectl
# ./INSTALL
RHEL7 以降の場合
# systemctl start collectl
# systemctl enable collectl
collectl の一般的な使用法
collectl の有効化
collectl ユーティリティーは、コマンドラインを使用して手動で実行することも、サービスとして実行することもできます。データは /var/log/collectl/*.raw.gz
に記録されます。デフォルトでは、ログは 24 時間ごとにローテーションされます。サービスとして実行するには、以下を実行します。
# chkconfig collectl on ## Optional step, enabled in runlevel 3, to start at boot time
# service collectl start
サンプル間隔
コマンドラインから手動で実行する場合、最初の間隔値は 1 になります。
サービスとして実行する場合、デフォルトのサンプル間隔 は以下のようになります。平均化を避けるために、1、30、60 のようにこれらを下げることが望ましい場合もあります。
# grep -i interval /etc/collectl.conf
#Interval = 10
#Interval2 = 60
#Interval3 = 120
ログファイル
デーモンから自動的に実行される場合、出力ログファイルの場所は /etc/collect.conf
設定内で指定されます。この場所は、必要に応じて新しい場所に変更できます。/etc/collectl.conf
を編集し、-f
オプションの後のファイルパスを新しい場所のファイル名に変更します。
grep -i daemoncommands /etc/collectl.conf | grep -v "^#"
DaemonCommands = -f /var/log/collectl -r00:00,7 -m -F60 -s+YZ -i1
collectl を使用したディスクまたは SAN ストレージのパフォーマンスのトラブルシューティング
60 秒間隔で収集されるプロセスデータを除くすべてのデータのデフォルトは 10 秒ですが、ストレージパフォーマンス分析の場合でも、これはそのままにしておくのが最適です。
SAR 等価マトリックス には、経験豊富な SAR ユーザーが Collectl の使用方法を学習できるように、一般的な SAR コマンドの等価性が表示されます。
以下のサンプルコマンドは、/var/log/collectl/HOSTNAME-20130416-164506.raw.gz ファイルの CPU、ネットワーク、ディスクの詳細な概要を表示します。
collectl -scnd -oT -p HOSTNAME-20130416-164506.raw.gz
# <----CPU[HYPER]-----><----------Disks-----------><----------Network---------->
#Time cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
16:46:10 9 2 14470 20749 0 0 69 9 0 1 0 2
16:46:20 13 4 14820 22569 0 0 312 25 253 174 7 79
16:46:30 10 3 15175 21546 0 0 54 5 0 2 0 3
16:46:40 9 2 14741 21410 0 0 57 9 1 2 0 4
16:46:50 10 2 14782 23766 0 0 374 8 250 171 5 75
....
次の例は、17:00 から 17:01 までの 1 分間 の出力を示しています。
collectl -scnd -oT --from 17:00 --thru 17:01 -p HOSTNAME-20130416-164506.raw.gz
# <----CPU[HYPER]-----><----------Disks-----------><----------Network---------->
#Time cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOut
17:00:00 13 3 15870 25320 0 0 67 9 251 172 6 90
17:00:10 16 4 16386 24539 0 0 315 17 246 170 6 84
17:00:20 10 2 14959 22465 0 0 65 26 5 6 1 8
17:00:30 11 3 15056 24852 0 0 323 12 250 170 5 69
17:00:40 18 5 16595 23826 0 0 463 13 1 5 0 5
17:00:50 12 3 15457 23663 0 0 57 9 250 170 6 76
17:01:00 13 4 15479 24488 0 0 304 7 254 176 5 70
次の例では、詳細なディスク データを出力します。
collectl -scnD -oT -p HOSTNAME-20130416-164506.raw.gz
### RECORD 7 >>> tabserver <<< (1366318860.001) (Thu Apr 18 17:01:00 2013) ###
# CPU[HYPER] SUMMARY (INTR, CTXSW & PROC /sec)
# User Nice Sys Wait IRQ Soft Steal Idle CPUs Intr Ctxsw Proc RunQ Run Avg1 Avg5 Avg15 RunT BlkT
8 0 3 0 0 0 0 86 8 15K 24K 0 638 5 1.07 1.05 0.99 0 0
# DISK STATISTICS (/sec)
# <---------reads---------><---------writes---------><--------averages--------> Pct
#Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util
sda 0 0 0 0 304 11 7 44 44 2 16 6 4
sdb 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-0 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-1 0 0 0 0 5 0 1 4 4 1 2 2 0
dm-2 0 0 0 0 298 0 14 22 22 1 4 3 4
dm-3 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-4 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-5 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-6 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-7 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-8 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-9 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-10 0 0 0 0 0 0 0 0 0 0 0 0 0
dm-11 0 0 0 0 0 0 0 0 0 0 0 0 0
# NETWORK SUMMARY (/sec)
# KBIn PktIn SizeIn MultI CmpI ErrsI KBOut PktOut SizeO CmpO ErrsO
253 175 1481 0 0 0 5 70 79 0 0
....
よく使われるオプション
これらは、特定のタイプのすべてのデータの合計であるサマリーを生成します。
- b
- バディー情報 (メモリー断片化 cpu)
- d
- ディスク
- f
- nfs
- i
- inode
- j
- CPU による割り込み
- l
- lustre
- m
- メモリー
- n
- ネットワーク
- s
- ソケット
- t
- tcp
- x
- Interconnect
- y
- Slabs (システムオブジェクトキャッシュ)
これらは通常、デバイスレベルに詳細なデータを生成します (デバイスレベルに限定されるものではなりません)。
- C
- 個々の CPU (sj または sJ の場合の割り込みを含む)
- D
- 個別のディスク
- E
- 環境 (fan、power、temp) [ipmitool が必要]
- F
- nfs データ
- J
- 割り込み番号による CPU による割り込み
- L
- lustre
- M
- メモリー NUMA/ノード
- N
- 個別のネットワーク
- T
- tcp の詳細 (大量のデータ)
- X
- 相互接続ポート/レール (Infiniband/Quadrics)
- Y
- slabs/slubs
- Z
- プロセス
以下は、最も便利なスイッチのリストです。
- -sD
詳細なディスクデータ
- -sC
詳細な CPU データ
- -sN
詳細なネットワークデータ
- -sZ
詳細なプロセスデータ
Comments