重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
对于大多数运维程序员来说,时时刻刻都需要关注服务器和系统程序可能出现的问题并提前解决。
为巴彦淖尔等地区用户提供了全套网页设计制作服务,及巴彦淖尔网站建设行业解决方案。主营业务为网站建设、成都做网站、巴彦淖尔网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
今天我们就通过案例分析来了解一下,运维程序员如何快速处理线上问题。
任何一旦掉进坑里,明智的做法一定是:跳坑_填坑_避坑,线上故障处理的过程也一样,优先级从高到低,线上故障处理的目标如下:跳坑‘跳坑’——快速恢复线上服务,或者将对线上服务的影响降到低。
线上服务的可用性决定着服务者的客户利益,影响着公司的收益。
一旦线上环境不可用,无法服务用户,给公司/团队带来经济利益损失的同时,更为严重的会给公司/团队带来恶劣的名声。
所以一般公司都会对线上环境提出稳定性和可靠性的要求,这也是团队乃至部门的kpi。
为此,遇到生产故障后的一要务是:恢复生产服务,即使不能完全恢复线上服务,也要想尽办法将对线上服务的影响降到低。
填坑‘填坑’——找到问题原因,根本上解决问题。
在恢复线上服务,尽大限度减掉对用户/公司/团队带来的影响后,我们需要彻查问题,搞清楚故障发生的根本原因,从根本上解决问题。
通常情况下,‘填坑’和‘跳坑’是同步在做的,完成‘填坑’也就意味中‘跳坑’成功,但是也有一些紧急情况下的特别‘跳坑’方法,比如重启服务,或者服务降级/熔断等等,实际并未在当时完成‘填坑’,而是先采取非常规手段‘跳坑’,之后再慢慢‘填坑’。
避坑‘避坑’——举一反三,消灭隐患。
找到了根本原因,解决了问题之后,我们需要举一反三,以此及彼,想想在这个故障排查和处理过程中,那些环节存在弱点?那些流程/规范/制度需要优化?这类问题是否在其他系统或者团队中也存在?通过这样的反思和自我批评,形成一份线上事故报告,不断完善流程,避免再次踩坑,也在团队中交流经验,共同提高。
线上故障处理的思路依据线上故障处理的目标及目标的优先级,线上排障的一目标是恢复线上服务或者降低对线上服务的影响,关键点在于快速二字,在‘跳坑’-‘填坑’之后,再行回溯总结,以便‘避坑’。
因此,可以将线上故障处理的步骤分为:故障发现故障定位故障排除故障回溯其中前三步是‘跳坑’行为,后面一步包含了‘填坑’和‘避坑’。
上述步骤并不是说要从上到下顺序进行,建议在不乱阵脚的情况下,并行去做,因为通常线上故障后会紧急启动故障处理程序,运维、开发、测试、产品各个角色都会参与进来,这时候分工下去,并行去做,不断汇总消息,做出判断,以求快速排障,恢复服务。
这个思路类似于操作系统的fork/join设计思想,目的在于提高效率。
在无法快速找到故障原因的时候,需要果断跳过故障定位环节,直接进行故障排除,比如采用服务降级、服务器扩容等手段,确保对线上服务降到低且可控。
广东北大青鸟建议可以等到线上服务’撑’过去之后,我们再慢慢定位故障原因,根本上解决问题。
第一章 总则第一条 为了建立安全生产事故隐患排查治理长效机制,强化安全生产主体责任,加强事故隐患监督管理,防止和减少事故,保障人民群众生命财产安全,根据安全生产法等法律、行政法规,制定本规定。第二条 生产经营单位安全生产事故隐患排查治理和安全生产监督管理部门、煤矿安全监察机构(以下统称安全监管监察部门)实施监管监察,适用本规定。
有关法律、行政法规对安全生产事故隐患排查治理另有规定的,依照其规定。第三条 本规定所称安全生产事故隐患(以下简称事故隐患),是指生产经营单位违反安全生产法律、法规、规章、标准、规程和安全生产管理制度的规定,或者因其他因素在生产经营活动中存在可能导致事故发生的物的危险状态、人的不安全行为和管理上的缺陷。
事故隐患分为一般事故隐患和重大事故隐患。一般事故隐患,是指危害和整改难度较小,发现后能够立即整改排除的隐患。重大事故隐患,是指危害和整改难度较大,应当全部或者局部停产停业,并经过一定时间整改治理方能排除的隐患,或者因外部因素影响致使生产经营单位自身难以排除的隐患。第四条 生产经营单位应当建立健全事故隐患排查治理制度。
生产经营单位主要负责人对本单位事故隐患排查治理工作全面负责。第五条 各级安全监管监察部门按照职责对所辖区域内生产经营单位排查治理事故隐患工作依法实施综合监督管理;各级人民政府有关部门在各自职责范围内对生产经营单位排查治理事故隐患工作依法实施监督管理。第六条 任何单位和个人发现事故隐患,均有权向安全监管监察部门和有关部门报告。
安全监管监察部门接到事故隐患报告后,应当按照职责分工立即组织核实并予以查处;发现所报告事故隐患应当由其他有关部门处理的,应当立即移送有关部门并记录备查。第二章 生产经营单位的职责第七条 生产经营单位应当依照法律、法规、规章、标准和规程的要求从事生产经营活动。严禁非法从事生产经营活动。第八条 生产经营单位是事故隐患排查、治理和防控的责任主体。
生产经营单位应当建立健全事故隐患排查治理和建档监控等制度,逐级建立并落实从主要负责人到每个从业人员的隐患排查治理和监控责任制。第九条 生产经营单位应当保证事故隐患排查治理所需的资金,建立资金使用专项制度。第十条 生产经营单位应当定期组织安全生产管理人员、工程技术人员和其他相关人员排查本单位的事故隐患。对排查出的事故隐患,应当按照事故隐患的等级进行登记,建立事故隐患信息档案,并按照职责分工实施监控治理。第十一条 生产经营单位应当建立事故隐患报告和举报奖励制度,鼓励、发动职工发现和排除事故隐患,鼓励社会公众举报。对发现、排除和举报事故隐患的有功人员,应当给予物质奖励和表彰。第十二条 生产经营单位将生产经营项目、场所、设备发包、出租的,应当与承包、承租单位签订安全生产管理协议,并在协议中明确各方对事故隐患排查、治理和防控的管理职责。生产经营单位对承包、承租单位的事故隐患排查治理负有统一协调和监督管理的职责。第十三条 安全监管监察部门和有关部门的监督检查人员依法履行事故隐患监督检查职责时,生产经营单位应当积极配合,不得拒绝和阻挠。第十四条 生产经营单位应当每季、每年对本单位事故隐患排查治理情况进行统计分析,并分别于下一季度15日前和下一年1月31日前向安全监管监察部门和有关部门报送书面统计分析表。统计分析表应当由生产经营单位主要负责人签字。
对于重大事故隐患,生产经营单位除依照前款规定报送外,应当及时向安全监管监察部门和有关部门报告。重大事故隐患报告内容应当包括:
(一)隐患的现状及其产生原因;
(二)隐患的危害程度和整改难易程度分析;
(三)隐患的治理方案。第十五条 对于一般事故隐患,由生产经营单位(车间、分厂、区队等)负责人或者有关人员立即组织整改。
对于重大事故隐患,由生产经营单位主要负责人组织制定并实施事故隐患治理方案。重大事故隐患治理方案应当包括以下内容:
(一)治理的目标和任务;
(二)采取的方法和措施;
(三)经费和物资的落实;
(四)负责治理的机构和人员;
(五)治理的时限和要求;
(六)安全措施和应急预案。
Arthas 是Alibaba开源的Java诊断工具。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
Arthas支持jdk6+,多种系统版本,采用命令行交互模式,同时提供丰富的tab自动补全功能,进一步方便我们进行问题的定位和诊断
1.2、快速安装
1.2.1、Linux下按
下载arthas-boot.jar,在使用java -jar方式启动即可。
命令
**注意:**在进行第二条命令之前,先运行一个Java程序在内存之中,否则会报错
2、快速入门
2.1、attach一个进程
目标:
1、执行一个jar包
2、通过arthas来attach来追踪
3、进行常用的命令操作
如果端口号被占用,也可以通过命令换成另一个端口号执行。
总结:
1、启动进程
2、启动arthas-boot.jar,进入启动的进程
3、不但可以通过命令行的方式来操作arthas也可以通过浏览器来访问arthas
2.2、常用命令接触
1、dashboard仪表板
2、通过thread命令来获取到arthas-demo进程的Main Class
3、通过jad来反编译Main Clas
4、wathch具体方法
2.2.1.、dashboard仪表板
在这里插入图片描述
2.2.2、通过thread命令来获取到arthas-demo进程的Main Class
在这里插入图片描述
2.2.3、通过jad反编译Main Class
在这里插入图片描述
2.2.4、watch监视
demo.MathGame primeFactors:
demo.MathGame:包名+类名
primeFactors:方法名
returnObj:返回参数的表达式
2.2.5、退出arthas
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop命令
在这里插入图片描述
2.3、基础命令1
1、help:查看所有帮助信息
2、cat:显示文本文件内容
3、grep:匹配查找,和linux中的grep类似,但只能用于管道命令
在这里插入图片描述
4、pwd:显示当先目录的目录地址
5、cls:清屏
2.4、基础命令2
1、session:查看当前会话信息
在这里插入图片描述
2、reset:重置增强类,将被arthas增强过的类全部还原,arthas服务端关闭时会重置所有增强过的类
在这里插入图片描述
在这里插入图片描述
3、version:输出当前目标Java进程所加载 的Arthas版本号
4、quit:退出当前Arthas客户端,其他Arthas客户端不受影响。
5、stop:关闭Arthas服务端,所有Arthas客户端全部退出。
6、keymap:Arthas快捷键列表及自定义快捷键
7、history:和linux系统作用一样 打印命令历史
3、JVM相关命令
1、dashboard
在这里插入图片描述
2、thread 线程相关:查看当前jvm的线程堆栈的信息
在这里插入图片描述
3、jvm 虚拟机相关
4、sysprop 系统属性相关
5、sysenv:查看当前jvm的环境属性
在这里插入图片描述
6、vmoption:查看、更新vm诊断相关的参数
7、getstatic:方便的查看类的静态属性
语法:getstatic 类名 属性名
8、ognl
在这里插入图片描述
3.1、反编译 jad
比如编译string类
–source-only : 只显示源码
只反编译指定的方法
xx 就是方法名
3.2、内存编译mc
内存编译器,编译.java文件生成.class
在这里插入图片描述
在这里插入图片描述
4、Arthas进阶
4.1、目标
类与类加载器
monitor、watch、trace、stack等核心命令的使用
火焰图的生存
arthas实战案例
4.2、dump
将已加载的字节码文件保存到特定的目录下,logs/arthas/classdump/
在这里插入图片描述
举例:
在这里插入图片描述
4.3、classloader
获取类加载器的信息
作用:
将jvm中所有的classloader的信息统计出来,并可以展示继承树,urls等。
让指定的classloader去getResources,打印出所有查找到的resources的url。
在这里插入图片描述
4.4、monitor
监控指定类中方法的执行情况
作用:
在这里插入图片描述
在这里插入图片描述
4.5、watch(重要)
观察到指定方法的调用情况
作用:
方法执行数据观测,方便观测到指定方法的调用情况
能观察到的范围:返回值、抛出异常、入参。通过编写OGNL表达式进行对应变量的查看
在这里插入图片描述
在这里插入图片描述
只查看第一个参数小于0的情况
在这里插入图片描述
文章知识点与官方知识档案匹配
Java技能树首页概览
89145 人正在系统学习中
打开CSDN,阅读体验更佳
java应用线上诊断神器--Arthas_linyb极客之路的博客
c、保存好/tmp/UserServiceImpl.java之后,使用mc(Memory Compiler)命令来编译,并且通过–classLoaderClass参数指定ClassLoader mc--classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader/tmp/UserServiceImpl.java-d/tmp ...
继续访问
java线上诊断工具,Java线上诊断神器Arthas-1_Skogkatt的博客-CSDN...
Arthas 是Alibaba 开源的一款线上诊断工具,相比Java 自带的jinfo, jmap,jstat 等工具更方便(起码不用记那么多参数),而且利用字节码增强技术,可以很好的对线上的问题进行定位以及解决,不用再为生产或者测试环境无法debug而感到无能为力。...
继续访问
最新发布 Arthas常用命令
arthas指令大全
继续访问
Arthas在线java进程诊断工具 在线调试神器
Arthas在线java进程诊断工具 在线调试神器 tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱。 官网文档: 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在.
继续访问
Java在线诊断利器之Arthas_Java老K的博客
Arthas是阿里在2019年9月份开源的一款java在线诊断工具,能够分析、诊断、定位java应用问题,例如:jvm信息、线程信息、搜索类中的方法、 跟踪代码执行、观测方法的入参和返回参数等等。 Arthas最大的特点是能在不修改代码和不需要重新发布的...
继续访问
java线上诊断神器 --Arthas__小鱼塘的博客_java网络诊断
java线上诊断神器 --Arthas 最近在工作中用到的一个非常很好的线上诊断,分析问题的神器,再次记录一下: 官方文档:简介 | arthas GitHub 地址:GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas...
继续访问
Arthas使用教程(8大分类)
1、基础命令。2、JVM相关。3、类与类加载器。4、option全局选项。5、项目中使用案例。
继续访问
Arthas介绍
这篇文章为大家推荐一个为Java应用程序排查问题的非常好用的工具:Arthas,首先声明一下,这边文章并不是教大家如何使用,它只是一个搬运工,在Arthas的github上已经有非常详细的使用教程了。 Arthas(阿尔萨斯)是阿里巴巴开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas统统可以帮你解决 某个类是从哪个jar包加载的,为什么会报各种类相关的Exc...
继续访问
Arthas - Java线上诊断工具_是良辰的博客
java -jar arthas-boot.jar 启动之后就可以看到一个java程序列表,像我这就是只有一个java程序在跑,就是当前根目录下面的app.jar 选择1,即可对app.jar进行监控诊断。 PS:如果是虚拟机,直接在应用服务器上面执行上面的命令,如果是docke...
继续访问
java线上诊断工具Arthas-实战案例_小姐姐修灯泡吗的博客
首先我就来简单介绍下他的作用:(粘贴官网)Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的...
继续访问
arthas 使用教程
arthas安装使用 首先是安装,说白了其实把他当成一个工具来用就行了,你什么服务需要在线进行性能情况的一个监测和性能的瓶颈排查。第三步启动arthas-boot.jar,启动的时候要注意你需要监测的java是启动的可以用jps-l命令查看你的java服务。第二步把jar包上传到你需要进行java性能监测的服务器上。线上正式环境把他当成一个排查慢问题的工具还是很好用的。以上就是启动服务了下面开始介绍常用的一些排查命令。...
继续访问
Arthas
Arthas.md 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,...
继续访问
Java线上问题诊断工具Arthas_星光Starsray的博客
java -jar arthas-boot.jar //启动 当看到控制台出现arthas的标志,表明启动成功!注意此时已经进入控制台,主要是arthas的命令使用。 [root@xxptweb01 arthas]# java -jar arthas-boot.jar
继续访问
【Java】性能问题诊断利器Arthas --常用命令示例_叹了口丶气的博客-C...
Arthas 是一款阿里开源的 Java 线上诊断工具,功能强大,可以在不修改代码或者重启服务的情况下快速定位线上问题。 官方文档:Arthas官网 二、安装 从官网下载 Arthas 全量包安装(因为快速安装可能因网络原因下载失败),然后用 java -jar 方...
继续访问
Java诊断工具Arthas使用说明
Arthas 是Alibaba开源的Java诊断工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,支持命令行交互模式、 Tab 自动补全功能,方便进行问题的定位和诊断。
继续访问
JVM性能调优篇07-阿里巴巴Arthas工具详解
阿里巴巴Arthas工具详解
继续访问
Arthas 是Alibaba开源的Java诊断工具
Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行...
继续访问
JVM之GC 调优工具 Arthas 实战使用(二)
Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。Arthas 支持 JDK 6以上版本,支持 Linux/Mac/Windows,而且这些环境的命令都一样,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进行问题的定位和诊断 官方文档参考 一、下载和安装 不需要安装,就是一个 jar 包 curl -O
继续访问
Arthas详解
文章目录概述安装快速安装使用`arthas-boot`(官网推荐)使用`as.sh`全量安装把Arthas安装到基础镜像里卸载使用命令详解基础命令helpcatechogrepbase64teepwdclsversionhistorykeymap后台异步命令相关快捷键会话相关quitstopsessionresetjvm相关dashboardthreadjvmsyspropsysenvvmoptionperfcounterloggergetstaticognlmbeanheapdumpvmtoolclass
继续访问
Arthas基础
Arthas:快速入门
继续访问
Arthas入门到精通
Arthas是Alibaba开源的一款Java诊断工具,方便开发者在线排查问题,无需重启,同时可以跟踪Java代码,实时监控JVM状态,目前Arthas仅支持JDK6+,支持Linux/Mac/Windows,采用命令行交互模式,具有 Tab 自动补全功能,便于开发者进行快速定位和诊断问题。 离线全量下载(如果服务器没有外网可以采用这种情况)
继续访问
阿里Java诊断工具 arthas - 介绍及指令大全
一、arthas Arthas` 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到
继续访问
java诊断神器 arthas(阿尔萨斯)
java诊断神器 arthas(阿尔萨斯) 官网地址: 1、快速开始 1.1、windows版本安装 # 命令行输入 curl -0 --output arthas-boot.jar # 启动arthas 注意:启动前已经要有java进程运行,否则无法进入 java -jar arthas-boot.jar --telnet-por
继续访问
帮助定位Java方法优化之arthas端口被占用解决的办法
另起一个端口号 启动arthas命令的后面加上端口号的相关参数 java -jar arthas-boot.jar --telnet-port 端口号 --http-port -1 关闭占用端口的服务 先进入占用端口的服务,然后输入stop将它停掉就可以了 注:请再每一次使用之后使用stop命令退出,这样也省掉一些不必要的麻烦!!! ...
继续访问
Java 诊断工具之 Arthas
Arthas 是 Alibaba 开源的 Java 诊断工具。Ta 可以动态跟踪 Java 代码,实时监控 JVM 状态,可以在不中断程序执行的情况下轻松完成 JVM 相关问题排查工作。支持 JDK 6+,支持 Linux/Mac/Windows。
继续访问
Arthas-java在线调试工具的使用
一、arthas能干什么? 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例? Arthas支持JDK 6+
继续访问
Java线上诊断工具Arthas
概述 Arthas是一个开源的线上诊断工具,可以实时查看线上代码运行情况,详情参考Arthas 命令列表 jad命令(获取已加载类的源码) //主要用来看已经加载了类的源码,一般用于动态加载的class的源码比较方便 [arthas@773]$ jad com/example/jvm/Hello ClassLoader: +-sun.misc.Launcher$AppClassLoader@18b4aac2 +-sun.misc.Launcher$ExtClassLoader@362d9..
继续访问
java 线上诊断命令
java
学习