SlideShare a Scribd company logo
1 of 19
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
パフォーマンス ボトルネック
国内あるある事例
タクトシステムズ株式会社
ソリューション事業部
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
弊社について
•タクトシステムズ株式会社
– 1986年設立 社員数140名
– 独立系SIerとして顧客要望に合わせたシステムを構築
– dynaTraceの国内第1号販売代理店
– ユーザとして実際にdynaTraceを利用することで
発見した事例をより多くの皆様に伝えたい→本発表に至る
– JJUGの鈴木会長にご提案し、お使い頂いております
1
+
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
ボトルネックとは
•直訳すると 「瓶(びん)の首」
•最も流れが滞る箇所
•システムのパフォーマンスについてのボトルネックとは、
ある処理の実行時間のうち、1番時間がかかっている箇所
特徴
•ボトルネック以外の箇所を改善しても効果が薄い
•ボトルネックは移動する
– ボトルネックを改善することで、その箇所はボトルネックではなくなり、
新たな箇所がボトルネックとなる
2
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
ボトルネックの種類
•プログラム視点のボトルネック
– 大きな一つの処理がある
– 経験とカンである程度予測できる
→システムの複雑化により特定が困難に
– SQL が原因のケースがよくある
•トランザクション視点のボトルネック
– 大量の処理がある
– 従来の観点・手法では特定が困難
– ループ誤り、非効率なロジック
3
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例紹介
•dynaTraceにより発見した以下事例をご紹介
1. DBコネクション(プーリング未設定)
2. Synchronizedによる排他処理
3. 大量のSQL実行
4. 文字列結合
5. Proxy設定のトラブル<番外編>
4
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例1. DBコネクション(プーリング未設定)
5
DBサーバ
コネクション
プール
org.apache.commo
ns.dbcp.BasicDa
taSource
getConnection()
org.springframewor
k.jdbc.datasource.
DriverManager
DataSource
getConnection()
(デフォルト)
プーリングなし プーリングあり
毎回新しくコネクションを張り、
ボトルネックとなっていた
○×
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例1. DBコネクション(プーリング未設定)
6
種類 プログラム視点のボトルネック
要因 I/O
内容 SpringフレームワークのDBコネクション設定をデ
フォルトのまま使用していたため、コネクション
プールを使用しない動作となっていた。
対応 コネクションプールを使用する設定へ変更した。
原因 フレームワークの設定を全て把握することは難し
い。とりあえずデフォルトで動かしていた。
発見難易度:中 DB接続周りのログは、確認しやすいが、
思い込みによって、コネクションプーリングを利用
していないことに気付かない場合がある。
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例2. Synchronizedによる排他処理
7
スレッド1
・・・
マスタデータ
取得処理
Synchronized
Synchronized
スレッド2 スレッド3
Synchronized
待ち
待ち
×
×
×
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例2. Synchronizedによる排他処理
8
種類 プログラム視点のボトルネック
要因 同期待ち
内容 ログイン時の処理でSynchronizedによる排他をか
けたところ、同時アクセスで同期待ちが大量発生。
対応 処理タイミングをログイン時からアプリケーション
起動時に変更した。
原因 スレッドセーフを実現するために、安易に
Synchronizedを使用していた。
排他をかける範囲や必要性を吟味すべき。
発見難易度:高 JMXよりスレッドの状態、スレッドのブロック時間、
さらにはスタックトレースを何度も繰り返し取得し
分析する必要がある。
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例2. Synchronizedによる排他処理
9
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例3. 大量のSQL実行
10
DBサーバ
アプリケーション
サーバ
Insert文
1回の実行時間は短いが…
繰り返すと
ボトルネックに…
×
○
executeBatch
で格段に早く
DBサーバ
アプリケーション
サーバ
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例3. 大量のSQL実行
11
種類 トランザクション視点のボトルネック
要因 I/O
内容 大量のデータ登録処理を、データ1件ずつInsert
文を発行していた。結果、30秒以上の処理時間と
なった。
対応 JDBCのバッチ更新機能に変更した。結果、0.3秒
に短縮された。
原因 大量のデータ登録を想定せずに実装した。
テストは少量データで実施し、パフォーマンスの
問題として顕在化しなかった。
発見難易度:中 Insert文1回の実行時間が短く、リソース(CPU, メ
モリ)の消費も低いため、サーバ視点で見ても問
題が見つからない。
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例4. 文字列結合
12
String str = "";
for (int i = 0; i < 1000000; i++) {
str += i;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000000; i++) {
sb.append(i);
}
String str = sb.toString();
String str = "";
for (int i = 0; i < 1000000; i++) {
str = new StringBuilder().append(str).append(i).toString();
}
(JDK1.5以上の場合)
実質的には…
インスタンス
の生成を
1000000回
繰り返す…
×
○ 上に比べて、
数百倍速い
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例4. 文字列結合
13
種類 トランザクション視点のボトルネック
要因 CPU
内容 大量の文字列結合に「+」を使用したところ、スト
リングバッファのnewとappendが発生し、配列コ
ピーでCPU負荷が高くなった。
対応 StringBuilder appendに書き換えることで解消。
原因 記述の容易さや可読性の良さにより、「+」を使用
しがち。 StringBuilder appendとの動作や性能の
違いを意識しているプログラマーばかりではない。
発見難易度:中 目視によるコードレビューでは限界がある。
有識者であれば発見は早いが、そうでなければ
ログを出力して分析する必要あり。
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
クライアント
ブラウザ
事例5. Proxy設定のトラブル<番外編>
14
アプリケーション
サーバ
Proxy
サーバ
リダイ
レクト
エラー
×
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
事例5. Proxy設定のトラブル<番外編>
15
要因 ネットワーク
内容 HTMLからリダイレクトを繰り返して実行する処理
で、ネットワーク上のProxyサーバが弾いていた。
対応 細かく分けていた処理をまとめ、リダイレクトの回
数を減らした。
原因 Proxyサーバの挙動について認識していなかった。
発見難易度:高 インフラに精通していないと特定は困難。
アプリケーション側のログを分析しても原因不明。
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
まとめ
•ボトルネックの種類
– プログラム視点のボトルネック
– トランザクション視点のボトルネック
•ボトルネックの特定は、困難になる一方
– 複雑化するシステム構成
– 従来の観点・手法では、限界
•dynaTraceにより短時間でボトルネックを特定できた
16
クラウド
Webサービス モバイル
仮想化
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
最後に・・・
17
内容
現在タクトシステムズでは、本日ご紹介した『dynaTrace』を活用し
【パフォーマンスボトルネック調査サービス】を実施しております。
本セミナにご参加頂きました皆様には特別価格(通常の50%)5万円にて
ご提供いたします(6月末までの期間限定)。
※詳細は配布資料の最終ページをご確認ください。
特徴
早い! dynaTrace導入から2時間以内にボトルネックを特定いたします。
安い! 成功報酬型でボトルネックを特定できない場合は無料です。
簡単! 対象システムの設定変更やログ出力の追加などは不要です。
皆様もdynaTraceの効果を体験しませんか?
パフォーマンスボトルネック調査サービスを提供中
Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow
18
お問合せ先 : タクトシステムズ株式会社
〒111-0051 東京都台東区蔵前3-1-10 蔵前セントラルビル2F
ソリューション事業部 (03)5820-8150
〒532-0003 大阪市淀川区宮原4-5-36 セントラル新大阪ビル7F
ソリューション営業部 (06)6399-1700
http://www.takt.co.jp/
Please “CON ” us.Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow

