猜你喜欢
Java深度调试技术

Java深度调试技术

书籍作者:张民卫 ISBN:9787301313602
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:6147
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介
Java系统越来越复杂,且很多系统不允许停机维护,这就给问题的定位带来了巨大的困难。本书将重点介绍问题定位技巧,借助这些技巧,读者可以快速找到解决问题的突破口。
  本书共有15章,内容涉及Java线程堆栈分析、性能瓶颈分析、内存泄漏分析和堆内存设置、并发和多线程、幽灵代码、常见的Java陷阱、数据库、字符集与编码、JVM运行参数、常用问题定位工具、计算架构与存储架构、开发语言等的选择、设计软件系统、工程实践、常见案例等内容。
  本书内容较为专业,适合有一定Java编程经验的人员阅读,尤其是高级程序员、系统架构师等学习使用。本书对提升读者的工作效率有较大的帮助。
作者简介
张民卫,系统架构师,曾在华为任职11年,主持华为公司所有基于 Java 语言平台的产品的疑难问题技术攻关工作,所支持产品覆盖全球130 多个国家。有近20年的Java开发经验,对超高可靠性与稳定性(99.999%的高可靠性要求)系统有深刻的理解和丰富的实战经验。作为技术专家,长期从事网上重大、特大运行事故以及疑难问题的技术攻关工作。
编辑推荐
系统:全方位讲解生产环境下Java运行期的非功能性故障发生的机理,定位方法、技巧与工具。
经典:凝聚笔者近20年的Java无人值守系统故障处理经验,首次奉献。
深入:从故障现象层层剥茧,深入分析发生的根因、临场救急方法、事前预防到事后补救技术。
实战:近百个案例均来自生产环境,介绍的方法命中率超过95%。
前言
目前,市面上已经出现了许多关于 Java 语言的书,但绝大多数都是聚焦 Java 语言开发的,系统介绍 Java 问题定位的书却很少。本书系统地介绍了 Java 问题定位技术,读者掌握了正确的使用方法后,就可以极大地提高工作效率。
采用 Java 语言开发的应用系统越来越大、越来越复杂,很多系统大量地集成了第三方的开发库与代码,使整个系统看起来像一个黑盒子。系统运行遭遇问题时,如系统停止响应、运行越来越慢,或者性能低下,甚至系统核心转储(core dump),如何迅速找到
问题是颇具挑战性的任务。特别是有些非功能性的问题只能在生产环境中重现,而生产环境又不允许进行停机维护,这就给问题定位带来了巨大的困难。本书将重点介绍这类问题的定位技巧,借助这些技巧读者可以快速找到解决问题的突破口。
本书将 Java 问题定位的方法体系化,提供一种以黑盒子方式进行问题定位的思路,比如,如何使用线程堆栈进行性能瓶颈分析?如何分析内存泄漏?如何分析系统挂死?掌握本书所介绍的方法后,在很多情况下可不需要源代码,甚至无须了解系统就可以对这类问题进行定位。本书介绍的定位技术主要有内存泄漏定位、线程堆栈分析等,内存泄漏定位套路比较固定,但线程堆栈分析则需要长期的经验积累。在可靠性和稳定性的问题定位中,线程堆栈分析是最有力的武器,掌握了这个定位工具,可大大增强自己的“内功”。
本书除介绍“事后”定位技术外,同时还介绍了相应的“事前”预防技术,对一些严重影响稳定性或者可靠性问题的“陷阱”进行了深入分析,它们正是对系统稳定性和可靠性有巨大影响的暗礁,如果能在系统的设计和编码阶段就采取预防措施,就不需要再付出
高额的维护成本了。
另外,软件系统的持续性管理也是一个容易被忽视的问题。一旦问题出现,则会造成巨大的时间成本与巨额投资的浪费。如何选择开发框架及开源库,将对系统产生持续而深远的影响。从近 25 年的软件发展史来看,有些开发语言(如 Delphi、VB)和开发框架(如 EJB)曾经如日中天,但今天已难寻踪影,究其原因,要么是语言或者框架技术过时了,要么是语言与框架所依托的开发团队解散,或者企业倒闭(如 Borland)。如何让软件不受这些外部因素影响,是每个大型系统都需要面对的问题。那么,哪些才是可信赖的语言与框架?如何在项目一开始就规避这些潜在风险?这些问题也是本书深入探讨的内容。
编 者
目录
第 1 章 Java 线程堆栈分析 1
1.1 打印线程堆栈 3
1.2 解读线程堆栈 4
1.3 线程堆栈分析的三个视角24
1.3 借助线程堆栈进行问题分析26
第 2 章 通过 Java 线程堆栈进行性能瓶颈分析 43
2.1 基本原理分析44
2.2 常见的性能瓶颈问题50
2.3 性能瓶颈分析的手段和工具51
2.4 性能分析的手段总结59
第 3 章 Java 内存泄漏分析和堆内存设置 62
3.1 Java 内存泄漏的背景知识63
3.2 Java 内存泄漏的症状81
3.3 Java 内存泄漏的定位和分析83
3.4 Java 堆内存泄漏的解决92
3.5 Java 内存和垃圾的回收设置94
第 4 章 关于并发和多线程102
4.1 在什么情况下需要加锁103
4.2 如何加锁104
4.3 多线程编程易犯的错误106
4.4 i++ 这种原子操作是否需要同步保护107
4.5 一个进程拥有的线程多,是否就可以获得更多的 CPU 107
4.6 合理设置线程的数量107
4.7 关于线程池109
4.8 notify 和 wait 的组合 109
4.9 线程的阻塞 113
4.10 Java 线程的优先级 115
4.11 关于多线程的错误观点 115
第 5 章 幽灵代码116
5.1 由异常而导致的函数非自主退出 117
5.2 wait () 与循环123
5.3 Double-Checked Locking 单例模式124
5.4 另一种异常陷阱——连续的关键接口调用 125
第 6 章 常见的 Java 陷阱 127
6.1 不稳定的 Runtime、getRuntime()、exec ()128
6.2 JDK 自带 Timer 的适用场合140
6.3 JDK 自带线程池的陷阱146
6.4 Timer 的使用陷阱146
第 7 章 关于数据库147
7.1 关于数据库表死锁与锁表的问题148
7.2 Oracle 的锁表 / 死锁151
7.3 使用事务的方法153
第 8 章 字符集与编码 154
8.1 字符集155
8.2 编码155
8.3 编码的识别157
8.4 关于编码的转换158
第 9 章 JVM 运行参数解析 160
9.1 Java 运行期参数161
9.2 Java -X 扩展运行参数167
9.3 关于即时编译器(JIT)171
9.4 -Xrunhprof172
9.5 正确的视角看虚拟机180
第 10 章 常用的问题定位工具181
10.1 远程调试 182
10.2 UNIX 下的进行分析利器 proc 182
10.3 UNIX 的进程统计工具 prstat187
10.4 UNIX 的剖析工具 188
10.5 路由跟踪命令 traceroute/tracert 188
10.6 swap 交换分区管理189
10.7 文件类型 / 符号表 189
10.8 Windows 的相关工具 189
第 11 章 计算架构与存储架构191
11.1 计算架构——基于无状态的设计192
11.2 存储架构——数据分片196
11.3 存储架构的总结199
11.4 其他架构的设计建议200
第 12 章 项目生命周期与框架、语言、开源选择202
12.1 以项目时间尺度衡量开发语言的选择 203
12.2 以项目时间尺度衡量开发框架的使用策略 204
12.3 以项目时间尺度衡量开源的选择 205
第 13 章 设计“工业强度”的软件系统207
13.1 长期运行能力的构建 208
13.2 瞬时峰值 / 过载的应对能力构建 208
13.3 池的合理设计 210
13.4 消息系统的设计模型和关键点 215
第 14 章 工程实践221
14.1 关于高端机器的系统部署 222
14.2 关于物理机与虚拟化 222
14.3 关于 Java 进程监控223
14.4 关于 class Loader223
14.5 关于负载控制 224
14.6 关于机器设置多个 IP 的原理 225
14.7 关于日志 225
14.8 异常处理的原则 228
14.9 基于限制的系统部署 / 设计 228
14.10 String 的值不能改变的原因229
14.11 系统出现问题时需要收集的信息 229
14.12 Web Failover 集群的方案 229
14.13 关于可靠性设计232
14.14 实现 JVM Shutdown 钩子函数232
14.15 截取输出流233
14.16 将 Linux 进程绑定在特定的 CPU 上运行234
14.17 关于 Java 和 C++ 的互通 234
第 15 章 常见的案例236
15.1 太多打开的文件 237
15.2 java.lang.StackOverflflowError 239
15.3 java.net.SocketException: Broken pipe 240
15.4 HashMap 的 ConcurrentModiftcationException 241
15.5 多线程场合下 HashMap 导致的无限死循环 242
15.6 Web 系统吊死(挂死)的定位思路 245
15.7 基于消息系统(如 SIP)吊死的定位思路 247
15.8 多线程读 / 写 Socket 导致的数据混乱 247
15.9 CPU 使用率过高问题的定位思路248
15.10 系统运行越来越慢的定位思路251
15.11 系统挂死问题的定位思路 252
15.12 关于线程死亡 / 线程跑飞253
15.13 关于虚拟机 core dump255
15.14 系统运行越来越慢问题的定位思路257
15.15 代码 GC 导致的性能低下 257
15.16 连接池耗尽259
15.17 更改系统时间导致的系统无法正常工作260
15.18 瞬间内存泄漏的定位思路261
15.19 第三方系统能力分析262
15.20 系统性能过低264
15.21 未捕获的异常导致数据库锁表,全系统连锁宕机267
15.22 单机内存泄漏导致数据库锁表,全系统连锁宕机268
15.23 AIX 下 CPU 使用率被 100% 占用的定位思路270
15.24 Linux 下提高 UDP 吞吐量270
15.25 TIME_WAIT 状态下连接不能及时释放270
15.26 由 SAN 存储链路问题引起的应用层白屏 272
附录 A JProfiler 内存泄漏的精确定位 275
附录 B SUN JDK 自带故障定位280
附 B.1 SUN JDK 命令行选项280
附 B.2 诊断工具的详细介绍282
附 B.3 内存泄漏问题的定位317
附 B.4 系统崩溃的定位方法327
附 B.5 致命错误日志335
附录 C Solaris 下查找占用指定的端口的进程351
附录 D 如何在 solaris 下分析 I/O 瓶颈352
附录 E AIX 下 32 位进程的最大内存占有情况353
附录 F 关于 TCP/IP354
附录 G Windows 2003/Windows XP 下一个端口多个监听355
附录 G 在 Windows 2003/Windows XP 下一个端口多个监听356
附录 H Suse 9.0 下线程创建的数量和堆内存 / 永久内存的关系357
附录 I JConsole358
附录 J Gcviewer 359
附录 K IBM JDK 下定位引起 core dump 的 JIT 方法360
附录 L 一份简短的 Java 编程规范 361
参考文献363
短评

不错,,,,,,,,,,,,,,,

2020-09-02 18:53:19

质量非常好,物流相当快,不错。

2020-09-03 01:20:42

666666666666666666666

2020-09-01 22:30:03

学习调试技术,内容挺实用

2020-09-01 21:16:39

好厚的一本书!翻了一下,里面的技术详解非常的详尽,包括代码还原,问题拆解,注意事项等,对比了市场上这么多书,这本书正是我想要的一本JAVA调试的书!绝对能学到不少东西,墙裂推荐!

2020-08-26 10:25:13

产品特色