服务器又溃逃了?看看专业的程序员怎么解决

服务器又溃逃了?看看专业的程序员怎么解决

如何提高服务器并发处理能力

首先让我为人人科普“崩了”是什么样子

 

01系统溃逃

 

系统的溃逃主要发生在:程序未能注意到有器械失足、并继续运行,直到泛起更严重的情形。

 

例如试图“除以零”,进而导致程序被迫中止。

溃逃很可能在泛起诱因后马上发生,或守候很久后才发生。

 

也有可能是错误信息导致的,但这类信息通常是由操作系统或应用程序框架显示,而非由程序代码自己显示。

 

下图是一个典型的溃逃对话框:

服务器又溃逃了?看看专业的<a href=程序员怎么解决" img_height="243" img_width="501" inline="0" src="https://qizs.oss-cn-shenzhen.aliyuncs.com/caiji/2020/6/NjURvu.jpg" class="aligncenter">

 

(应用 Sample.exe 溃逃后 windows 显示的错误信息)

这个错误信息是由 Windows 错误报告组件 WerFault.exe 显示的。

 

为了确认这一点,可以将 Procexp 的十字准星图标拖拽到错误信息上,并查看拥有该窗口的历程。

 

如下图显示了 Procexp 所展示的,故障的 Sample.exe 和 WerFault.exe 之间的关系。

 

本例中,Kernelbase.dll内的默认历程中溃逃处置代码使用 Sample.exe的PID作为一个命令行参数启动了 WerFault.exe(在Windows 8.1 中,溃逃处置代码还可对溃逃的历程建立不能执行的快照)。

服务器又溃逃了?看看专业的程序员怎么解决

 

(溃逃对话框是由 WerFault.exe 历程显示的)

 

02溃逃触发

 

大部门溃逃均由无法处置的历程异常触发若是程序执行过程中遇到反常、不寻常,或非法的、无法由程序直接处置的情形,就会发生异常。

 

随后将抛出有关详细状态以及遇到该状态的上下文信息,并将控制权转交给上一层异常处置程序。

 

异常处置程序可以修复所遇到的状态,并将控制权返回给泛起异常的位置;或马上返回给泛起异常时包罗的区块;或由系统继续搜索能处置异常的处置程序。

 

若是找不到任何处置程序,则无法处置的异常会导致程序退出。

 

03硬件异常和软件异常

 

硬件异常

CPU 检测到当前 CPU 指令违反某个规则而无法完成。

最常见的部门例子包罗:

 

1. 除以零;

2. 在 CPU 未处于特权模式(即 Ring 0) 的情形下执行特权指令;

3. 执行未界说的 Opcode,若是 CPU 的指令指针设置为错误的内存地址就会发生这 种情形;

4. 接见未提交的虚拟内存;

5. 写入只读内存;执行被标记为不能执行(NX)的内存;以及栈溢出。

 

软件异常

与之相对的,若是程序检测到无法由自己直接处置的不寻常或错误状态,则此时会特意抛出软件异常。

 

存储服务器是什么?其特征有哪些?

04界说专用的异常类

 

C++和C#等语言的尺度库界说和使用的类(Class)可以将差别类型异常的种种信息封装在一起,还使得程序员可以为自己的应用程序界说专用的异常类。

例如.NET RegistryKey 类包罗有关 Windows 注册表的接见操作,若是用户无权执行所请求的操作,则将会抛出 SecurityException。

 

程序员有责任领会自己的程序何时会抛出异常,并编写能妥善处置异常的代码,确保自己的程序不会溃逃。

 

若是在抛出异常时,历程附加了 ProcDump 这样的调试器,那么调试器将先于其他所有异常处置程序获得通知。

 

这个通知也叫做第一轮异常(First-chance exception)。由于大部门第一轮异常最终都将由程序来处置,因此通常可忽略此类异常。

 

若是没有异常处置程序可以处置这样的异常,那么调试器会再次收到 第二轮异常(Second-chance exception)的通知,这类异常也叫做未处置的异常(Unhandled exception)。

 

05区别排查

 

第一轮和第二轮异常的区别对排错事情很主要。

 

例如应用程序可能由于开发者未能提供响应的异常处置 代码导致在遇到未处置的异常后溃逃。

 

而附加的调试器可能基本没机遇看到第二轮异常,由于应用程序 构建时所选择的目的平台已经在应用的外围提供了异常处置机制,在异常变为“未处置”状态并传递给 调试器之前就已接手了这个异常。

 

下图 显示了一个.NET 窗体应用由于未处置的异常而显示的溃逃对话框。

 

该应用程序的开发者并未提供异常处置程序,但.NET Framework 库代码提供了,并显示了下图 中 所示的对话框。

与之前的溃逃信息差别,这则错误信息是由泛起异常的历程显示的。

服务器又溃逃了?看看专业的程序员怎么解决

 

(NET Framework捕捉了一个窗体应用中泛起的未处置异常)

可以运行 Procmon 直到错误泛起,住手追踪,筛选掉不相关的事宜,然后在追踪纪录中从后向前查看,找到能代表问题泉源的信息。

 

若是溃逃发生在启动或登录过程中,可能意味着某个自动运行的组件嫌疑最大。

 

此时可以使用 Autoruns 找出可能性最大的组件,并将其暂时或永远禁用;Autoruns 还可以帮我们找出需要更新的组件。

 

ProcDump 在溃逃故障排错中非常有用,该工具可在第一轮或第二轮异常时,以及在被许多其他类型事宜 触发后捕捉用户模式的转储。该工具还可将获取的信息实时发送给 Procmon,这样就可以将异常信息与发 生时的注册表、文件、网络,以及历程事宜连系在一起查看。

有人戏称,天天宅在家,想知道沙雕网友们最爱干的事是啥?

看热搜就知道,爱它就要毁了它,爱谁,谁就崩!

实在不全然,看看钉钉~

服务器又溃逃了?看看专业的程序员怎么解决

 

那么问题来了,钉钉凭什么在一众平台中脱颖而出、屹立不倒?

服务器又溃逃了?看看专业的程序员怎么解决

 

原来,钉钉背后的阿里云提前预防了由于人流过多而造成的崩。

 

假设群众们是磨刀霍霍向平台的服务器杀手,那么程序员们就是药到病除的白衣天使~

衷心感谢列位程序员日以继夜的辛劳码作,让我们在家里也能畅享网络!

 

还想领会更多服务器的使用诀窍吗?这本《Windows Sysinternals实战指南》推荐给人人,本书汇集了微软CTO多年实战经验的总结,周全透彻剖析了Windows系统工具Sysinternals套件的使用方法以及难点、疑点。

 

无论是对宽大Windows系统管理员,照样普通用户,若是掌握了本书中的技巧,就能事半功倍的解决一样平常电脑故障和泛起的种种问题。

nginx一招配置,帮你快速隐藏php后缀名

分享到 :
相关推荐

发表评论

登录... 后才能评论