こんにちは。CYBIRD Advent Calendar 2023 13日目担当の@cy-seiyanと申します。
12日目は@cy-naullさんによる「面倒な手作業をPythonに任せる」でした。
自動化、本当に大切ですね。全て自動化してしまえば手作業で行ってた時間を別の事に使えますしメチャクチャ捗りますね。
自己紹介
私は2018年にサイバードに入社をし、主にイケメンシリーズのサーバサイドエンジニアとして活動をしております。直近ではイケメンシリーズの1タイトルでサーバサイドだけでなく入社以前より業務経験を積みたかったUnityを使用したクライアントサイドも担当し某スポーツ選手の如く二刀流のエンジニアを目指しイケメンシリーズを支えております。
管理ツール
スマートフォン向けゲームやPC向けオンラインゲーム等、ネットに接続する事が前提のサービスにはサービス内で使用するマスタデータ(ゲーム内のアイテムや敵の強さのデータ等)やユーザの進行状況の確認、ゲーム内に蓄積されたデータの集計等が可能なツール(以下、管理ツール)が用意されていると思うのですが、筆者が現在所属している1タイトルのイケメンシリーズのチームにて使用している管理ツールで発生したトラブルで苦労した話とどの様に解決したのかについてお話しようと思います。
集計機能でタイムアウト発生
ある日、所属しているチームにてプロデューサーが管理ツールに実装されているゲームデータの集計機能を実行した際に「タイムアウトが発生してデータ集計が出来ない!」と連絡があり、調査を行いました。
何が悪さをしてるのか
プロデューサーが集計しようとしたデータの条件が担当しているタイトルが世にサービスインした日から現在に至るまでのデータという条件で、各イケメンシリーズのタイトルで採用されている管理ツールにも同等の機能があるにも関わらず担当タイトルのみ発生していた為、差異について洗い出しを行いました。
その結果、判明した点は下記になります。
- 他のタイトルと比較し担当タイトルのデータ量は少ない。
- 使用しているサーバのスペックも他のタイトルと同等。
- 集計機能の処理に他のタイトルとの差異は無い。
何故、自分の担当タイトルだけ発生しているのか解らずしらみ潰しで調査を行う事にしました。
ini_setでメモリ上限変更
エラーログを確認したところ集計時に「Fatal Error - Allowed memory size of ~~~」のエラーが出ており集計処理時に使用するメモリが不足していた事から集計処理内にini_setで一時的にメモリ上限を上げるようにし、解決するか試して見たのですが、タイムアウトが発生し更に頭を抱える結果になりました。
インフラチームに相談
集計処理のソースコードを他のタイトルと比較して差異はほぼ無く、このままだと埒が明かないと判断しインフラチームに相談を行い、発生している事象の説明とインフラ側で心当たりが無いか調査の依頼をする事にしました。
インフラチームと共に事象の解決に向かっている最中、インフラチームからロードバランサのタイムアウト値やswapfile、SELinuxの設定内容に他のタイトルと差異があったと聞き、設定内容を他のタイトルと同じ内容に合わせて貰う&php.iniのmemory_limitの上限を引き上げて貰い集計処理を実行したところ、タイムアウトは発生せず事象は解決しました。頭を悩ませた問題が解決し気分は爽快でした。
まさかの悪夢再び
問題が解決してから数ヶ月後、プロデューサーから「またタイムアウトが発生して集計が出来ない!」と連絡があり、再度調査を行う事になりました。
エラー内容を確認したところまたもやサーバのメモリ関連のエラーとの事で、サーバ側の設定・集計処理のコードに他のタイトルと差異が無くどうしたものか…と悩み、プロデューサーに「集計時、サービスインしてから現在に至るまでのデータは必ず必要なのか。」とヒアリングしたところ「1週間の集計か1ヶ月の集計しか取らない。」という回答だったので、抽出するデータの期間を指定してから集計する様に改修を行う事にしました。期間指定で集計する様に改修を行った事でタイムアウトは無事、解消しました。
まとめ
発生した内容と解決までの道のりはこの記事を見ている方からしたら「何故、サーバ設定とか集計条件的にアウトなのか直ぐに解らなかったのか筆者よ…。」と思った方もいるかもしれません。
期間指定無しでの集計が他のタイトルでは問題無く行えているという事実に囚われていたのとサーバ側設定に目を向けられなかった事が大きな敗因だと思います。しかし、本事象を通して集計する内容や実装されている処理の内容、サーバ側設定に対しても疑ってみる事の大切さを学びました。
もしも似た事象に直面した方に何かしらの参考になれば…と思います。
CYBIRD Advent Calendar 2023 14日目は@tomoko_ishizakaさんの「【rpm,yum,npm,apt,dnf...】結局xxx install系のコマンドは何が正解なのか【パッケージ管理コマンド】」です!
お楽しみに!