《Troubleshooting Java(第2版)》权威学习地图
把代码理解、调试、日志、剖析、线程、内存、分布式失败与一致性串成由低扰动证据逐步升级的调查路径。 覆盖24个正式节点,并用基线、故障、恢复和复位证据验收。
为什么从“全书调查路径编排台”开始
《Troubleshooting Java(第2版)》权威学习地图要解决的是把代码理解、调试、日志、剖析、线程、内存、分布式失败与一致性串成由低扰动证据逐步升级的调查路径。 直觉上,最后出现的异常、最热的方法和最大的对象都只是信号;根因必须解释正常与故障时间线的第一个分叉,并能让原反例在最小修复后稳定转为通过。
先预测:把故障可复现度从“可控回放”切换到“最小稳定复现”,路径定位率和观测扰动风险将怎样变化?运行前写下能推翻假设的观察,结果不符时修改假设而不是删除失败样本。
来源、版次与独立重写边界
Manning官方产品页确认 Laurențiu Spilcă《Troubleshooting Java》第2版于2025年10月出版、360页、ISBN 9781633435575,并公开4个Part、13章、附录A–F的完整目录;课程映射24个正式单元、138个目录节点,另设学习地图与总复习。本页未取得原书正文,完整目录只用于限定单元和小节范围,不宣称正文忠实。
本页机制以Oracle JDK 25故障排查指南、jcmd手册、JFR手册、VisualVM官方文档和OpenTelemetry Java文档中的适用部分独立核验。中文解释、命令组织、交互模型、练习与答案均为独立教学重写;工具文档许可证不被误报为原书授权。
本章术语与调查合同
、、、、、。
《Troubleshooting Java(第2版)》权威学习地图必须守住“任何根因都能由冻结基线、原始信号、反例与修复重放共同支持”。故障可复现度与证据侵入度是离散调查坐标,路径定位率和观测扰动风险分开报告;交互中的数值只表达透明因果方向,不是假装采集了真实生产指标。
官方目录逐项深读
Part 1 Revisiting the foundation for code investigation
四级证据 1/24。 Part 1 Revisiting the foundation for code investigation:分部页负责声明相邻章节共用的升级条件、证据接口和不可跨越的前置门禁。本节点以“事件窗口”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Part 1 Revisiting the foundation for code investigation 时,先预测它在 冻结事件 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
1 Starting to know your apps
四级证据 2/24。 1 Starting to know your apps:先确定入口、关键请求、状态所有者与外部依赖,再把一次正常执行保存为后续差分基线。本节点以“版本基线”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 1 Starting to know your apps 时,先预测它在 提出假设 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
2 Understanding your app’s logic through debugging techniques
四级证据 3/24。 2 Understanding your app’s logic through debugging techniques:Understanding your app’s logic through debugging techniques要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“假设树”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 2 Understanding your app’s logic through debugging techniques 时,先预测它在 低扰动采证 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
3 Finding problem root causes using advanced debugging techniques
四级证据 4/24。 3 Finding problem root causes using advanced debugging techniques:Finding problem root causes using advanced debugging techniques要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“原始信号”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 3 Finding problem root causes using advanced debugging techniques 时,先预测它在 定向深挖 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
4 Making the most of logs: Auditing an app’s behavior
四级证据 5/24。 4 Making the most of logs: Auditing an app’s behavior:Making the most of logs: Auditing an app’s behavior要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“反例”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 4 Making the most of logs: Auditing an app’s behavior 时,先预测它在 修复重放 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Part 2 Deep diagnosing an app’s execution
四级证据 6/24。 Part 2 Deep diagnosing an app’s execution:分部页负责声明相邻章节共用的升级条件、证据接口和不可跨越的前置门禁。本节点以“交接包”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Part 2 Deep diagnosing an app’s execution 时,先预测它在 冻结事件 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
5 Identifying resource consumption problems using profiling techniques
四级证据 7/24。 5 Identifying resource consumption problems using profiling techniques:Identifying resource consumption problems using profiling techniques要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“事件窗口”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 5 Identifying resource consumption problems using profiling techniques 时,先预测它在 提出假设 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
6 Finding hidden problems using profiling techniques
四级证据 8/24。 6 Finding hidden problems using profiling techniques:Finding hidden problems using profiling techniques要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“版本基线”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 6 Finding hidden problems using profiling techniques 时,先预测它在 低扰动采证 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
7 Investigating locks in multithreaded architectures
四级证据 9/24。 7 Investigating locks in multithreaded architectures:多线程日志要带线程或任务身份及关联标识,否则交错行无法还原happens-before。本节点以“假设树”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 7 Investigating locks in multithreaded architectures 时,先预测它在 定向深挖 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
8 Investigating deadlocks with thread dumps
四级证据 10/24。 8 Investigating deadlocks with thread dumps:死锁由闭合等待环使参与者永久无法推进,线程转储可重建锁环。本节点以“原始信号”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 8 Investigating deadlocks with thread dumps 时,先预测它在 修复重放 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Part 3 Diagnosing memory-related problems
四级证据 11/24。 Part 3 Diagnosing memory-related problems:分部页负责声明相邻章节共用的升级条件、证据接口和不可跨越的前置门禁。本节点以“反例”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Part 3 Diagnosing memory-related problems 时,先预测它在 冻结事件 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
9 Profiling memory-related problems
四级证据 12/24。 9 Profiling memory-related problems:Profiling memory-related problems要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“交接包”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 9 Profiling memory-related problems 时,先预测它在 提出假设 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
10 Investigating memory problems with heap dumps
四级证据 13/24。 10 Investigating memory problems with heap dumps:Investigating memory problems with heap dumps要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“事件窗口”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 10 Investigating memory problems with heap dumps 时,先预测它在 低扰动采证 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
11 Analyzing potential JVM problems with GC logs
四级证据 14/24。 11 Analyzing potential JVM problems with GC logs:Analyzing potential JVM problems with GC logs要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“版本基线”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 11 Analyzing potential JVM problems with GC logs 时,先预测它在 定向深挖 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Part 4 Finding problems in large systems
四级证据 15/24。 Part 4 Finding problems in large systems:分部页负责声明相邻章节共用的升级条件、证据接口和不可跨越的前置门禁。本节点以“假设树”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Part 4 Finding problems in large systems 时,先预测它在 修复重放 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
12 Uncovering system-level failures and service communication problems
四级证据 16/24。 12 Uncovering system-level failures and service communication problems:Uncovering system-level failures and service communication problems要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“原始信号”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 12 Uncovering system-level failures and service communication problems 时,先预测它在 冻结事件 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
13 Measuring data consistency and transactions
四级证据 17/24。 13 Measuring data consistency and transactions:Measuring data consistency and transactions要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“反例”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 13 Measuring data consistency and transactions 时,先预测它在 提出假设 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendices
四级证据 18/24。 Appendices:附录总览把环境、工具、线程与内存基础变成调查就绪检查,而非可忽略尾页。本节点以“交接包”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendices 时,先预测它在 低扰动采证 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendix A: Tools you’ll need
四级证据 19/24。 Appendix A: Tools you’ll need:工具清单必须包含来源、版本、权限、采集成本和输出数据生命周期。本节点以“事件窗口”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendix A: Tools you’ll need 时,先预测它在 定向深挖 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendix B: Opening a project
四级证据 20/24。 Appendix B: Opening a project:项目打开从精确修订、JDK与构建wrapper开始,IDE只是同一基线的一个入口。本节点以“版本基线”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendix B: Opening a project 时,先预测它在 修复重放 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendix C: Recommended further reading
四级证据 21/24。 Appendix C: Recommended further reading:延伸阅读按问题路由到规范、厂商指南和工具手册,并记录目标版本。本节点以“假设树”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendix C: Recommended further reading 时,先预测它在 冻结事件 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendix D: Understanding Java threads
四级证据 22/24。 Appendix D: Understanding Java threads:Appendix D: Understanding Java threads要进入冻结事件—提出假设—低扰动采证—定向深挖—修复重放的调查链,并说明可观察信号与推翻条件。本节点以“原始信号”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendix D: Understanding Java threads 时,先预测它在 提出假设 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendix E: Memory management in Java apps
四级证据 23/24。 Appendix E: Memory management in Java apps:先确定入口、关键请求、状态所有者与外部依赖,再把一次正常执行保存为后续差分基线。本节点以“反例”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendix E: Memory management in Java apps 时,先预测它在 低扰动采证 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
Appendix F: references
四级证据 24/24。 Appendix F: references:引用登记来源身份和直接支持的主张,不能用权威链接替代本地因果证据。本节点以“交接包”为焦点,运行jcmd -l或等价探针,保存原始输出、时间窗、扰动预算和适用边界。
验证 Appendix F: references 时,先预测它在 定向深挖 阶段怎样改变路径定位率;随后只调整故障可复现度或证据侵入度。若“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”没有制造预期首错,就撤回当前假设并检查替代解释。
最小调查切片
java --version
jcmd -l
jfr configure《Troubleshooting Java(第2版)》权威学习地图运行该切片时要固定主机、容器、进程、JDK、应用commit、配置、负载与时间窗;所有日志、JFR、线程转储和堆转储都写入受控目录并登记大小、哈希、权限和删除期限。命令失败或超出扰动预算时立即停止,不把半份工件包装成完整证据。
unit: jvt-2e-official-learning-map
command: "jcmd -l"
baseline: frozen
fault: "一开始就用最高侵入工具,改变时序后把观测结果误当原始故障"
invariant: "任何根因都能由冻结基线、原始信号、反例与修复重放共同支持"
replay: same_input_same_window三个必须主动触发的误区
练习、答案与节点验证
术语复核与本章回顾
完成《Troubleshooting Java(第2版)》权威学习地图意味着能说明把代码理解、调试、日志、剖析、线程、内存、分布式失败与一致性串成由低扰动证据逐步升级的调查路径。,能运行本章调查切片,能主动制造“一开始就用最高侵入工具,改变时序后把观测结果误当原始故障”,还能用原始信号和反例证明修复而非只展示工具截图。