Java问题定位技术手册


这几天在整理书籍的时候发现了一本古老书籍叫《Java问题定位技术》。


Java问题定位技术手册


这本书我之前看过,主要侧重对Java系统里所出现的一些bug进行拆解,教你如何解读error错误,如何定位问题。虽然这本书比较古老,而且有些JDK也迭代了,但不影响我们学习里面的定位思路。


Java问题定位技术手册


目前已经出版了许多关于Java的书籍,但绝大多数书籍着重于介绍开发方面的主题。甚至同一主题的书籍,在市面上可以找到许多。对于系统地介绍Java问题 定位类的书籍却是少之又少,即使有这方面的内容,往往也是一笔带过。



写过代码的同学都知道,无论是新手还是老手,功能需求都不复杂,也不需要花太多时间,真正棘手的是bug,也就是报错,有时你可能花几天时间都在研究这一个报错,而且是毫无思路和进展。


系统运行遭遇问题(系统停止响应,运行越来越 慢,或者性能低下,甚至系统core dump),如何迅速命中问题的根本原因是颇具挑战性的任务。这类问题的定位技巧是这本书介绍的重点,借助这些技巧可以快速找到这些问题的突破口。 



这本书将Java问题定位的方法体系化,提供一种以黑盒子方式进行问题定位的思路:如何使用线程堆栈进行性能瓶颈分析?如何分析内存泄漏?如何分析系统挂死?在掌握这本书所介绍的方法后,很多情况下无需对系统了解就可以对这类问题进行定位。


Java问题定位技术手册


这本书除了介绍"事后"定位技术以外,同时还介绍了大量的事前预防技术,对一些严重影响稳定性或者可靠性问题相关的陷阱进行了深入分析,它们正是大型系统容易忽略但对系统稳定性和可靠性有巨大影响的暗礁,如果能在系统的设计和编 码阶段就防止埋上这些"地雷",那么就不需要事后补救这种代价极高的维护成本。 


Java问题定位技术手册


举个例子,我们能保证不存在内存泄漏吗?没人会在测试服务器中在完全模拟实际的负载的情况下 对系统进行一个周或者一个月的测试。因此,通过QA并不能保证没有内存泄漏的发生,因此 它很容易就被带入到产品中。


内存泄漏情况大多是与流量相关的,也就是说,流量越大,内存泄漏的速度就越快。这意味着你根本无法预测什么时候要重启程序,问题往往发生在系统最 忙的时候,墨菲法则往往就在这个时候生效。


"产品级别"的另一个方面是系统对所谓"瞬时峰 值"的应对能力,也就是应对系统的短暂性冲击的能力。经过短暂峰值的冲击的系统能否自动 恢复?很多系统经过短暂的峰值冲击,往往不能恢复,这常常是由于异常情况没有很好地进 行"善后处理",导致大量资源泄漏,


比如数据库连接泄露,一旦衰退开始,系统崩溃就只是迟 早的问题了。要想将功能完备软件变为产品级软件,系统要有一套完整的异常处理机制,对异 常进行了合适的"善后处理",避免由于异常导致的资源泄漏等问题。本书对这些具有坏味道的 代码也进行了深入剖析。



本书介绍的定位技术主要有:内存泄漏定位,线程堆栈分析等。内存定位套路比较固定, 但线程堆栈分析需要一定的火候,它需要一定的悟性和长期的修炼。在可靠性和稳定性问题 的定位中,线程堆栈分析是最有力的武器,掌握了这个定位工具,会大大增强自己的"内功"。



Java问题定位技术手册


像《Effective Java》这类规范的书籍更多的是教你如何写好代码,即使你写的代码很完美,也避免不了会出现问题,因为问题不是只出现在代码,可能跟你机器配置、内存分配、业务的增长与变动都有关系。


有些Bug是相对的,今年你写的代码是完美的功能实现,随着系统的迭代,明年你这个代码可能就是隐藏的Bug。


像开发老鸟和新手的区别,更多的是在于对系统所出现问题的定位。很多公司养着大牛,平时可能没干什么活,但当系统出现问题都需要他们出马应对,而且非他们不可。



这份PDF我已经上传到网盘了,大家可以在我公众号后台回复【定位技术】进行获取。




上一篇:搭建开发环境搞的我怀疑人生。。


下一篇:二本机械毕业2年,从外包ETL到大厂数据开发,月薪13K到年薪40W