服务器内存太小,伤不起![异常与应用程序池引发的连锁命案]

简介:

最近都在写 秋色园技术原理解析 文章,今天就写一篇散文,简述一下服务器内存太小引发的命案。

 

以前写文都排版,这篇就当散文了...写完就这样了,当然加黑加红还是给加了。

 

首先,我先上2张秋色园服务器当前进程及内存的图片:

 

1:进程

 

2:物理内存剩余

 

看完这两张图片,啥感觉?内存穷紧张!!!!

 

穷紧张不打紧,打紧的是比紧张还紧张的情况发生了,什么情况?

 

出事故了,应用程序池要产生回收动作了!!!!

 

先看一下应用程序池什么情况会产生回收动作?

 

复制代码
1 :IIS应用程序池里的“回收”里的配置就不说了,这些是你自己定义的。

2 :你手动执行“回收”,以重启应用程序池。

3 :你升级dll到服务器中,新升的升级会引发应用程序池重启。

4 :web应用程序产生“错误”,进程终止,引发应用程序池重启。

5 :临时想不出来......
复制代码

 

 

出事了,出事了,出啥事了?

 

还不是内存穷紧张那点破事,为了演示一下什么事,我决定回收一下应用程序池给大伙截图!!!

 

这里本机示例回收了,大伙知道咋回事就可以了,哈哈:

 

看到了吧,两个进程,这是什么情况?

IIS启用了新的进程来接收新的请求,同时旧的进程请求会保留继续处理之前的请求队列,直到处理完所有之前的请求才结束。

大体就是这么一回事了,问题就产生在这一瞬间:

本来就没内存了,旧的进程不回收,新的进程又出来,一出来就喊着要内存,可是系统又给不了内存,于是就卡在那里,还造成CPU百分百的情况。

就在这个小间间,网站访问就卡住了,打不开了,给人一种速度超慢的感觉。

 

什么时候你感觉打开了,估计就是旧的进程光荣退休了。

 

好了,升级时候的情况并不多,应用程序池也设置了半夜才回收一次,理论上回收也不多,这种小瞬间产生的机率并不多。

 

可是网站不稳定的情况才出现的挺频繁,似乎超出我设置的时候和升级的频率。

 

就在这些天,我发现我基础有点差:

web应用程序产生“错误”,进程终止,引发应用程序池重启。

以前都没怎么注意,现在发现了,代码写的不好,异常不处理好,应用程序池就会经常性重启,也是引发你网站慢的一个原因。

 

给大伙截一张图:

 

大伙到自己服务器上看这事件,如果看到一堆错误及警告,说明你和我一样基础差。

 

这些日志是怎么产生的?

 

其实就是系统未被捕获的异常的,然后最终一路过五关,最后就跑这来了,跑到这来,基本上你的应用程序池就变的很不稳定的说。

 

下面就随意扯扯异常这事情

首先一点就是:

在.NET 2.0中,主线程或线程的错误,都会导致进程的中止,引发应用程序池回收。

1.1版本的时候,线程的错误是不会引发主进程中止的。

 

PS:还记得我上篇文章“秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)”说到的内置线程吧,

其实隐藏说的就是这问题,线程的访问冲突,经常性的引发了主进程中止,导致应用程序池重启。

 

再说一点的就:

先把日志上的警告和异常给处理了。

 

最后一点的就是:

全局捕获未处理的异常,然后作掉它, 不让它跑到这来危害应用程序池重启 。[补充:作掉它并不能避免应用程序池重启]

 

基础不好,很多天了,才偶然发现这么点代码:

一:AppDomain.CurrentDomain.UnhandledException 事件

复制代码
         public  Window1() {
            InitializeComponent();
            AppDomain.CurrentDomain.UnhandledException 
+=   new  UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        }

        
void  CurrentDomain_UnhandledException( object  sender, UnhandledExceptionEventArgs e)
        {
            
throw   new  NotImplementedException();
        }
复制代码

PS:在web中发现这家伙似乎不起作用,没深入纠结它,而且它阻止不了异常往上报,只能是收集信息用。

 

二:HttpApplication.Error事件

复制代码
         public   void  Init(HttpApplication context)
        {
            context.BeginRequest 
+=   new  EventHandler(context_BeginRequest);
            context.Error 
+=   new  EventHandler(context_Error);
        }

        
void  context_Error( object  sender, EventArgs e)
        {
            HttpApplication app 
=  (HttpApplication)sender;
            Log.WriteLogToTxt(app.Server.GetLastError());
            app.Server.ClearError();//把错误消灭了,不让它往上抛
        }
复制代码

 

这里其实要说的就是app.Server.ClearError(),为了发现这一行代码,我纠结了好多个小时,最后很偶然才发现它,[虽然发现了它,但是作用似乎不大]。

 

补充:

在楼下网友:长河落魄 的疑问声中,我测试了一下,得到以下结果:

1:主线程中产生的“错误”,只要不是致命的,系统日志中仅是“警告”级别,它不会引发应用程序重启。

