ペアトラブルシューティングが効率的で楽しかった
現在、自分が担当しているコンテンツの結構デカめのリプレイスみたいな作業をしています。
新しい環境で構築作業やベンチなどしていたときにちょっとトラブルがあって、いつもなら一人で原因とか確認するんですが、プログラマ先輩と一緒にトラブルシューティングしてたらすごく効率的で楽しかったのでメモっておこうと思います。
起こったトラブル
トラブルが起こるまでは、通常のアクセスが問題なく出来る状態で、ベンチとかガンガンかけてるような状況でした。
MySQLの設定にちょいと不備(character_set_serverが適切じゃなかった)があったので、Chefのtemplateを修正してDeployしました。
my.cnfを変更しているので当然mysqldは再起動されます。
30台弱のMySQLが全部再起動され、ベンチを再開しました。
すると、すべてのアクセスが500エラーに!!!!
そのまま「なんでだろうねー」とか言いながらログを漁ってたりしてて、10分くらいたったときにもう一回アクセスしてみたら普通に200でページが表示されるようになっていたりして(?o?)って感じでした。
やったことなど
character_set_serverを変更前に戻して再度Deployしましたが、まったく同じ症状。
ちょうど昨日、@lamanotramaさんと、@kentaroさんと飲んでたときに、「プロファイリングしないとか考えられないヨ!!1」とマサカリをいただいて、Devel::KYTProfを使うといいよと教えていただいていたので、プログラマ先輩に「プロファイリングやろうず!!1」って言ってDevel::KYTProfを使ってみることにしました。
(Perlアプリケーションのプロファイリングについては、WEB+DB PRESS 71の@fujiwaraさんの記事を読むといいですね。)
すると、複数のDBへのコネクションを貼る処理が途中で停まってしまっていることがわかりました。
結論としては、どうしようもないクソみたいな実装があったためで、MySQLの設定変更は全く関係ありませんでした。
ペアトラブルシューティング
実際のオペレーションはプログラマ先輩に終始やっていただいておりました。
netstatとかのコマンド操作や、MySQLのプロンプトに入ってからのコマンド操作などは僕が後ろから指図して、コードの処理の流れを追っかけるのは説明してもらいながらプログラマ先輩がやる。
これをやってて気がついたんですが、
・プログラマ先輩はOSやミドルウェアの(プログラマが)普段やらないオペレーションを覚えられる
・僕は、アプリの実装を知ることが出来る、コードの処理の追いかけ方を勉強できる
ということになって、超WINWINだな、と。
それに、僕はアプリの実装を1から10まで理解しているわけではないし、コードを読む能力も乏しいので、一人で調査していたのではたぶん結論に至ることは出来なかっただろうし、プログラマ先輩が一人でやっててもなかなか難しかったのではないかなと思います。
ペアプロの効果はさんざん言われているとおりですが、トラブルシューティングもこういう風にDevとOpsが協力してやることで色々な相乗効果があるんだなーと感動したのでブログエントリを書いた次第でございます。
おぺかじ
運用エンジニアがアプリの実装を理解するためには、やはりコードリーディング能力が必要不可欠だと思うわけです。
読めるようになるには書けるようになったほうがいいとも思うわけです。
運用エンジニアだからといって、コーディングを敬遠してたら色々もったいないですね。
共感していただけたらおぺかじに来たらいいと思いますよ!!!!!!!!11
★おぺかじ概要ミドルウェアの運用しか出来ないインフラエンジニアは死ぬしかないのかも知れません運用のエンジニアでもコード書けないと、近い将来には仕事なくなっちゃうかも知れません!!そうは言っても運用系のエンジニアって少ないからまわりにアドバイ…