Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
めぐろLT#6 怖い話 サーバーが次々死んでいく
Search
kiyoshi yamashita
August 31, 2023
Programming
0
190
めぐろLT#6 怖い話 サーバーが次々死んでいく
めぐろLTでの登壇資料
https://meguro-lt.connpass.com/event/288484/
kiyoshi yamashita
August 31, 2023
Tweet
Share
More Decks by kiyoshi yamashita
See All by kiyoshi yamashita
ユニットテスト環境改善/improve-unit-test-environment
ky6yk
0
370
画像のバリデーションはファイルサイズチェックだけでいいと思ってない?
ky6yk
0
480
ES2021/2022
ky6yk
0
33
Other Decks in Programming
See All in Programming
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
900
Is Xcode slowly dying out in 2025?
uetyo
1
270
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
150
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
#QiitaBash MCPのセキュリティ
ryosukedtomita
1
1.3k
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
120
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
10
5.3k
Team operations that are not burdened by SRE
kazatohiei
1
310
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
290
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
640
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
390
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
510
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Balancing Empowerment & Direction
lara
1
430
How to Ace a Technical Interview
jacobian
278
23k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
How GitHub (no longer) Works
holman
314
140k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Transcript
サーバーが次々死んでいく... 株式会社ラクーンHD yamashita.kiyoshi
まずは自己紹介 名前:山下 清史 所属:株式会社ラクーンホールディングス 技術戦略部 開発チーム 主な仕事:BtoB卸売りサイト スーパーデリバリーの開発
APサーバーをDocker化した - 今までのサーバーのセットアップは手作業でやっていた - Dockerfileにサーバーの設定をかける - 開発環境構築が楽になった - ログフォーマットをjsonにした -
ログを標準出力に出すようにした - サーバにsshしてログファイルを確認しなくてよくなった - fluentd -> Elasticsesarch -> kibanaでログを確認できる
進め方 - Dockerfileなどを作成する - ログをモダンにする - 不要なログを削除し、標準出力に出す - セキュリティ対策 -
機密情報をDockerfileに書かないようにした - ひたすらテスト 俺、このプロジェクトが終わったら長期休暇を取って海外旅行へ行くんだ... APサーバーをDocker化した
開発は上手くいった そして本番稼働して、初めの1、2日は上手く動いていた APサーバーをDocker化した
サーバーが死んでいく いきなりサーバーが死んでサービスサイトに繋がらなくなった アクセスログは全て500 会員が商品を購入できなくなった
サーバーが死んでいく 大量の同時アクセスが来ていたようだ…
一時的な高負荷によりメモリが足りなくなった? →メモリ割り当てを増やした 負荷テストが足りなかったなぁ~ 考えられる原因
メモリを2倍割り当てたはずなのにサーバーがまた死んだ... 対策した結果
パフォーマンス劣化のたびに対処療法(メモリ割り当てを増やす)を行った しかし、ついにアクセスが少ないときにサーバーが死んだ… 一時的な高負荷が問題じゃなかった… それでもまた…
計測 現在のアプリケーションサーバーにおいてヒープ領域の使用状況を確認すると 異常にメモリを使っているクラスが見つかった... そのクラスを確認したら
進め方 - Dockerfileなどを作成する - ログをモダンにする - 不要なログを削除し、標準出力に出す - セキュリティ対策 -
機密情報をDockerfileに書かないようにした - ひたすらテスト このプロジェクトが終わったら長期休暇を取って海外旅行へ行くんだ・・・ APサーバーをDocker化した
原因 不要なログ削除時の対応がミスっていたことが発覚した 対応ミスしたログの動作 - ログ出力前に、スレッド変数内にデータをためる - ログ出力後にデータをクリアする データをためるところを消さずにデータをクリアするコードのみを消していた
→メモリリーク発生
原因 gitでコミットした人を見ると...私でした
まとめ - 推測するな、計測せよ!! - メモリリークは気付きづらくて怖い - 解決までに時間がかかってしまった