暫く前に HP サーバーをセットアップした時のこと。
- Proliant DL380e
- RHEL5.9
- HP Service Pack for ProLiant (2013.02.0)
SPP (Service Pack for ProLiant)をインストールした途端、サーバーに断続的な負荷が掛かるようになった。
# top
top - 18:43:29 up 2:31, 3 users, load average: 0.36, 0.37, 0.30
Tasks: 183 total, 2 running, 181 sleeping, 0 stopped, 0 zombie
Cpu0 : 41.9%us, 1.0%sy, 0.0%ni, 57.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 23.0%us, 1.0%sy, 0.0%ni, 76.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 7.6%us, 0.3%sy, 0.0%ni, 92.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 25.2%us, 0.7%sy, 0.0%ni, 74.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7992008k total, 576248k used, 7415760k free, 33204k buffers
Swap: 10482404k total, 0k used, 10482404k free, 262040k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9695 root 23 0 6600 1252 396 R 2.3 0.0 0:00.07 lsusb
30295 root 15 0 12764 1184 840 R 0.3 0.0 0:03.24 top
1 root 18 0 10372 684 580 S 0.0 0.0 0:01.04 init
<...snip...>
# pstree -ap
<...snip...>
|-cmastdeqd,4029 -p 30 -l /var/log/hp-snmp-agents/cma.log
| `-sh,9806 -c /opt/hp/hp-snmp-agents/utils/usb-device.sh\0402>/dev/null
| `-sh,9807 -c /opt/hp/hp-snmp-agents/utils/usb-device.sh\0402>/dev/null
| `-sh,9862 -c /opt/hp/hp-snmp-agents/utils/usb-device.sh\0402>/dev/null
| |-grep,9864 bInterfaceSubClass
| |-lsusb,9863 -v -s 002 002
| `-sed,9865 -e s/^\040*bInterfaceSubClass\040\+[0-9]\+\040//
# sar | tail -n 5
18:10:01 all 6.04 0.00 0.40 0.00 0.00 93.56
18:20:01 all 8.40 0.01 0.47 0.00 0.00 91.12
18:30:01 all 8.65 0.00 0.47 0.00 0.00 90.88
18:40:01 all 8.81 0.00 0.48 0.00 0.00 90.71
Average: all 3.90 0.00 0.34 0.00 0.00 95.76
cmastdeqd が数十秒毎に lsusb を大量に実行するのが原因。lsusb 単発は微々たるものだが、全体では相当な負荷になっていて、USB キーボードを使っていたりすると酷い目に遭う。文字が入らなかったり、一度に何文字も入ったり。特にシャドウパスワードが最悪(何が入ったか見えないの)で、まともにログインすらできない。
USB HDD の取り外しを検出するのが目的らしいが、USB HDD なんて付けるつもりはないし、例え付けたとしてもこんなものは速攻で無効にすべき。
ところが、cmastdeqd の自動起動を off にすると、あろうことかサーバーが起動しなくなった。どうやら cmastdeqd を見ている別のサービスがあって、cmastdeqd が起動するまで 永遠に 待ち続けるらしい。全く、何というクソ実装。
仕方がないので、usb-device.sh (lsusb の呼び出し元)の方を無効にすることにした。
# pwd
/opt/hp/hp-snmp-agents/utils
# cp -p usb-device.sh usb-device.sh.orig
# echo : >usb-device.sh
結果、
# sar | tail -n 10
18:10:01 all 6.04 0.00 0.40 0.00 0.00 93.56
18:20:01 all 8.40 0.01 0.47 0.00 0.00 91.12
18:30:01 all 8.65 0.00 0.47 0.00 0.00 90.88
18:40:01 all 8.81 0.00 0.48 0.00 0.00 90.71
18:50:01 all 8.80 0.00 0.47 0.00 0.00 90.73
19:00:01 all 2.16 0.00 0.29 0.00 0.00 97.55
19:10:01 all 0.17 0.00 0.24 0.00 0.00 99.59
19:20:01 all 0.17 0.01 0.23 0.00 0.00 99.59
19:30:01 all 0.17 0.00 0.24 0.00 0.00 99.59
Average: all 3.48 0.00 0.32 0.00 0.00 96.19
今回の件で、SPP はロクな品質でないことを確信した。私はこれにハマる前に別の地雷を踏んでいるから、そう断言できる。以下はその体験談。
- サーバーのファームウェアをオンラインアップデートできるらしいので、やってみる。
- アップデートのチェックに「数分かかるかも」と出る。
- 実際は、百個程度の項目を 1 個ずつサイトへ接続してチェックするので、最短でも十数分は掛かる。
- サイトが重いのか、チェックに時間が掛かったり、止まったりする。
- タイムアウト・リトライ処理がないらしく、一度止まると永遠に止まる → リセット。
- マグレでチェック処理が終わったので、先に進む。
- 途中、前の画面はどうだったっけ?と「戻る」ボタンを押してみる。
- 「前の画面」ではなく、全てが無かったことにされて一番最初のメニューまで戻される。
- 気を取り直して、メニューから再びアップデート。
- データにゴミが残っているらしく、エラーで先に進めず → リセット。
- 再びマグレでチェックが終わり、今度は絶対に「戻る」なんて押すもんか、と心に誓って先へ進む。
- 最後、アップデートの実行ボタンを押す。wktk
- メッセージも何もない空白のダイアログが出て止まる → 呆然 → リセット。
- 再びマグレで最後まで進み実行ボタンを押す → 当たり前のように空白ダイアログが出て止まる → give up。
- その後、SPP DVD をダウンロードすればオフラインでアップデートできることを知る。
- 実際、それでサクッと完了。オレの 1 日を返せ。
今まで触ったソフトウェアで、これほど殺意を覚えたのは初めてかも知れない。どうせ他の部分も似たような品質に違いない。永遠に止まるところなど、作った人が同じか、同じレベルであることを物語っている。
この様なものを見せられては、正直もう HP サーバーは使いたくない。本当は SPP もインストールしたくなかったが、デバイスドライバー系があるので、入れない訳にもいかないのが歯痒いところ。