分12(1)はこちら,(⁠2)はこちらから。strace実践編─⁠─Webアプリケーションは思ったとおりに動かない最後はstraceの実践編です。Perlで書いたWebアプリケーションの動作の妥当性は,どうやって担保すればよいでしょうか。WebDriverなどを使って実際にブラウザを立ち上げてサービス自体の動作を自動チェックしている人も多いと思います。自動テストをしたうえで,やはり最後は実機で動作を見るという慎重な人もいると思います。これらはいずれも有効なのですが,どちらかと言うとプログラムの動作に対する外側からのチェックであるため,「⁠memcachedにデータを効率良くキャッシュしているつもりが,実は頻繁にデータベースにアクセスが飛んでいた」「⁠Redisに都度接続でTCPコネクションを張っていたつもりが,張りっぱなしになっていた」などの下回りの障害につながりかねない問題に気づくことができません。いった問題は得てして,気づいたときにはすでに本番で障害が発生していることが多いです。できる限り開発環境でのシステム監視などで事前に発見したいところですが,開発環境と本番環境のサーバスペックや,Webアプリケーションで立ち上げているプロセスの総数(ホストをまたいだ合計値)などが異なっているような場合には,なかなか難しいものです。開発環境などであらかじめさらっとstraceの結果を見ておくと,上記のような問題を事前に発見できる可能性があります。Perlで作られたWebアプリケーションで陥りがちなパターン昨今の現場はさまざまなミドルウェアが使われているので一概には言えませんが,個人的な感覚としては,Cache::Memcached::Fastなどのクライアント側でコンシステントハッシュ法を使ってスケーリングさせるライブラリを用いてmemcachedにアクセスしている場合に,straceで観測できる次のような下回りの問題が起こりやすいようです。接続先のノード数をあまり気にせず多数のkeyに対してget_multiやset_multiを実行するコードがデプロイされた結果,リクエスト中で全ノードへの接続・再接続が発生するようになり応答が劣化するアプリケーション側で生成しているkeyの値が間違っている,あるいはアプリケーション間でずれており,キャッシュを活用しているつもりが実は常にデータベースにフォールバックしている思ったよりキャッシュヒット率が低く,実はデータベースにフォールバックしている「俺ならそんなことはやらかさない」と思う人もいるかと思いますが,実際にstraceでmemcachedへのアクセスからのMySQLへのアクセスなどの流れを見ると,思ったとおりのアクセスパターンになっていなかったということはよくあります。後者2つは,アプリケーションの見かけ上の動作としては問題なく,かつリクエストが少ない間は顕在化しないため発見が難しいです。本番環境などへの展開前にちょっと時間をとってstraceの結果を眺めてみることで気づける確率が高いです。これはあくまで憶測ですが,上記のような問題が起こりやすいのは,次のような理由からと考えています。至った実例を2つ紹介します。実例1:epollを使っているつもりが,select(2)を使っていたAnyEventはPerlでイベント駆動なアプリケーションを書く場合によく使われるモジュールです。通常,Linux上でAnyEventを利用したコードを書く場合は,I/O多重化のバックエンドとしてepoll_*系のAPIが利用されることを期待します。実際にはAnyEventをuseしたうえでそのバックエンドの一つであるEVがインストールされている(require可能な状態になっている)場合のみLinux上でepollが使われるのですが,本番環境で投入されているコンポーネントにEVがインストールされていなかったため,フォールバックした結果としてselect(2)が使われている,という問題がありました。これはいささか極端な例ですが,外部から見るとどちらのAPIが使われているかはパッとはわからないところでも,straceでattachすれば一発でわかります。結論としてはselectが使われていることで問題が起こっていたわけではなかったのですが,そのままにしておくのもあとあとよくないのでEVをインストール,デプロイして修正を行いました。Webサーバ著者プロフィール横江直輔(よこえなおすけ)意識の低いエンジニア。仕事ではPerlとかJavaScriptとか書いたり。Playのアカウントを剥奪された。Storeにも一個アプリを出したが放置状態。Objective-C忘れました。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。