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
130
めぐろ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
270
画像のバリデーションはファイルサイズチェックだけでいいと思ってない?
ky6yk
0
300
ES2021/2022
ky6yk
0
18
Other Decks in Programming
See All in Programming
What is Parser
yui_knk
9
4.1k
KSPの導入・移行を前向きに検討しよう!
shxun6934
PRO
0
130
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
670
大公開!iOS開発の悩みトップ5 〜iOSDC Japan 2024〜
ryunakayama
0
190
マルチモジュールにおけるテスト最適化
fxwx23
0
200
Jakarta EE meets AI
ivargrimstad
0
360
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
370
実践!難読化ガイド
mitchan
0
120
Swiftコードバトル必勝法
toshi0383
0
150
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
120
Modular Monolith Go Server with GraphQL Federation + gRPC
110y
1
580
エンジニア1年目で複雑なコードの改善に取り組んだ話
mtnmr
3
1.9k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
93
5.1k
Writing Fast Ruby
sferik
623
60k
The Cult of Friendly URLs
andyhume
76
6k
Design by the Numbers
sachag
277
19k
How to Ace a Technical Interview
jacobian
275
23k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Learning to Love Humans: Emotional Interface Design
aarron
270
40k
It's Worth the Effort
3n
182
27k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
How to Think Like a Performance Engineer
csswizardry
16
950
Ruby is Unlike a Banana
tanoku
96
11k
How to name files
jennybc
75
98k
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でコミットした人を見ると...私でした
まとめ - 推測するな、計測せよ!! - メモリリークは気付きづらくて怖い - 解決までに時間がかかってしまった