Top Banner
カジュアルにスレッドダンプ 20151016山本 裕介 @yusuke #javacasual
33

カジュアルにスレッドダンプ - @yusuke #javacasual

Jan 25, 2017

Download

Technology

Yusuke Yamamoto
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: カジュアルにスレッドダンプ - @yusuke #javacasual

カジュアルにスレッドダンプ

2015年10月16日

山本 裕介 @yusuke

#javacasual

Page 2: カジュアルにスレッドダンプ - @yusuke #javacasual

山本 裕介 @yusuke• アーチャー

• 東京都国体代表2回

• 全日本選手権出場1回

• 都民体育大会 世田谷区代表1回

• 都民体育大会 板橋区代表3回

• 各種大会入賞、優勝多数

Page 3: カジュアルにスレッドダンプ - @yusuke #javacasual

山本 裕介 @yusuke• BEA Systemsにて4年くらいテクニカルサポート

• Fast Searchにて1年半くらいテクニカルサポート

• RedHatにて2年くらいコンサルタント

(火消し多し)

→計7年半くらいトラブルシューティング

Page 4: カジュアルにスレッドダンプ - @yusuke #javacasual

クイズです

👻

Page 5: カジュアルにスレッドダンプ - @yusuke #javacasual

何をしているでしょう?

Page 6: カジュアルにスレッドダンプ - @yusuke #javacasual

答えは後ほど

👻

Page 7: カジュアルにスレッドダンプ - @yusuke #javacasual

" 皆さんに質問です

Page 8: カジュアルにスレッドダンプ - @yusuke #javacasual

" 日常的にスレッドダンプを解析している方

Page 9: カジュアルにスレッドダンプ - @yusuke #javacasual

" スレッドダンプを取得したことがある方

Page 10: カジュアルにスレッドダンプ - @yusuke #javacasual

" スレッドダンプって聞いたことある方

Page 11: カジュアルにスレッドダンプ - @yusuke #javacasual

" 例外スタックトレースを見れば

何が起きているのか大体検討がつく方

Page 12: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプ よくわからん

スレッドダンプ チョットデキル

スレッドダンプの話 アーチェリーの話

Page 13: カジュアルにスレッドダンプ - @yusuke #javacasual

スタックトレースとは

•プログラムを実行する際のコールスタックの一覧

•Javaはマルチスレッドで動くので、スレッド毎にコールスタックがある

• 現在主流は70m

• 形式によっては最短5m、最長で90m

的までの距離

Page 14: カジュアルにスレッドダンプ - @yusuke #javacasual

コールスタック

実行結果:

Hello world. Exception in thread "main" java.lang.NullPointerException at GoodBye.goodbye(GoodBye.java:4) at HelloWorld.main(HelloWorld.java:4)

• 中心から10点、9点、7点・・・0点

• 1試合72本、720点満点

採点

Page 15: カジュアルにスレッドダンプ - @yusuke #javacasual

例外スタックトレース から読めること

例外の種類、例外メッセージ

例外発生に至るコールスタック (クラス名、行数)

アーチェリー場。意外にも都内に10箇所以上ある。

どこでアーチェリーやるの?

https://www.google.co.jp/maps/search/東京都+アーチェリー/@35.6690751,139.6614889,11.8z より

Page 16: カジュアルにスレッドダンプ - @yusuke #javacasual

例外スタックトレース を読んでみる

Exception in thread "main" java.lang.NullPointerException at HelloWorld.goodBye(HelloWorld.java:8) at HelloWorld.main(HelloWorld.java:4)

• ざっと20~30万 • でも練習は1回300円~1000円程度 • イニシャルコスト高&ランニングコスト低

道具一式いくら?

HelloWorldの8行目、goodBye内でNPEが発生

HelloWorldの4行目からgoodByeを呼び出している

Page 17: カジュアルにスレッドダンプ - @yusuke #javacasual

例外が発生しない場合の スタックトレース

・正攻法

ブレークポイントを設定してデバッグ実行

• 筋力、体力、精神力が必要 • 1日144本射つ試合形式もある • 弓本体は2.5kgくらい • 最大限引いたところで35~42ポンド

引っ張って 離すだけでしょ?

Page 18: カジュアルにスレッドダンプ - @yusuke #javacasual

例外が発生しない場合の スタックトレース

・力技

new Exception().printStackTrace();

(プロセスにアタッチは出来ないけど

再デプロイして状況を再現させられる)

ゴテゴテ付いているの何?

スタビライザー振動を抑止してエイミング、