More Related Content

What's hot

What's hot (20)

使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 
Azure DevOps × スクラム で実現するプロダクト開発のポイント #dotnetlab #jazug
Azure DevOps × スクラム で実現するプロダクト開発のポイント #dotnetlab #jazugAzure DevOps × スクラム で実現するプロダクト開発のポイント #dotnetlab #jazug
Azure DevOps × スクラム で実現するプロダクト開発のポイント #dotnetlab #jazug
 
コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活コンテナで始める柔軟な AWS Lambda 生活
コンテナで始める柔軟な AWS Lambda 生活
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Splunkを使ってKubernetesクラスターとコンテナのログ・メトリクスを可視化
Splunkを使ってKubernetesクラスターとコンテナのログ・メトリクスを可視化Splunkを使ってKubernetesクラスターとコンテナのログ・メトリクスを可視化
Splunkを使ってKubernetesクラスターとコンテナのログ・メトリクスを可視化
 
エンジニアチームにとって手の届くKPIを考えて、仕事に取り入れてみた supported by アトラクタ原田騎郎さん
エンジニアチームにとって手の届くKPIを考えて、仕事に取り入れてみた supported by アトラクタ原田騎郎さんエンジニアチームにとって手の届くKPIを考えて、仕事に取り入れてみた supported by アトラクタ原田騎郎さん
エンジニアチームにとって手の届くKPIを考えて、仕事に取り入れてみた supported by アトラクタ原田騎郎さん
 
