ユーザーのホームディレクトリに対してNFSv4エクスポートを実行しているサーバーがあります。約25人のユーザー(主に開発者/アナリスト)と約40台のサーバーがホームディレクトリのエクスポートをマウントしています。パフォーマンスは悲惨であり、ユーザーは単純なコマンド(lsや小さなテキストファイルの書き込みなど)で数秒の遅延が発生することがよくあります。ホームディレクトリのマウントが分完全にハングし、ユーザーに「許可が拒否されました」というエラーが表示されることがあります。
ハードウェアは、デュアルE5620CPUと8GBRAMを搭載したDellR510です。ハードウェアRAID-6で構成された8台の15k2.5インチ600GBドライブ(Seagate ST3600057SS)と1つのホットスペアがあります。 RAIDコントローラは、512MBキャッシュを備えたDell PERC H700です(LinuxではこれをLSI MegaSAS 9260と見なしています)。 OSはCentOS5.6、ホームディレクトリパーティションはext3で、オプションは「rw、data = journal、usrquota」です。
2つの仮想ディスクをOSに提示するようにHWRAIDを構成しています。OS用の/ dev/sda(ブート、ルート、およびスワップパーティション)とホームディレクトリ用の/ dev/sdbです。
私が興味深く、疑わしいと思うのは、sdaデバイスにはOSしか含まれていないにもかかわらず、使用率が非常に高いことが多いということです。この仮想ドライブはほぼ常にアイドル状態であると思います。 「free」と「vmstat」によると、システムはスワップしていません。このデバイスに大きな負荷がかかるのはなぜですか?
これがiostatからの30秒のスナップショットです。
Time: 09:37:28 AM
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 44.09 0.03 107.76 0.13 607.40 11.27 0.89 8.27 7.27 78.35
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 0.00 44.09 0.03 107.76 0.13 607.40 11.27 0.89 8.27 7.27 78.35
sdb 0.00 2616.53 0.67 157.88 2.80 11098.83 140.04 8.57 54.08 4.21 66.68
sdb1 0.00 2616.53 0.67 157.88 2.80 11098.83 140.04 8.57 54.08 4.21 66.68
dm-0 0.00 0.00 0.03 151.82 0.13 607.26 8.00 1.25 8.23 5.16 78.35
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.67 2774.84 2.80 11099.37 8.00 474.30 170.89 0.24 66.84
dm-3 0.00 0.00 0.67 2774.84 2.80 11099.37 8.00 474.30 170.89 0.24 66.84
iotopは、この種の問題を探り出すために使用する理想的なツールのようです。しかし、私はCentOS 5.6を使用しています。これには、そのプログラムをサポートするのに十分な新しいカーネルがありません。
どのプロセスが大量のディスクI/Oを引き起こしているのかを判断しますか? を調べました。iotopの他に、提案の1つは「echo1>/proc/sys/vm/block_dump」を実行すると言われています。私はそれを行いました(カーネルメッセージをtempfsに送信した後)。約13分で、約70万回の読み取りまたは書き込みがあり、約半分はkjournaldから、残りの半分はnfsdからのものでした。
# egrep " kernel: .*(READ|WRITE)" messages | wc -l
768439
# egrep " kernel: kjournald.*(READ|WRITE)" messages | wc -l
403615
# egrep " kernel: nfsd.*(READ|WRITE)" messages | wc -l
314028
価値があるのは、この1時間、ホームディレクトリドライブの使用率が常に90%を超えていることです。私の30秒のiostatは、次のような出力を表示し続けます。
Time: 09:36:30 PM
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 6.46 0.20 11.33 0.80 71.71 12.58 0.24 20.53 14.37 16.56
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda2 0.00 6.46 0.20 11.33 0.80 71.71 12.58 0.24 20.53 14.37 16.56
sdb 137.29 7.00 549.92 3.80 22817.19 43.19 82.57 3.02 5.45 1.74 96.32
sdb1 137.29 7.00 549.92 3.80 22817.19 43.19 82.57 3.02 5.45 1.74 96.32
dm-0 0.00 0.00 0.20 17.76 0.80 71.04 8.00 0.38 21.21 9.22 16.57
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 687.47 10.80 22817.19 43.19 65.48 4.62 6.61 1.43 99.81
dm-3 0.00 0.00 687.47 10.80 22817.19 43.19 65.48 4.62 6.61 1.43 99.82
より簡単なアプローチは、OSパッケージをアップグレードすることです。
CentOS 5.7間違いなくiotopを使用できます 。 Red HatはプロセスごとにバックポートIOアカウンティング)を2.6.18-144カーネルに戻し、iotopが機能するのを見始めました。 2011年のどこかでRPMForgeパッケージを介して。 RedHatはiotop
を標準OSの一部にしました 2012年。5.7システムでは...
[root@Tantalalicious ~]# cat /etc/issue
CentOS release 5.7 (Final)
Kernel \r on an \m
[root@Tantalalicious ~]# uname -a
Linux Tantalalicious 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@Tantalalicious ~]# iotop
Total DISK READ: 25.54 M/s | Total DISK WRITE: 87.03 K/s
TID PRIO USER< DISK READ DISK WRITE SWAPIN IO COMMAND
31441 be/4 465 0.00 B/s 0.00 B/s 0.00 % 0.00 % -bash
31540 be/4 465 0.00 B/s 0.00 B/s 0.00 % 0.00 % dbc
22587 be/4 admin 0.00 B/s 0.00 B/s 0.00 % 0.00 % sh
22588 be/4 admin 0.00 B/s 0.00 B/s 0.00 % 0.00 % sh
これが答えの取り締まりだとは思わないでください...しかし、現時点では、古いOSを実行する理由はありません。 EL 5.8は安定し、多くのバグを修正し、必要なプロファイリングツール(iotop)にアクセスできるようにしました。 Linux I/Oエレベータ および ハードウェアRAIDコントローラを調整 はすでに変更されていると思います。
lsof
を使用して、開いているファイルを一覧表示できます。何が使用されているかを判断するのに役立つ場合があります。
一般的なパフォーマンスチューニングを調べます。たとえば、RAIDコントローラーでライトバックキャッシュが有効になっていることを確認し、noatimeを使用してext3およびnfs共有をマウントし、rsize/wsizeを調整します。必要がない限り、noacを使用してnfsをマウントしないでください。