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

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

Embed Size (px)

Citation preview

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

2015年10月16日

山本 裕介 @yusuke

#javacasual

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

• 東京都国体代表2回

• 全日本選手権出場1回

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

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

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

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

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

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

(火消し多し)

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

クイズです

👻

何をしているでしょう?

答えは後ほど

👻

" 皆さんに質問です

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

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

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

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

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

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

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

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

スタックトレースとは

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

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

• 現在主流は70m

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

的までの距離

コールスタック

実行結果:

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点満点

採点

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

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

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

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

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

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

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

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を呼び出している

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

・正攻法

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

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

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

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

・力技

new Exception().printStackTrace();

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

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

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

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

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

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

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

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

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

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

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

• CPU使用率が異常に高い

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

リム

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

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

合成材6~10万円

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

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

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

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

・本番稼働中も取得可能

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

• 軽くて丈夫

• 一本2千~6千円

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

jstack PID (OS共通)

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

・プロセスIDの確認

$ jps -mlv $ ps -ef | grep java

ノック弦を挟む構造

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

ので好感できる

jpsのオプション・-m

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

・-l (エル)

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

・-v

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

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

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

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

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

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

大会

クイズの答え

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

• 一人でも練習できます

• 当たると気持ちいい

アーチェリーのいいとこ

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

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

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

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

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

矢の羽は弓に接触する?

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

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

・そこで「侍」

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

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

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

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

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

チューニング大事

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

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

→固まっているスレッド

→遊んでいるスレッド

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

• たくさんある

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

チューニングポイント

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

侍の起動方法・ちょっと面倒 $ 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としてパッケージ化予定

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

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

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

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

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

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

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

板橋区報より

# 終わりです