小堀 一雄 著
飯山 教史 著
飯山 教史 監修
茂呂 範 著
佐藤 聖規 著
石垣 一 著
ソフトウェア(システムやアプリケーション)の開発/運用時には、バグや性能低下、故障など、さまざまな問題が発生する可能があります。本書は、ソフトウェア開発時の「デバッグ」と、運用時の「トラブルシュート(故障部位の特定と解析)」の解説書です。主にJava開発者、システム運用管理/サポート担当者を対象としています。運用時のバグや故障を未然に防ぐには、設計段階からしっかりと情報収集の方法を組み込んでおく必要があります。また、開発時には効率的にデバッグを行ない、後工程にすり抜けるバグを減らさなくてはなりません。それでも運用時に故障が発生した際には、原因を特定/解析するためにエラーや発生箇所などの情報(ログ)を収集し、それを読み解くためのミドルウェア/OSの内部構造の知識が必要となります。これらすべての作業に対して読者の皆さんにスキルアップしてもらうため、本書ではデバッグやトラブルシュートを行なう際の必須知識、故障特定/解析に必要な情報を収集する設計方法、デバッグやトラブルシュートを効率的に行なうツールや手順、テクニックについて、実習を交えてわかりやすく解説します。
CHAPTER 01 システム開発におけるデバッグとトラブルシュート
1.1 はじめに
1.2 デバッグとトラブルシュートはなぜ必要か?
1.2.1 ソフトウェアの故障
1.3 故障が起こる原因
1.4 デバッグとトラブルシュートの概念~本書で対象とする故障への対処法
1.4.1 デバッグ
1.4.2 トラブルシュート
1.5 デバッグとトラブルシュートの基本的な流れ
1.5.1 デバッグの流れ
1.5.2 トラブルシュートの流れ
CHAPTER 02 デバッグ&トラブルシュートの基礎知識
2.1 要件定義/設計の必須知識
2.1.1 ソフトウェアに対する要件
2.1.2 システムの構成
2.2 バージョン管理の必須知識とツール
2.2.1 バージョン管理とは?
2.2.2 バージョン管理で使うツール
2.2.3 Subversionの必須知識
2.3 デバッグの必須知識とツール
2.3.1 デグレード
2.3.2 log4j
2.3.3 スタックトレース
2.3.4 Eclipse
2.3.5 Pleiades
2.3.6 Junit
2.3.7 ブレークポイント
2.4 トラブルシュートの必須知識とツール
2.4.1 開発環境、検証環境、商用環境
2.4.2 証跡
2.4.3 プロセスとスレッド
2.4.4 スレッドダンプ
2.4.5 ヒープメモリ
2.4.6 Garbage Collection
2.4.7 レスポンスタイムとターンアラウンドタイム
2.4.8 スループット
2.4.9 % ile(パーセンタイル)
CHAPTER 03 デバッグ&トラブルシュート環境の構築
3.1 デバッグ環境の構築
3.1.1 Java SE Development Kit(JDK)のインストール
3.1.2 Pleiades All in Oneを利用したEclipseのインストール
3.2 トラブルシュート環境の構築
3.2.1 samuraiのインストール
3.2.2 GCViewerのインストール
3.3 バージョン管理環境の構築
3.3.1 VisualSVN Serverを利用したSubversionのインストール
CHAPTER 04 デバッグ&トラブルシュートのための要件定義/設計
4.1 設計の流れ
4.1.1 デバッグ&トラブルシュートと設計の関係
4.1.2 設計の手順
4.2 要件定義/設計のノウハウ
4.2.1 運用を考慮した要件の決め方
4.2.2 運用時の必要情報とは?
4.2.3 ログの設計
4.2.4 効果的なログの記録ポイント
4.2.5 ヒープメモリ情報の取得方法
4.2.6 OSのプロセス情報
4.2.7 運用監視
4.2.8 復旧手順を決めておく
CHAPTER 05 確実なバージョン管理の実施
5.1 バージョン管理の進め方
5.1.1 バージョン管理システムのメリット
5.1.2 バージョン管理の手順
5.2 Subversionのバージョン管理機能
5.2.1 Subversionの特徴
5.3 Subversionを使ったバージョン管理
5.3.1 (1)Subersionのリポジトリ作成と整備
5.3.2 (2)プロジェクトのアップデート/チェックアウト
5.3.3 (3)リポジトリへコミット
5.3.4 (4)リソース管理
CHAPTER 06 効率的なデバッグの実行
6.1 デバッグの定義
6.1.1 デバッグとは何か?
6.1.2 デバッグの手順
6.1.3 バグの種類
6.2 デバッグのノウハウ
6.2.1 情報収集
6.2.2 原因分析
6.2.3 修正方法の検討および実施
6.3 例題による実習~プロセス/技能の実践方法
6.3.1 コンパイルエラーのデバッグ
6.3.2 ランタイムエラーのデバッグ
6.3.3 仕様違反のデバッグ
CHAPTER 07 トラブルシュートの全体像
7.1 トラブルシュートの進め方
7.1.1 トラブルシュートとは何か?
7.1.2 トラブルシュートの手順
7.2 問題把握
7.2.1 (1)故障内容と一次対応状況
7.2.2 (2)故障時のシステム動作状況
7.2.3 (3)システム構成と非機能要件
7.3 原因分析
7.3.1 (1)故障発生サーバの特定
7.3.2 (2)故障原因の切り分けと推定
7.3.3 (3)証跡を用いた分析結果の裏付け
7.4 対処の実施
7.4.1 (1)対処策の立案
7.4.2 (2)検証環境への対処策の実施/確認
7.4.3 (3)商用環境への対処策の実施/確認
CHAPTER 08 トラブルシュート~問題把握~
8.1 問題把握の進め方と収集情報
8.1.1 問題把握で収集する情報
8.1.2 (1)故障内容と一次対応状況
8.1.3 (2)故障時のシステム動作状況
8.1.4 (3)システム構成と非機能要件
8.1.5 (4)問題把握の手順
8.2 問題把握作業のノウハウ
8.2.1 故障内容の収集方法
8.2.2 一次対応状況の収集方法
8.2.3 故障時のシステム動作状況の収集方法
8.2.4 システム構成の収集方法
8.2.5 非機能要件の収集方法
8.3 例題による実習~プロセス/技法の実践方法
CHAPTER 09 トラブルシュート~原因分析~
9.1 原因分析の進め方
9.1.1 原因分析のゴール
9.1.2 原因分析のアウトプット
9.1.3 原因分析の手順
9.2 原因分析のノウハウ
9.2.1 故障発生サーバの特定のノウハウ
9.2.2 故障原因の切り分けと推定
9.2.3 証跡を用いた分析結果の裏付けのノウハウ
9.3 事例による学習~プロセス/技法の実践方法
9.3.1 ステップ1:サーバの切り分け
9.3.2 ステップ2:故障原因の切り分けと推定
9.3.3 ステップ3:証跡を用いた分析結果の裏付け
-------------------------------------------------------
巻末付録 1 情報収集/集計で使えるツール
巻末付録 1について
付録A Java編
A.1 JDK標準ツール
A.1.1 jps
A.1.2 jinfo
A.1.3 jstat
A.1.4 jstack
A.1.5 jmap
A.1.6 GCログ
A.1.7 スレッドダンプ
A.1.8 クラスヒストグラム
A.1.9 jconsole
A.1.10 jvisualvm
A.2 JDK標準以外のツール
A.2.1 samurai
A.2.2 GCViewer
A.2.1 samurai
付録B Linux編
B.1 OS標準ツール
B.1.1 vmstat
B.1.2 sar
B.1.3 netstat
B.1.4 ps
B.1.5 top
付録C Windows編
C.1 OS標準ツール
C.1.1 perfmon.exe
C.1.2 taskmgr.exe
巻末付録 2Javaアプリケーション起動オプション
巻末付録 3例題の解答例
COLUMN
ユーザとの適切な関係維持のために
テストとデバッグの違い
Javaの代表的なソフトウェアアーキテクチャ
開発が終わってもバージョン管理は終わらない
開発環境を統一しよう
「解析データ」の取得はセキュリティ的に危険?
復旧作業に失敗したときのことも考える
トラブルシュートのための設計とは?
ロック・ロック解除モデルのデメリット
一歩進んだバージョン管理
マルチスレッド処理のバグ
機能要件と非機能要件
開発環境の仮想化
ソースコードにログを埋め込む場合の注意点
記述ミスが表面化するタイミング
「仕様変更」という修正方法
暫定的なデバッグログを書かない
エラーメッセージに慌てない
対処策の実施を自動化する
GCの種類
仮想化技術を利用したシステムの構成図
トラブルシュートのゴールの明確化
Sorryサーバ
対処策の実施は柔軟に
-------------------------------------------------------
付属データはこちら
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
ipusiron さん
2018-05-04
メモ完。
メリクル さん
2011-01-15
ソースよりはJVMの動きの話多め。プログラマ向けの話としては早めにログのフォーマットを決めておく必要があるってことくらいだろうか。
dyui3 さん
2010-12-20
=D 右も左もわからずSIプロジェクトのPMOとして参画するコトになって現場のコトがわかっていなかったけど一通りのことを理解することができた。