关于问题查询的见解

简介: 维护现有的软件是每个工程师日常工作中不可缺少的工作,也是基本的技能之一。那么当出现故障后,我们该做些啥?怎么去排查问题?正所谓工欲善其事,必先利其器,针对不同的软件环境所需要的工具也不尽相同。在出现故障时怎么才能保持一个清醒的头脑也至关重要,不过这也来源于自信,来源于平时的积累。

概述

维护现有的软件是每个工程师日常工作中不可缺少的工作,也是基本的技能之一。那么当出现故障后,我们该做些啥?怎么去排查问题?正所谓工欲善其事,必先利其器,针对不同的软件环境所需要的工具也不尽相同。在出现故障时怎么才能保持一个清醒的头脑也至关重要,不过这也来源于自信,来源于平时的积累。

从工作到现在,笔者维护了很多系统,从要求5个9的可靠性的网站系统到现在上万台离线的hadoop集群。离线的hadoop集群故障停机也意味着损失,如停机1小时,则损失为(1/24/365/3)10000(台机器)60000(3年的每台机器的费用)=2.28w元,我们应该尽量降低停机的时间。对于在线应用那肯定是不能停机的,如taobao主站,停机1小时,那则是数百万的损失,且客户会流失。

由于阿里主要的应用是java的应用,笔者接触较多的也是java应用,将从java方面出发讲述一些方法及工具。

克服紧张

这是一个非技术的问题。当故障发生时,怎么做到不紧张呢。笔者记得刚毕业的第一年,有一次发布引起线上问题,当时真的非常紧张。目前笔者也没有好的办法,多经历几次也许会好点,当然如果对系统非常熟悉也会好点。这就要求我们多积累。

一般查询问题的思路

基本的一些问题(分类不全):

  • 功能性问题:产生的一般原因是 环境不一致,发布的时候一般就会遇到。如:线上的网络环境,有的master节点配置了vip,部署结构等导致的。查询问题的思路也基本是看是否不一致引起的。
  • 性能类问题:对于有中心节点,来得最直接的方式是提高master的机器能力,通过jstack找到性能瓶颈点。slave节点是否可以增多机器来解决
  • 跟业务数据有关系的问题:在特定场景下发生的,如:有的用户在map中处理每行记录时调用了DNS导致job相当慢,reduce数据发生倾斜。
  • 数据不一致:业务系统中经常碰见,此类经常需要对比不同数据系统的数据。
  • 有一些问题很直白,基本快速可以查询。对于一些很难直白知道原因的,最大招数就是debug。但是线上环境不可能或者不能debug,所以,最好还是在测试和开发环境模拟其线上场景,不断探测直到重现,再查询原因。

保留现场及一些常见工具

由于,我们经常处理的措施是重启系统或者回滚系统,那一般当时出问题的场景也就破坏了。为了保留环境,最好有一些监控的系统,能把大部分的信息保留下来,方便定位问题及重现。一般情况下,一些瞬间的状态需要自己手工执行,例如:

  • 保留日志,很多系统重启后就会冲掉以前的日志。系统中一般会存在很多关键的日志,其中出现ERROR日志尤其注意。 linux的日志在 /var/log/messages中。
  • 一般需要三次jstack,看是否有性能瓶颈点,看堆栈 线程数是否正常。
    对于内存不足,一般会在日志打印相关的内存溢出异常。
 jstat -gc -h5 pid 1000 1000
  • 一般三次sudo netstat –anlp 保留现场
  • dump堆栈用mat分析
 jmap -dump:live,format=b,file=heap.bin pid 
  • 常用的是分析内存溢出,特别地,可以用 OQL语句,查询相关的对象,分析其值。
    如:
OQL:select * FROM "org.mortbay.jetty.Request"
  • tcpdump相关的包:如:dump 来自host为10.148.184.141 本地网卡bond0 的非8031和非8030的端口的包,
sudo tcpdump ip host 10.148.184.141 -i bond0
and ! tcp port 8031 and ! tcp port 8030

版权声明

笔者微博:阿里封神 欢迎转载,但请保留原文地址

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 机器学习/深度学习 数据采集
数据分析师如何处理数据以进行分析?
【4月更文挑战第4天】数据分析师如何处理数据以进行分析?
23 9
|
2月前
|
机器学习/深度学习 数据可视化 算法
python数据分析——在面对各种问题时,因如何做分析的分类汇总
Python数据分析是指使用Python编程语言对数据进行收集、处理、分析和可视化的过程。Python是一种非常流行的编程语言,具有简单易学、代码可读性高、生态系统强大的特点,因此在数据科学领域得到广泛应用。
87 0
|
6月前
|
存储 算法 数据挖掘
数据挖掘2.4——关联规则挖掘 知识点整理
数据挖掘2.4——关联规则挖掘 知识点整理
140 0
|
存储 分布式计算 监控
OushuDB 小课堂丨描述性分析如何利用数据做出更好的决策
OushuDB 小课堂丨描述性分析如何利用数据做出更好的决策
85 0
|
机器学习/深度学习 算法 数据挖掘
|
供应链 算法 数据挖掘
谈谈预后性分析是预测性分析的有益补充
预测分析是企业展望未来的主要应用方式。市场营销、零售、生产、设备管理、供应链管理以及许多其他应用都显示出预测的价值和力量,可以作为预测未来结果的工具。
谈谈预后性分析是预测性分析的有益补充
|
数据可视化 数据挖掘 大数据
和你谈谈数据分析报告
做一份好的数据分析报告,大到成为能否帮助企业做出正确的商业决策,小到成为能否说服老板获取业务资源的关键因素。因此做出一份高质量的数据分析报告是一个职场人必备的利器。
1564 0
和你谈谈数据分析报告
|
数据挖掘 搜索推荐
带你读《广告数据定量分析:如何成为一位厉害的广告优化师》之二:广告数据分析中的统计学原理
这是一部面向初级广告优化师、渠道运营人员的广告数据分析和效果优化的实战指南。数据分析功底的深浅,决定了广告优化师能力水平的高低。这本书一方面告诉读者成为一名厉害的广告优化师需要掌握的数据分析技能,以及如何快速掌握这些技能;一方面又为读者总结了SEM广告、信息流广告、应用商店广告数据的分析方法论和效果优化的方法,以及多广告推广渠道的统筹优化。书中提供大量真实数据案例,助你提升广告数据分析的理论深度和业务水平。
|
SQL 存储 数据库
深入浅出SQL——谨致数据泛滥之世及意图征服数据者
1 数据和表:保存所有东西的地方 数据库是保存表和其他相关SQL结构的容器。数据库内的信息组成了表。数据库由表构成。表是在数据库中包含数据的结构,由列和行组成。把对象属性分类,某一类信息是表中的一列。
5887 0