写个软件来防止服务器网站CPU百分百

    xiaoxiao2022-07-08  212

    问题:

    大概每隔两个星期左右, 秋色园上服务器就会来一次CPU百分百,由于问题发生的概率极低,要它重现也难,所以只能意淫是内存太少的原故。 以前出现,远程上去结束掉进程,就正常了,悲剧的是最近秋色园VPS不知啥原因,经常远程不上去, 最后转转折折只能进VPS管理后台重启。 要遇上CPU百分百,又是需要机缘,所以一旦发生和遇到解决的时间差度大,就会造成服务器长时间打不开,后果大伙都懂的。。。

    解决:

    方法一:设置应用池CPU策略,达到N的时候自动回收进程(不实用,排除)

    因为更新网站dll时,偶尔有顺时达到100%,可能就1-2秒,可能会导致回收到,如果再有偶尔,就会造成死循环了。

    方法二:写个软件放上去,监控cpu如果持续1分钟,直接kill掉进程。(就这么招了。。。)

     

    花了点时间,写了下代码,扔上去了,哟省事了。。。。

     

    新建一个控制台。。。代码如下:

    using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Diagnostics; namespace IISCpuForServer {      class Program     {          static  void Main( string[] args)         {             Console.WriteLine( " 监控IIS CPU w3wp 进程中,若100%,而自动结束该进程... ");             Thread thread =  new Thread( new ThreadStart(Run));             thread.IsBackground =  true;             thread.Start();             Console.Read();         }          static  void Run()         {              try             {                  while ( true)                 {                     Process[] procs = Process.GetProcessesByName( " w3wp ");//读取网站的进程                      if (procs !=  null && procs.Length >  0)                     {                          foreach (Process pro  in procs)                         {                              if (!pro.HasExited)                             {                                 CheckPro(pro);                             }                         }                     }                     Thread.Sleep(TimeSpan.FromMinutes( 5));//5分钟来一次。                 }             }              catch (Exception err)             {                 Console.WriteLine(err.Message);             }         }          static  void CheckPro(Process pro)         {              int s =  0; // 60秒。              int killTimes =  0;              // 间隔时间(毫秒)              int interval =  1000;              // 上次记录的CPU时间             TimeSpan prevCpuTime = TimeSpan.Zero;              while ( true)             {                  // 当前时间                 TimeSpan curTime = pro.TotalProcessorTime;                  // 间隔时间内的CPU运行时间除以逻辑CPU数量                  double value = (curTime - prevCpuTime).TotalMilliseconds / interval / Environment.ProcessorCount *  100;                 prevCpuTime = curTime;                  if (s >  0)                 {                      if (value >  90 && value <  100)//cpu连续超过90% 50秒就杀。                     {                         killTimes++;                          if (killTimes >  50)                         {                             Console.WriteLine(pro.Id +  "  长期高CPU,秒杀... ");                             pro.Kill();                             Thread.Sleep(TimeSpan.FromMinutes( 3));                              return;                         }                     }                      else                     {                         killTimes =  0;                     }                      if (killTimes >  0)//只有cpu超过90%才打印文字                     {                         Console.WriteLine(pro.Id +  "  CPU: " + value +  "  -- killtimes: " + killTimes);                     }                 }                 Thread.Sleep(interval);                  if (s >  59)                 {                     s = - 1;                      break;                 }                  else                 {                     s++;                 }             }         }     } }

    最后插播个流行漫画:

    版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

    http://www.cnblogs.com/cyq1162/archive/2012/12/06/2804932.html

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)