発射を安定させる1~4万円

Page 19: カジュアルにスレッドダンプ - @yusuke #javacasual

デバッガ使いましょうね サイト

http://www.slideshare.net/yusukey/java-print-jjugccc-ccch4

サイト(照準)照準を見て狙う

距離が遠くなるときは下に、近くなるときは上に動かして

的の真ん中を狙えばいいようにする2~2万円

Page 20: カジュアルにスレッドダンプ - @yusuke #javacasual

よくあるトラブル• アプリのパフォーマンスが悪い • サービスが応答しない • ボトルネック箇所がわからない

• CPU使用率が異常に高い

• ボランティアでサイバーディフェンスをしており、パフォーマンスプロファイリングツールを購入する予算がない

リム

こんな時にスレッドダンプ

リムしなる部分。木材や、カーボンなどの

合成材6~10万円

Page 21: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプを確認・スレッドダンプ

現在JVM内で稼働している各スレッドのスタックトレース。

・アプリケーションの改修不要

・デバッガのアタッチ不要

・本番稼働中も取得可能

• アルミチューブにカーボンを巻いた構造

• 軽くて丈夫

• 一本2千~6千円

Page 22: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプの取得・スレッドダンプの取得

jstack PID (OS共通)

kill -3 PID (Linux / Unix / Mac) Ctrl + Break (Windows)

・プロセスIDの確認

$ jps -mlv $ ps -ef | grep java

ノック弦を挟む構造

接ぎ矢をしたときは(運が良いと)ここだけ壊れる

ので好感できる

Page 23: カジュアルにスレッドダンプ - @yusuke #javacasual

jpsのオプション・-m

メインスレッドの引数を表示

・-l (エル)

メインクラスをフルパッケージで表示

・-v

JVMに指定しているオプションを表示

羽プラスチック製矢飛びを安定させる

Page 24: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプ 矢ポイント

いわゆる鏃(やじり)重心を前に寄せて安定させる

Page 25: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプ• なにげに毎週どこかしらで大会がある

• いきなり「都大会」に出られる

大会

Page 26: カジュアルにスレッドダンプ - @yusuke #javacasual

クイズの答え

Page 27: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプとは・瞬間のJVMのスナップショット

• 一人でも練習できます

• 当たると気持ちいい

アーチェリーのいいとこ

・スナップショット1枚では遊んでいるのか仕事しているのかわからない

Page 28: カジュアルにスレッドダンプ - @yusuke #javacasual

JVMを解析するために・スレッドダンプを複数回とる

・各スレッドの動きがわかる

・目安: 1秒間隔で3回とか

• 実は接触しない • 弦を離す際、指により弦の軌道が波打つので矢も上から見ると波打つ

矢の羽は弓に接触する?

http://hr-inoue.net/zscience/topics/bow/bow.html より

Page 29: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプの解析・3回分のスレッド解析とか無理

・そこで「侍」

• 弦が波打って弓に当たらない現象のこと

• 波打たないと弓に当たって的中が悪くなる

• 波打ち過ぎると矢がブレて進むのでやはり的中が悪くなる

アーチェリーパラドックス

http://samuraism.jp/samurai/ja/index.html

チューニング大事

Page 30: カジュアルにスレッドダンプ - @yusuke #javacasual

侍のしてくれること・間隔を空けてスレッドダンプを取得

・スレッドダンプの可視化

→固まっているスレッド

→遊んでいるスレッド

→デッドロックしているスレッド

• たくさんある

• アーチェリーパラドックスの調整にはプランジャー

チューニングポイント

http://www.shibuya-online.com/ より

Page 31: カジュアルにスレッドダンプ - @yusuke #javacasual

侍の起動方法・ちょっと面倒 $ wget http://samuraism.jp/samurai/samurai-3.0.jar

$ java -cp $JAVA_HOME/lib/tools.jar:samurai-3.0.jar samurai.swing.Samurai

・.app、.exeとしてパッケージ化予定

• 人口は少ないけど、上には上がいるので大変

• でも「ある程度」までは狙いやすいかも?

簡単にオリンピックとか出られるんじゃね?

Page 32: カジュアルにスレッドダンプ - @yusuke #javacasual

スレッドダンプ・普段からカジュアルにとりましょう

・固まったら、応答遅くなったら kill -9 する前に kill -3

• 区報とかチェックしてください • 初心者向け講習とかあります

アーチェリーやってみたいんだけど

板橋区報より

Page 33: カジュアルにスレッドダンプ - @yusuke #javacasual

# 終わりです