株式会社AbemaTV / Product Backend
ABEMAのスパイク時の累計メモリ割当量を2TiB削減
ABEMAには『今日、好きになりました。』という人気番組があるのですが、リアルタイム視聴をするユーザーが多く、放送が開始する時刻前後で急激なトラフィックのスパイクが発生することが特徴です。このスパイク時のヒーププロファイラを確認したところ、あるメソッドだけ異常に大量のメモリ割り当てが発生していることに気がつきました。 調査をしたところ、そのメソッドは推薦システムのスコアリング結果に基づいてコンテンツの並び替えを行う処理を行なっており、実際にはユーザーに対して表示するコンテンツは多くても数十個ほどなのに対して、不必要に数千個のコンテンツの並び替えを行なっており、その際にデータのコピーが多く発生するようなロジックになっていたことが原因だとわかりました。 それらを改善するようなコードの修正を行ったところ、スパイク時の20分間のメモリ割当量を累計で2TiB削減し、数十GiB程度に抑えることに成功しました。これにより、スパイク時の各Podのメモリ消費量を削減することに繋がり、サービスの安定性を改善することができました。