2:内置线程中产生的“错误”,系统中产生的“错误”级别,它会中止进程,而且,上面的全局语句并不能捕获到异常。

 

当然,这里还有几个疑惑:

1:应用程序池是不是只遇到“错误”级别的,才会引发终止,重启?

2:主线程中一般的错误都是“警告”级别,那有没有可能会产生“错误”级别的错误呢?如果产生了,是不是一样可拦截?这上面的清除异常的代码,是不是就有效了?

3:多线程中的异常,没有全局捕获的事件了?如果有,你在哪呢?

 

 

好了,现在基本上错误都被记录,一步一步对着日志一个一个消灭了,现在基本上应用程序池很稳定不乱重启了,安稳了许多。

 

其实总结还是一句:内存太小,伤不起啊!

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2011/07/20/2111628.html

相关文章
|
12天前
|
开发框架 人工智能 Java
破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代
本文详细介绍了阿里云应用服务器如何助力传统J2EE应用实现智能化升级。文章分为三部分:第一部分阐述了传统J2EE应用在智能化转型中的痛点,如协议鸿沟、资源冲突和观测失明;第二部分展示了阿里云应用服务器的解决方案,包括兼容传统EJB容器与微服务架构、支持大模型即插即用及全景可观测性;第三部分则通过具体步骤说明如何基于EDAS开启J2EE应用的智能化进程,确保十年代码无需重写,轻松实现智能化跃迁。
|
20天前
|
存储 缓存 编解码
阿里云服务器实例规格怎么选?经济型、通用算力型、计算型、通用型、内存型场景化选购指南
阿里云服务器的实例规格有经济型、通用型、计算型、内存型、通用算力型、大数据型、本地SSD型、高主频型、突发型、共享型等不同种类的实例规格,以满足不同用户和业务场景的需求。对于初次接触阿里云服务器的用户来说,如何选择合适的实例规格成为了一个重要的问题。本文将为大家解析阿里云的经济型、通用算力型、计算型、通用型和内存型实例规格的主要性能和适用场景情况,帮助用户根据实际需求选择合适的云服务器实例。
145 10
|
2月前
|
存储 分布式计算 监控
阿里云服务器实例经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i详解与选择策略
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出更加精准的选择。
|
1月前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
155 28
|
21天前
|
开发框架 人工智能 Cloud Native
破茧成蝶:阿里云应用服务器让传统J2EE应用无缝升级AI原生时代
一场跨越20年的技术对话:在杭州某科技园的会议室里,一场特殊的代码评审正在进行。屏幕上同时展示着2005年基于WebLogic开发的供应链系统和2025年接入DeepSeek大模型的智能调度方案——令人惊叹的是,二者的核心业务代码竟保持着惊人的一致性。"我们保住了20年积累的238个核心业务对象,就像修复传世名画时保留了每一笔历史痕迹。"企业CTO的感慨,揭开了阿里云应用服务器助力传统系统智能化转型的奥秘。
58 13
|
2月前
|
弹性计算 Ubuntu 网络安全
ECS磁盘使用率异常升高,BPS,IOPS飙升
我刚开了一个2C4G的ECS,运行Ubuntu 20.04,常出现无响应、SSH断开等问题。原因是未配置swap,导致内存过高时磁盘写入频繁。解决办法在文章里。
217 72
|
2月前
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
133 29
|
1月前
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型2核16G、4核32G和8核64G配置实例、费用和性能参数表
本文整理了2025年阿里云服务器租赁价格表,涵盖2核16G、4核32G和8核64G配置收费标准。CPU内存比为1:8,提供多种实例规格如ECS内存型r8i、通用算力型u1等。价格由CPU内存、公网带宽及系统盘组成,支持优惠折扣(年付6.7折起)。文中详细列出各配置参考价格、公网带宽与系统盘收费,并对比不同实例规格性能,如Intel Xeon和AMD EPYC处理器系列,帮助用户选择高性价比方案。具体价格以阿里云官网为准。
139 4
|
2月前
|
弹性计算 Linux 云计算
阿里云操作系统控制台——ECS操作及云计算应用实践
本文详细介绍了云服务器ECS的使用流程,包括开通服务、系统配置、权限管理、组件安装及内存全景诊断等关键步骤。通过开通阿里云操作系统服务、授予RAM用户权限和安装必要组件,可实现对服务器的有效管理与维护。在内存诊断部分,展示了如何发起诊断并解析结果,帮助精准定位内存问题。此外,文章还讲解了利用ECS训练模型的操作方法,从上传文件到终端命令执行,直至完成模型训练。最后总结指出,掌握这些技能不仅提升了对云服务器架构的理解,还为实际业务提供了高效解决方案,展现了ECS在数据处理与分析中的重要价值。
181 8
阿里云操作系统控制台——ECS操作及云计算应用实践
|
2月前
|
存储 弹性计算 安全
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。

热门文章

最新文章