Java系统程序Bug解决方法论(一) - 教程简介

简介: Java系统程序Bug解决方法论(一) - 教程简介

对于系统地介绍Java问题定位类的教程少之又少,即使有这方面的内容,往往也是一笔带过。本教程系统地介绍Java问题定位技术,我相信有一些很少公开的定位技术,在正确使用时,可以产生令人惊讶的效果。


采用Java开发的大型应用系统越来越大、越来越复杂;很多系统甚至是将很多第三方系统 集成在一起,整个系统看起来像一个黑盒子。系统运行遭遇问题(系统停止响应,运行越来越 慢,或者性能低下,甚至系统core dump),如何迅速命中问题的根本原因是颇具挑战性的任务。 这类问题的定位技巧是本文介绍的重点,借助这些技巧可以快速找到这些问题的突破口。


功能性的问题定位往往有很清晰的套路(如单步跟踪等),对此不做介绍。着重介绍稳定性和可靠性方面的问题定位技术,特别是那些在实验室难以发现的深层次的问 题。将Java问题定位的方法体系化,提供一种以黑盒子方式进行问题定位的思路:如何使 用线程堆栈进行性能瓶颈分析?如何分析内存泄漏?如何分析系统挂死?在掌握所介绍的方法后,很多情况下无需对系统了解就可以对这类问题进行定位。


对于可靠性和稳定性等非功能需求很多时候难以验证,我们不可能写出"万能的"测试用

例来发现系统所有的可靠性和稳定性问题,所以非功能特性缺陷带来的灾难和难以验证的特 点需要我们采取一切可能的办法进行提前预防,将非功能性需求表现在代码中,是一个优秀 程序工程师的功底的一个体现。因此除了介绍"事后"定位技术以外,同时还介绍了大量 的事前预防技术,对一些严重影响稳定性或者可靠性问题相关的陷阱进行了深入分析,它们正 是大型系统容易忽略但对系统稳定性和可靠性有巨大影响的暗礁,如果能在系统的设计和编 码阶段就防止埋上这些"地雷",那么就不需要事后补救这种代价极高的维护成本。


旨在让软件能表现出"工业强度",即一个"产品级别"的软件,“产品级别"与"功能完 备"是完全不同的两个概念。验收测试的通过与系统能否承受实际应用中的压力完全是两回 事。经过验收测试的系统有可能在真实的环境下表现得一塌糊涂,也有可能非常地棒。举个例 子,我们能保证不存在内存泄漏吗?没人会在测试服务器中在完全模拟实际的负载的情况下 对系统进行一个周或者一个月的测试。因此,通过QA并不能保证没有内存泄漏的发生,因此 它很容易就被带入到产品中。内存泄漏情况大多是与流量相关的,也就是说,流量越大,内存 泄漏的速度就越快。这意味着你根本无法预测什么时候要重启程序,问题往往发生在系统最 忙的时候,墨菲法则往往就在这个时候生效。“产品级别"的另一个方面是系统对所谓"瞬时峰 值"的应对能力,也就是应对系统的短暂性冲击的能力。经过短暂峰值的冲击的系统能否自动 恢复?很多系统经过短暂的峰值冲击,往往不能恢复,这常常是由于异常情况没有很好地进 行"善后处理”,导致大量资源泄漏,比如数据库连接泄露,一旦衰退开始,系统崩溃就只是迟 早的问题了。要想将功能完备软件变为产品级软件,系统要有一套完整的异常处理机制,对异 常进行了合适的"善后处理”,避免由于异常导致的资源泄漏等问题。对这些具有坏味道的代码也进行了深入剖析


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


本教程适宜人群

  • 开发的应用属于7*24的应用,并要求99.999%(俗称5个9)的高稳定性高可靠性
  • 开发的应用属于大型应用,每个人只熟悉系统的一小部分


对下面一些问题模糊不清的开发人员


  • 将不用的对象设为null,就可以避免内存泄漏
  • 由于JVM自动进行内存管理,因此java中不会有内存泄漏
  • unix/linux下使用top观察到内存上升,可以断定程序存在内存泄漏
  • 线程不安全的HashMap并发读是不会出现问题的. – 字符集和字符编码的关系
  • “系统挂死”、"宕机"感觉比较抽象
  • 负责对系统进行优化维护的开发人员
  • 致力于开发大型可靠系统的开发人员
目录
相关文章
|
2月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
321 8
|
2月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
264 24
|
2月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
182 11
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
234 10
|
2月前
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
357 0
|
2月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
494 4
|
2月前
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
339 98
|
2月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
380 0
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
200 1