設計・構築においてのドキュメントの重要性について
設計・構築においてのドキュメントの重要性について設計・構築においてのドキュメントの重要性について
設計・構築においてのドキュメントの重要性について
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
広く知ってほしいDNSのこと ―とあるセキュリティ屋から見たDNS受難の10年間―
広く知ってほしいDNSのこと ―とあるセキュリティ屋から見たDNS受難の10年間―広く知ってほしいDNSのこと ―とあるセキュリティ屋から見たDNS受難の10年間―
広く知ってほしいDNSのこと ―とあるセキュリティ屋から見たDNS受難の10年間―
 
Nuxt.jsとExpressでSPA×SSR×API Aggregationを実現した話
Nuxt.jsとExpressでSPA×SSR×API Aggregationを実現した話Nuxt.jsとExpressでSPA×SSR×API Aggregationを実現した話
Nuxt.jsとExpressでSPA×SSR×API Aggregationを実現した話
 
Google Cloud Platform で実現するプロダクションレディ マイクロサービス
Google Cloud Platform で実現するプロダクションレディ マイクロサービスGoogle Cloud Platform で実現するプロダクションレディ マイクロサービス
Google Cloud Platform で実現するプロダクションレディ マイクロサービス
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
 
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
マイクロサービスのセキュリティ概説
マイクロサービスのセキュリティ概説マイクロサービスのセキュリティ概説
マイクロサービスのセキュリティ概説
 
ここが良かったDatadog
ここが良かったDatadogここが良かったDatadog
ここが良かったDatadog
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
 
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajpKafka・Storm・ZooKeeperの認証と認可について #kafkajp
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
 

Similar to パフォーマンス ボトルネック 国内あるある事例

