热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

可定位性设计

码农们记忆最深刻的时刻非联调莫属了,在一个大型软件项目中,大量的特性的合入往往伴随着问题的大爆发,在蜂拥而至的虫族(bug)面前,定位手段就是码农们手中赖以战斗的武器!良好的定位手段能快速找出隐藏的b

码农们记忆最深刻的时刻非联调莫属了,在一个大型软件项目中,大量的特性的合入往往伴随着问题的大爆发,在蜂拥而至的虫族(bug)面前,定位手段就是码农们手中赖以战斗的武器!良好的定位手段能快速找出隐藏的bug,为快速消灭bug争取宝贵的时间。


在交付的压力面前,码农们往往没有足够的时间来进行定位手段的添加,没有定位手段保护的模块,在疯狂的虫群面前就像待宰的羔羊。

问题定位慢,就需要更多人力和时间的投入,没有精力进行剩余特性的开发和模块的持续优化,更糟糕的情况下,如果没有足够的信息支持问题定位,就需要进行依赖问题的复现,而很多问题恰恰又难以复现,就只有在发布前夕组织通宵达旦的攻关,伤神又伤身。

虫群的几轮冲击下来,码农们四处救火、疲惫不堪,模块质量更加恶化,陷入了恶性循环中。


作为一名有追求的码农,我们的精力应该投入到更有创造性的活动上,不应该在问题定位上耗费大好青春,更早的开展可定位性设计,就可以在联调阶段节省大量的问题定位时间,为解决问题、优化代码和追求美眉留下宝贵的时间,引导开发过程进入良性循环,此即磨刀不误砍柴工是也。


开展可定位性设计,首先我们要知道系统中存在哪些故障,建立起我们的故障模式库,才能有针对性的对症下药。

以作者从事的Linux内核开发为例,归纳起来,系统的故障大致分为以下几类:

1,崩溃

往往由空指针引用、错误的内存地址引用等问题引起,内核态中往往会导致系统复位,用户态对应就是进程的异常终止。

系统复位后,内存中的信息往往会被冲乱,此类问题一般依靠调试日志和复位时的堆栈/寄存器信息来进行定位,我们需要在关键事件和异常分支中增加调试打印,以在出现问题后推测出系统当时的状态。

有一种方法值得尝试,复位时内存是不会断电的,因此内存中的内容在复位前后是不变的,在嵌入式系统中,我们可以令业务的数据存放在内存的高位,OS加载时一般不会使用到高位的内存,可以最大限度的保存复位前的信息,辅助问题的定位。

2,挂死

密集出现于资源死锁、流程互斥错误、时序控制错误等问题,系统挂死后将无法处理业务请求,是最致命的错误之一。

系统挂死的时候是静态的,在这个过程中我们可以自由的查看内存中的内容,因此定位起来相对较为简单,我们需要建立起数据结构之间的关联,并最终挂到一个全局变量上,这样我们就能够通过定位手段一步步找到可疑的数据进行察看。

一个简单的计数可以有效帮助快速定位到可疑的模块,模块的输入输出的计数不匹配时,流程很可能被挂起在其中。

3,错误

错误的产生原因多种多样,一部分是对输入的边界值处理不当、场景遗漏、大压力导致的,通常异常处理流程又是平常难以覆盖到的分支,这可能导致错误被层层扩散到整个系统中。

调试日志、计数都可以有效的帮助定位错误,通过对模块的输入输出结果做计数,我们可以追踪到错误产生的源头,调试日志则可以显示出错误是如何产生的。

4,性能

性能问题的特征是严重依赖于问题环境的保留,一旦过了性能差的时间段,就很难找到性能瓶颈了。

定位性能问题,我们需要在关键路径上添加性能统计,最有价值的信息是最近时间段内的统计信息,以及响应最慢的数个请求,我们可以以60s为周期进行统计,出现性能问题时,我们将最近60s的统计信息显示出来,基本上就可以初步定位到瓶颈的所在,再针对性的做检测。

5,数据不一致

最阴暗的问题,常常造成灾难性的后果。交给其他模块的数据,悄无声息的就变了,实在是让人头痛不已,而且你无法知道数据是在什么时候发生改动的,事实上,你甚至可能永远也不知道发生数据不一致了,就像你不知道钱包中钞票的序号一样,如果你不记得写下去的数据是什么,又如何知道读起来的数据不对呢?



未完待续。


故障检测

现场保存

现场查看

流程追踪


推荐阅读
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 使用SQL命令创建数据库及其语句解析
    使用 `CREATE DATABASE` 命令可以创建一个新的数据库,并指定其名称。该 SQL 语句用于初始化数据库结构,执行后将生成一个新的数据库实例,用于存储相关的数据对象和表。在本例中,通过执行 `CREATE DATABASE 课程管理1`,系统将创建一个名为“课程管理1”的数据库,以便后续的数据管理和操作。 ... [详细]
  • 《Spring in Action 第4版:全面解析与实战指南》
    《Spring in Action 第4版:全面解析与实战指南》不仅详细介绍了Spring框架的核心优势,如简洁易测试、低耦合特性,还深入探讨了其轻量级和最小侵入性的设计原则。书中强调了声明式编程的优势,并通过基于约定的方法简化开发流程。此外,Spring的模板机制有效减少了重复代码,而依赖注入功能则由容器自动管理,确保了应用的灵活性和可维护性。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 老杨谈IT运维 | 快速实现日志异常检测与根源分析
    在智能运维领域,指标和日志是最常用的数据来源,能够有效反映系统的运行状况和健康状态。通过对这些数据的深入分析,可以为监控和告警系统提供关键信息,帮助快速实现日志异常检测与根源分析,提升整体运维效率。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在CentOS系统中部署与配置ZooKeeper详解 ... [详细]
  • 在数据库开发中,`DROP`、`TRUNCATE` 和 `DELETE` 语句各有其特定的应用场景和行为特点。`DELETE` 语句通过逐行删除数据,并将每个删除操作记录为事务,适用于需要保留事务日志和触发器的场景。相比之下,`TRUNCATE` 语句则会快速清空整个表,不记录单个删除操作,因此执行速度更快,但无法恢复已删除的数据。而 `DROP` 语句不仅删除表中的所有数据,还会删除表结构本身,通常用于不再需要表结构的情况。了解这些区别有助于开发者在实际应用中选择合适的操作方式。 ... [详细]
  • 双因子安全机制与WiFi万能钥匙的较量:解析其背后的对抗策略
    几乎所有智能手机用户都熟悉类似“WiFi万能钥匙”的应用程序。这款应用凭借庞大的下载量,不仅在各大应用商店中占据显著位置,还长期稳居下载排行榜前列。然而,随着双因子认证等高级安全机制的普及,这类应用面临着前所未有的挑战。本文将深入探讨双因子安全机制与WiFi万能钥匙之间的对抗策略,分析其背后的技术原理和安全风险。 ... [详细]
  • 如何正确配置Log4j以优化日志记录效果? ... [详细]
author-avatar
哥斯拉2502919771
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有