SlideShare a Scribd company logo
LT SpeechLT SpeechLT Speech
Webアプリケーションの性能問題を診断する話Webアプリケーションの性能問題を診断する話Webアプリケーションの性能問題を診断する話
張 楠張 楠張 楠
2018-05-26
自己紹介自己紹介自己紹介
張 楠 (じゃん なん)
今まではほとんどBackend寄り
1987年 生まれ
2013年 大学院卒。卒業までに中国に住んでいた
2013年 東京のあるユーザー系SI企業就職して来日した
2013年~今 客先に常駐
-
-
-
-
Java
RHEL + Tomcat + Apache + Oracle
Maven + Git
-
-
-
経験した仕事を振り返ってみると・・・経験した仕事を振り返ってみると・・・経験した仕事を振り返ってみると・・・
一番印象残ったのは、障害対応 だ
特に性能障害の対応
なぜ印象残ったかというと・・・なぜ印象残ったかというと・・・なぜ印象残ったかというと・・・
Theory is when you know everything but nothing works.
Practice is when everything works but no one knows why.
When performance bugs happened ,theory and practice are
combined: nothing works and no one knows why.

性能障害が発生したら・・・性能障害が発生したら・・・性能障害が発生したら・・・
まずは Why を探す
どこに問題が発生している?
なぜ問題が発生している?
ハードウェア
OS
JVM
アプリケーション
-
-
-
-
ハードウェア損壊
IO Blocking
Memory Leak
実装不良
-
-
-
-
性能障害の問題箇所を洗い出す性能障害の問題箇所を洗い出す性能障害の問題箇所を洗い出す
事例1:ある日...事例1:ある日...事例1:ある日...
CPU使用率が100%なってるアラートメールが来まくている
top/vmstat/sar/ksar
なんとsys比率が高い!
WEBサーバー(Apache)の設定ミスにより、アクセス都度でNFSにあ
るファイルを読み込んでいる
すごくWaiting I/Oも発生している-
事例2:ある日...事例2:ある日...事例2:ある日...
CPU使用率が100%なってるアラートメールが来まくている
sysではなく、userの使用率は100%近い
jstat でGC状況を確認してみると、FGCが発生しまくっている!
インフラチームの設定ミスにより、JVMの起動パラメータが変って
しまった (256MBしか割り振られていない)
事例3:ある日事例3:ある日事例3:ある日
本番リリース後、大量エラーメールが来まくている
CPU使用率は40-50% (ほぼ問題なし)
FGCはほぼ発生していない
事例3(続き)事例3(続き)事例3(続き)
jstack でスレッドダンプを取ってみると・・・
デッドロックの臭い
実装不備により、意味なし synchronized が実装された
"DEADLOCK_TEST-2" daemon prio=6 tid=0x0000000006858800 nid=0x17b8 waiting for monitor entry [
java.lang.Thread.State: BLOCKED (on object monitor)
at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.goMonitorD
- waiting to lock <0x00000007d58f5e78> (a com.nbp.theplatform.threaddump.Thread
at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.monitorOur
- locked <0x00000007d58f5e60> (a com.nbp.theplatform.threaddump.ThreadDeadLockS
at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.run(Thread
Locked ownable synchronizers:
- None
スレッド数はTomcatの設定値上限になっている
8割以上のスレッドは BLOCKED の状態なっている
-
-
public class HogeService {
public static final synchronized GLOBAL_LOCK; //(ㆍ ㆍ)<ナニコレ
}
EOFEOFEOF
Thank you for listeningThank you for listeningThank you for listening

More Related Content

Similar to [JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話

財務分析勉強会挨拶
財務分析勉強会挨拶財務分析勉強会挨拶
財務分析勉強会挨拶
oranie Narut
 
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
Takao Oyobe
 
Issues of Rubyists
Issues of RubyistsIssues of Rubyists
Issues of Rubyists
Ayumu Aizawa
 

Similar to [JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話 (20)

Tableauデータサイエンス勉強会12月ライトニング_柴田さん
Tableauデータサイエンス勉強会12月ライトニング_柴田さんTableauデータサイエンス勉強会12月ライトニング_柴田さん
Tableauデータサイエンス勉強会12月ライトニング_柴田さん
 
財務分析勉強会挨拶
財務分析勉強会挨拶財務分析勉強会挨拶
財務分析勉強会挨拶
 
機械学習に取り組んでいる企業の紹介
機械学習に取り組んでいる企業の紹介機械学習に取り組んでいる企業の紹介
機械学習に取り組んでいる企業の紹介
 
Start Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4JStart Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4J
 
エンプラYouは何してる?
エンプラYouは何してる?エンプラYouは何してる?
エンプラYouは何してる?
 
エンプラYouは何してる?
エンプラYouは何してる?エンプラYouは何してる?
エンプラYouは何してる?
 
確定申告ってなんでやるの?.pdf
確定申告ってなんでやるの?.pdf確定申告ってなんでやるの?.pdf
確定申告ってなんでやるの?.pdf
 
高卒でIT企業に就職してみて
高卒でIT企業に就職してみて高卒でIT企業に就職してみて
高卒でIT企業に就職してみて
 
Empirical Project Monitorの紹介
Empirical Project Monitorの紹介Empirical Project Monitorの紹介
Empirical Project Monitorの紹介
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
ケース面接対策~知っておくべき8つの例題
ケース面接対策~知っておくべき8つの例題ケース面接対策~知っておくべき8つの例題
ケース面接対策~知っておくべき8つの例題
 
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
 
混沌化の実装にテストを入れよう体験談(現在進行形)
混沌化の実装にテストを入れよう体験談(現在進行形)混沌化の実装にテストを入れよう体験談(現在進行形)
混沌化の実装にテストを入れよう体験談(現在進行形)
 
Nintendo Labo の子育て力
Nintendo Labo の子育て力Nintendo Labo の子育て力
Nintendo Labo の子育て力
 
インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話
 
ヒーロー島 Visual Studio 2012
ヒーロー島 Visual Studio 2012ヒーロー島 Visual Studio 2012
ヒーロー島 Visual Studio 2012
 
実務でGo使い始めました
実務でGo使い始めました実務でGo使い始めました
実務でGo使い始めました
 
Issues of Rubyists
Issues of RubyistsIssues of Rubyists
Issues of Rubyists
 
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
 

[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話