[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
Insight Technology, Inc.
 

Similar to パフォーマンス ボトルネック 国内あるある事例 (20)

IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
人と機械の協働によりデータ分析作業の効率化を目指す協働型機械学習技術(NTTデータ テクノロジーカンファレンス 2020 発表資料)
人と機械の協働によりデータ分析作業の効率化を目指す協働型機械学習技術(NTTデータ テクノロジーカンファレンス 2020 発表資料)人と機械の協働によりデータ分析作業の効率化を目指す協働型機械学習技術(NTTデータ テクノロジーカンファレンス 2020 発表資料)
人と機械の協働によりデータ分析作業の効率化を目指す協働型機械学習技術(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
20181019日経xTECH EXPO講演 | 今からでも遅くない!事例に学ぶIoT導入のための技術ポイント実践講座
20181019日経xTECH EXPO講演 | 今からでも遅くない!事例に学ぶIoT導入のための技術ポイント実践講座20181019日経xTECH EXPO講演 | 今からでも遅くない!事例に学ぶIoT導入のための技術ポイント実践講座
20181019日経xTECH EXPO講演 | 今からでも遅くない!事例に学ぶIoT導入のための技術ポイント実践講座
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
 
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
 
[db tech showcase Tokyo 2014] D25: 今を分析する日立の「CEP」、知るなら今でしょ! by 株式会社日立製作所 村上順一
 [db tech showcase Tokyo 2014] D25: 今を分析する日立の「CEP」、知るなら今でしょ!  by 株式会社日立製作所 村上順一 [db tech showcase Tokyo 2014] D25: 今を分析する日立の「CEP」、知るなら今でしょ!  by 株式会社日立製作所 村上順一
[db tech showcase Tokyo 2014] D25: 今を分析する日立の「CEP」、知るなら今でしょ! by 株式会社日立製作所 村上順一
 
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
 
Ladder of cqrs+es
Ladder of cqrs+esLadder of cqrs+es
Ladder of cqrs+es
 
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
 
データサイエンティスト協会 木曜勉強会 #09 『意志の力が拓くシステム~最適化の適用事例から見たデータ活用システムの現在と未来~』
データサイエンティスト協会 木曜勉強会 #09 『意志の力が拓くシステム~最適化の適用事例から見たデータ活用システムの現在と未来~』データサイエンティスト協会 木曜勉強会 #09 『意志の力が拓くシステム~最適化の適用事例から見たデータ活用システムの現在と未来~』
データサイエンティスト協会 木曜勉強会 #09 『意志の力が拓くシステム~最適化の適用事例から見たデータ活用システムの現在と未来~』
 
エッジヘビーコンピューティングと機械学習
エッジヘビーコンピューティングと機械学習エッジヘビーコンピューティングと機械学習
エッジヘビーコンピューティングと機械学習
 
pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)
 
作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...
作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...
作って(壊して?)学ぶインターネットのしくみ サイバーエージェントの実験用ASの紹介 / Introduce experimental AS in ...
 
ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方
ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方
ゲーム事業×データ分析 ドリコムにおける組織と仕事の組み立て方
 
20150630_データ分析に最適な基盤とは? -コスト/スピードでビジネスバリューを得るために- by 株式会社インサイトテクノロジー CTO 石川雅也
20150630_データ分析に最適な基盤とは? -コスト/スピードでビジネスバリューを得るために- by 株式会社インサイトテクノロジー CTO 石川雅也20150630_データ分析に最適な基盤とは? -コスト/スピードでビジネスバリューを得るために- by 株式会社インサイトテクノロジー CTO 石川雅也
20150630_データ分析に最適な基盤とは? -コスト/スピードでビジネスバリューを得るために- by 株式会社インサイトテクノロジー CTO 石川雅也
 
良い原稿を作る3つの要素、読み易い文章を作る5つのコツ、SQiPシンポジウムアブストラクト作成のポイント
良い原稿を作る3つの要素、読み易い文章を作る5つのコツ、SQiPシンポジウムアブストラクト作成のポイント良い原稿を作る3つの要素、読み易い文章を作る5つのコツ、SQiPシンポジウムアブストラクト作成のポイント
良い原稿を作る3つの要素、読み易い文章を作る5つのコツ、SQiPシンポジウムアブストラクト作成のポイント
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
 
CNNチュートリアル
CNNチュートリアルCNNチュートリアル
CNNチュートリアル
 
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセスPydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
 
GTMF 2017:Unityプロファイリングマニアクス ユニティ・テクノロジーズ・ジャパン合同会社
GTMF 2017:Unityプロファイリングマニアクス ユニティ・テクノロジーズ・ジャパン合同会社GTMF 2017:Unityプロファイリングマニアクス ユニティ・テクノロジーズ・ジャパン合同会社
GTMF 2017:Unityプロファイリングマニアクス ユニティ・テクノロジーズ・ジャパン合同会社
 

More from 日本Javaユーザーグループ

JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組みJJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
日本Javaユーザーグループ
 

More from 日本Javaユーザーグループ (12)

日本Javaユーザーグループ 2018年度 定期総会
日本Javaユーザーグループ 2018年度 定期総会日本Javaユーザーグループ 2018年度 定期総会
日本Javaユーザーグループ 2018年度 定期総会
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaグループ2016年定期総会 #jjug #ccc_soukai日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
 
JCache Using JCache
JCache Using JCacheJCache Using JCache
JCache Using JCache
 
JJUG CCC 2015 Spring 総会資料
JJUG CCC 2015 Spring 総会資料JJUG CCC 2015 Spring 総会資料
JJUG CCC 2015 Spring 総会資料
 
Jjug ccc spring_#ccc_r55
Jjug ccc spring_#ccc_r55Jjug ccc spring_#ccc_r55
Jjug ccc spring_#ccc_r55
 
JJUG CCC 2014 Spring 定期総会
JJUG CCC 2014 Spring 定期総会JJUG CCC 2014 Spring 定期総会
JJUG CCC 2014 Spring 定期総会
 
パフォーマンス管理最前線 米国大規模システムにおける最新トレンド
パフォーマンス管理最前線 米国大規模システムにおける最新トレンドパフォーマンス管理最前線 米国大規模システムにおける最新トレンド
パフォーマンス管理最前線 米国大規模システムにおける最新トレンド
 
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組みJJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
 
JJUG CCC 2013 Spring 定期総会資料
JJUG CCC 2013 Spring 定期総会資料JJUG CCC 2013 Spring 定期総会資料
JJUG CCC 2013 Spring 定期総会資料
 
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
 

パフォーマンス ボトルネック 国内あるある事例

  • 1. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow パフォーマンス ボトルネック 国内あるある事例 タクトシステムズ株式会社 ソリューション事業部
  • 2. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 弊社について •タクトシステムズ株式会社 – 1986年設立 社員数140名 – 独立系SIerとして顧客要望に合わせたシステムを構築 – dynaTraceの国内第1号販売代理店 – ユーザとして実際にdynaTraceを利用することで 発見した事例をより多くの皆様に伝えたい→本発表に至る – JJUGの鈴木会長にご提案し、お使い頂いております 1 +
  • 3. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow ボトルネックとは •直訳すると 「瓶(びん)の首」 •最も流れが滞る箇所 •システムのパフォーマンスについてのボトルネックとは、 ある処理の実行時間のうち、1番時間がかかっている箇所 特徴 •ボトルネック以外の箇所を改善しても効果が薄い •ボトルネックは移動する – ボトルネックを改善することで、その箇所はボトルネックではなくなり、 新たな箇所がボトルネックとなる 2
  • 4. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow ボトルネックの種類 •プログラム視点のボトルネック – 大きな一つの処理がある – 経験とカンである程度予測できる →システムの複雑化により特定が困難に – SQL が原因のケースがよくある •トランザクション視点のボトルネック – 大量の処理がある – 従来の観点・手法では特定が困難 – ループ誤り、非効率なロジック 3
  • 5. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例紹介 •dynaTraceにより発見した以下事例をご紹介 1. DBコネクション(プーリング未設定) 2. Synchronizedによる排他処理 3. 大量のSQL実行 4. 文字列結合 5. Proxy設定のトラブル<番外編> 4
  • 6. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例1. DBコネクション(プーリング未設定) 5 DBサーバ コネクション プール org.apache.commo ns.dbcp.BasicDa taSource getConnection() org.springframewor k.jdbc.datasource. DriverManager DataSource getConnection() (デフォルト) プーリングなし プーリングあり 毎回新しくコネクションを張り、 ボトルネックとなっていた ○×
  • 7. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例1. DBコネクション(プーリング未設定) 6 種類 プログラム視点のボトルネック 要因 I/O 内容 SpringフレームワークのDBコネクション設定をデ フォルトのまま使用していたため、コネクション プールを使用しない動作となっていた。 対応 コネクションプールを使用する設定へ変更した。 原因 フレームワークの設定を全て把握することは難し い。とりあえずデフォルトで動かしていた。 発見難易度:中 DB接続周りのログは、確認しやすいが、 思い込みによって、コネクションプーリングを利用 していないことに気付かない場合がある。
  • 8. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例2. Synchronizedによる排他処理 7 スレッド1 ・・・ マスタデータ 取得処理 Synchronized Synchronized スレッド2 スレッド3 Synchronized 待ち 待ち × × ×
  • 9. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例2. Synchronizedによる排他処理 8 種類 プログラム視点のボトルネック 要因 同期待ち 内容 ログイン時の処理でSynchronizedによる排他をか けたところ、同時アクセスで同期待ちが大量発生。 対応 処理タイミングをログイン時からアプリケーション 起動時に変更した。 原因 スレッドセーフを実現するために、安易に Synchronizedを使用していた。 排他をかける範囲や必要性を吟味すべき。 発見難易度:高 JMXよりスレッドの状態、スレッドのブロック時間、 さらにはスタックトレースを何度も繰り返し取得し 分析する必要がある。
  • 10. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例2. Synchronizedによる排他処理 9
  • 11. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例3. 大量のSQL実行 10 DBサーバ アプリケーション サーバ Insert文 1回の実行時間は短いが… 繰り返すと ボトルネックに… × ○ executeBatch で格段に早く DBサーバ アプリケーション サーバ
  • 12. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例3. 大量のSQL実行 11 種類 トランザクション視点のボトルネック 要因 I/O 内容 大量のデータ登録処理を、データ1件ずつInsert 文を発行していた。結果、30秒以上の処理時間と なった。 対応 JDBCのバッチ更新機能に変更した。結果、0.3秒 に短縮された。 原因 大量のデータ登録を想定せずに実装した。 テストは少量データで実施し、パフォーマンスの 問題として顕在化しなかった。 発見難易度:中 Insert文1回の実行時間が短く、リソース(CPU, メ モリ)の消費も低いため、サーバ視点で見ても問 題が見つからない。
  • 13. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例4. 文字列結合 12 String str = ""; for (int i = 0; i < 1000000; i++) { str += i; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000000; i++) { sb.append(i); } String str = sb.toString(); String str = ""; for (int i = 0; i < 1000000; i++) { str = new StringBuilder().append(str).append(i).toString(); } (JDK1.5以上の場合) 実質的には… インスタンス の生成を 1000000回 繰り返す… × ○ 上に比べて、 数百倍速い
  • 14. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例4. 文字列結合 13 種類 トランザクション視点のボトルネック 要因 CPU 内容 大量の文字列結合に「+」を使用したところ、スト リングバッファのnewとappendが発生し、配列コ ピーでCPU負荷が高くなった。 対応 StringBuilder appendに書き換えることで解消。 原因 記述の容易さや可読性の良さにより、「+」を使用 しがち。 StringBuilder appendとの動作や性能の 違いを意識しているプログラマーばかりではない。 発見難易度:中 目視によるコードレビューでは限界がある。 有識者であれば発見は早いが、そうでなければ ログを出力して分析する必要あり。
  • 15. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow クライアント ブラウザ 事例5. Proxy設定のトラブル<番外編> 14 アプリケーション サーバ Proxy サーバ リダイ レクト エラー ×
  • 16. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 事例5. Proxy設定のトラブル<番外編> 15 要因 ネットワーク 内容 HTMLからリダイレクトを繰り返して実行する処理 で、ネットワーク上のProxyサーバが弾いていた。 対応 細かく分けていた処理をまとめ、リダイレクトの回 数を減らした。 原因 Proxyサーバの挙動について認識していなかった。 発見難易度:高 インフラに精通していないと特定は困難。 アプリケーション側のログを分析しても原因不明。
  • 17. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow まとめ •ボトルネックの種類 – プログラム視点のボトルネック – トランザクション視点のボトルネック •ボトルネックの特定は、困難になる一方 – 複雑化するシステム構成 – 従来の観点・手法では、限界 •dynaTraceにより短時間でボトルネックを特定できた 16 クラウド Webサービス モバイル 仮想化
  • 18. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 最後に・・・ 17 内容 現在タクトシステムズでは、本日ご紹介した『dynaTrace』を活用し 【パフォーマンスボトルネック調査サービス】を実施しております。 本セミナにご参加頂きました皆様には特別価格(通常の50%)5万円にて ご提供いたします(6月末までの期間限定)。 ※詳細は配布資料の最終ページをご確認ください。 特徴 早い! dynaTrace導入から2時間以内にボトルネックを特定いたします。 安い! 成功報酬型でボトルネックを特定できない場合は無料です。 簡単! 対象システムの設定変更やログ出力の追加などは不要です。 皆様もdynaTraceの効果を体験しませんか? パフォーマンスボトルネック調査サービスを提供中
  • 19. Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow 18 お問合せ先 : タクトシステムズ株式会社 〒111-0051 東京都台東区蔵前3-1-10 蔵前セントラルビル2F ソリューション事業部 (03)5820-8150 〒532-0003 大阪市淀川区宮原4-5-36 セントラル新大阪ビル7F ソリューション営業部 (06)6399-1700 http://www.takt.co.jp/ Please “CON ” us.Technology and Knowledge for TomorrowTechnology and Knowledge for Tomorrow