勉強になった1日。
お客さんからI/O WAITがやけにでかいんだけど何でかね?
なんていう質問を受ける。
内心、知るかよ、んなもん、とか思う。
しかもテスト環境での話だから、本番環境でやったらどうなるか
計測するべきだろう、とか思って、そんな内容で返事をする。
お客さんがキレる。はぁ?何よそれ?ちゃんと調べろよ、おい。みたいな。
いや、別に他にやることあるですよ、、とか思いながら
サーバールームに入ってiostatとかvmstatとかみてみる。
iostatの結果みてみたら、特定のディスクにものすごいiowaitが発生してる。
そこでお客さんが到着。どうですか?みたいな。
処理をしてはSQLでSELECTしてるところ。
おそらくパーティション分割してるのに、表領域を同じのにしちゃってるのか
表領域を全部同じディスクにのっけっちゃってるんじゃねぇの?
なんていう回答をする。
っつーことで、お客さんに調べてもらうと、ビンゴでした、と。
まぁ、文章にするとさも、サラっと解決したようになっちゃうけど、
サーバールームから外出てインターネットでいろいろ調べたりとか、
ディスクI/Oってほんとにハードによって変わってくるんだって発見があったり。
あと、今のPJではバッチ処理で、複数のプロセスから1つのファイルに
ログを吐き出すから
Log4jのソケットサーバーを使ってたりする。
Log4jのサーバーがちゃんと動作してるかどうかを監視するために、
一定時間おきに、VERITAS Cluster Serverっていう冗長構成で
フェールオーバーさせるようのソフトからLog4jサーバ向けにログを吐いて
ファイルの更新日時が変わってるかどうかをみてる。
シェルからJavaを叩く実装にしてるんだけど、Javaの中では、
ログを吐いてからThread.sleepで3秒待つような実装にしてる。
3秒待ってもログが吐けてなかったら、ログが吐けませんっていうメッセージを
出すようにしてる。
こないだ、本番でCPUが100パーセント振り切ったときに、
ログが吐けませんっていうエラーが出て、
VERITAS Cluster ServerでLog4jサーバーを2回再起動かけるようにしてるんだけど、
それでもファイルが吐けませんっていうエラーが出て、
結果的にフェールオーバーしちゃいまいしたって。
そんなこんなで調査開始。
誰も使ってなさそうな結合テスト環境使って、CPUが100パーセントの状態で
ログを吐いてみる。
不規則な感覚でログが吐けませんっていうエラーが出てる。
ただ、Log4jサーバーのプロセスはpsコマンド叩いたらちゃんといきてるし、
ログファイルをviでみてみたらちゃんとログもはけてる。
要は処理が遅延してるだけっちゅう話。
悩む。どうしたもんかと。
とりあえずマネージャーに状況と調査結果を報告してみる。
するとマネージャーはOSのプロセス優先度変えればいいんじゃない?
なんて言ってくる。
なんと。そんなこと思いもよりませんでした。
インターネットでいろいろ調べてみる。
どうやらniceコマンドっていうので優先度が変えられるらしい。
既に動いているプロセスに対してはreniceっていうコマンドで変えられる。
Oracleとか業務アプリケーションのプロセスよりも優先度高くしたら
処理が遅延しなくなった。
つまり、Log4jサーバのプロセスになかなかCPUが割り当てられてなかった
っていうことなのね。
いや〜、こういうのすごい勉強になりますわぁ。
っていうか、視野を広げるためにインフラやりたいかなぁ。。
アーキテクトになりたい、なんて偉そうな事いってるけど、
俺がみてるのなんて、システム構築のほんの一部分で。
んで、夜中に先輩とかマネージャーとかと雑談してたときに。
篠原は情報処理試験レベルで知識が足りてないよね、なんて言われる。
正直グサっとくる。
初めて触ったPCがバリバリWindowsで、且つ、モロ文系だった俺は、
基本がスコーンってふっとんじゃって。
最新の技術追っかけたりするのは好きなんだけどなぁ。。
あーぁ。
コメント