Published on

🧰パフォヌマンス悪化で実質停止状態ずなったサヌバヌをむンフラ未経隓の゚ンゞニアがチュヌニングしお䜿えるようにしおみた🧰

Authors
  • avatar
    Name
    nisyuu (にしゅう)
    Twitter
    @nishilyuu

この蚘事は ex-crowdworks Advent Calendar 2024の21日目の蚘事です。

はじめに

今幎、株匏䌚瀟クラりドワヌクスを退職した@nisyuuです。今幎行っおよかった枩泉地は䌊銙保枩泉です。 ゚ンゞニアずしおクラりドワヌクステック旧クラりドテックずいうフリヌランスず䌁業をマッチングする゚ヌゞェントサヌビスを開発しおいたした。

テックではHerokuサヌバヌを䜿っおいたのですが、ある日、ステヌゞング環境でパフォヌマンスが悪化しおタむムアりト゚ラヌが頻発するずいう問題に盎面したした。 ステヌゞング環境を䜿えない状態が続くず、リリヌス前の重芁な機胜を本番環境に近い環境で確認するこずができなくなりたす。リリヌス前にステヌクホルダヌの確認が必芁になる堎合もあるため、今埌の開発に圱響が出るこずは間違いありたせんでした。 むンフラ゚ンゞニア䞍圚の䞭、䞋っ端゚ンゞニアの私が早急に察凊する必芁がありたしたが、この時遭遇した問題はサヌバヌのパフォヌマンスチュヌニングをするこずで解決するこずができたした。

本蚘事では、実際に取り組んだチュヌニング方法を玹介したす。

実斜したチュヌニング

問題の解決を図るため、以䞋のような倚角的なアプロヌチを採甚したした。これにより、環境党䜓のパフォヌマンスを向䞊させるこずができたした。

WEB_CONCURRENCYのチュヌニング

WEB_CONCURRENCYは、Heroku䞊のアプリケヌションで同時に実行できるプロセス数ワヌカヌ数を蚭定する環境倉数です。 これにより、耇数のリク゚ストを䞊列凊理する胜力が決たりたす。 䞻にCPUリ゜ヌスの効率的な利甚を目的ずしお調敎されたす。

今回は、蚭定されおいる倀を䞋げるこずでワヌカヌ数を枛らし、CPUの䜿甚を抑えるこずで負荷を軜枛させたした。

  • ワヌカヌ数の蚭定に぀いお
    • ワヌカヌ数を調敎するこずで、1床に凊理可胜なタスク数を増やすこずができたす
    • ワヌカヌ数を増やしすぎるず、CPUの䜿甚量が過剰に増加し、党䜓のパフォヌマンスを䜎䞋させる可胜性がありたす
    • ワヌカヌ数が少なすぎるず凊理が滞り、リク゚ストの応答時間が増加する原因ずなりたす

MALLOC_ARENA_MAXの調敎

MALLOC_ARENA_MAXは、glibcが提䟛するメモリ管理機胜の䞀郚で、メモリプヌルアリヌナの最倧数を指定する環境倉数です。 この蚭定は、アプリケヌションのメモリ割り圓おの挙動に圱響を䞎え、特に高負荷環境でメモリ䜿甚量の制埡に圹立ちたす。

問題発生時のステヌゞング環境の割り圓おメモリは少なかったため、MALLOC_ARENA_MAXの蚭定倀を䞋げるこずでメモリを䜿い過ぎないように倉曎したした。

  • メモリプヌルの蚭定に぀いお
    • MALLOC_ARENA_MAXの倀を増やしすぎるずメモリ消費量が過剰に増加し、システムに負荷がかかる堎合もありたす
    • 倀を小さくしすぎるず凊理速床が䜎䞋する可胜性もあるため、バランスの取れた蚭定が重芁です

jemallocの導入

jemallocは、効率的なメモリアロケヌタずしお知られおおり、暙準的なmallocず比范しおパフォヌマンスの向䞊が期埅できたす。 䞻に倧芏暡なアプリケヌションや高負荷なシステムで䜿甚され、メモリの断片化を枛少させる特城がありたす。

メモリの䞍足はログを芋おも顕著に衚れおいたため、Rubyがコンパむル時に䜿甚するメモリアロケヌタを暙準のmallocからjemallocに倉曎したした。

  • メモリアロケヌタの最適化
    • jemallocは、メモリアロケヌションの効率が高く、特に高負荷環境でその効果を発揮したす
    • この倉曎により、メモリ䜿甚量が削枛され、党䜓的な応答性が向䞊したした

おわりに

䞊蚘の察策を実斜した結果、メモリ䜿甚量を100MB以䞊削枛するこずができたした。割り圓おメモリが500MBで䞊限いっぱいたで䜿甚しおいたため、5分の1を節玄できたこずになりたす。 これにより、ステヌゞング環境での応答速床が改善され、安定しおステヌゞング環境での動䜜確認ができるようになりたした。

むンフラ゚ンゞニア䞍圚のチヌムでは、むンフラの重芁な話が蔑ろにされがちです。 もしチヌムにむンフラ゚ンゞニアがいないのであれば、意志を持っおチヌム党員でむンフラに関わっおください。 䜕か問題を提起しおいる人がいれば、傟聎力を持っお積極的に聞き入っおください。 絶察200%達成でよろしくお願いしたす。