udp 接收网络日志,导致服务器内存溢出,求解决!!!!!

问题描述

问题说明本人做了一个项目,是对网络日志接收封装上传的一个脚本程序,原来一直运行稳定,近日为了提高网络安全,将系统由win2003平台切换到win2008上。原先一切正常,在win2003接收网络日志时,平均每秒3万条网络日志进行处理,均无任何问题,网络日志的传输方式是udp方式。现已排除,程序无问题,网线无问题,硬件配置无问题,只是在原有的win2003转换为win2008,就出现了,每秒2千条数据都接收不到,直接内存溢出,瘫痪了,整个系统都会很卡。针对win2008的相关设置,也调整了很多,现在情况已经锁定只要实例化udp就直接系统内存溢出,不用进行任何读写操作。(client=newUdpClient(port);)我用的是vs2010.netframework4.0的运行环境。日志内容大致样式<188>2015-08-1211:31:48CCFW01BHW%%01SECLOG/4/SESSION_TEARDOWN(l):IPVer=4,Protocol=udp,SourceIP=10.191.171.73,DestinationIP=112.11.68.40,SourcePort=5041,DestinationPort=8586,SourceNatIP=111.26.30.38,SourceNatPort=9286,BeginTime=1439378976,EndTime=1439379109,SendPkts=12,SendBytes=1728,RcvPkts=8,RcvBytes=841,SourceVpnID=0,DestinationVpnID=0.求遇到过类似问题的朋友帮忙看一下,十分感谢

解决方案

解决方案二:
怎么看出来内存溢出的?
解决方案三:
服务器整体都会无响应了,但等个十秒还是秒操作还会有响应,内存已经顶都95以上了,32核服务器的,之前读三万条也就在40左右的内存消耗
解决方案四:
准确说是任务管理器中,udp实例化后,几秒后,CPU性能监控就封顶了,然后任务管理器也会无响应,因为我是线程编写的,所以程序还会正常运行,但是每秒也就读取一千多条了。
解决方案五:
防火墙关了吗
解决方案六:
防火墙分入站规则和出站规则如果你没有把端口添加进出站规则,那么你用udp打开某个端口之后,就会被禁止,然后几秒中之后才进入catch而你每秒有30000多条数据要处理,每条数据动态开个线程用udp发送的话,那么相当于内存里阻塞了几万个udp对象,当然就溢出了
解决方案七:
是这样,程序原先都是正常使用的,我只实例化了一次udp,在线程中就是一直读网络日志,没有重复实例化的,现在是我进行调试,只要实例化了udp,我断点就不动了,但是等几秒服务器就硬了,说明是我实例化udp后,内存空间就堆死了
解决方案八:
防火墙关了,要不是接不到数据的
解决方案九:
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Threading;usingSystem.IO;usingSystem.Text.RegularExpressions;//程序中使用到线程namespaceZBRSA{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();this.UINotifaction+=newEventHandleUINotifaction(Main_UINotifaction);}privateUdpClientclient;//创建UDP网络服务privateintport;//端口号privateIPEndPointreceivePoint;privatestringip;privatedelegatevoidEventHandleUINotifaction(stringnum,stringneirong);privateeventEventHandleUINotifactionUINotifaction;privatevoidMain_UINotifaction(stringnum,stringneirong){textBox1.Text=num;}intxianchengshuliang;stringxitongshezhi;stringdatmingcheng;privatevoidForm1_Load(objectsender,EventArgse){FileStreamfs;StreamReadersr;fs=newFileStream(Application.StartupPath+"\Systemsettings.txt",FileMode.Open,FileAccess.Read);sr=newStreamReader(fs,Encoding.GetEncoding("UTF-8"));xitongshezhi=sr.ReadToEnd();xianchengshuliang=Convert.ToInt32(xitongshezhi.Split(';')[0].Split(':')[1]);textBox2.Text=xitongshezhi.Split(';')[3].Split(':')[1];ip=xitongshezhi.Split(';')[1].Split(':')[1];port=Convert.ToInt32(xitongshezhi.Split(';')[2].Split(':')[1]);datmingcheng=xitongshezhi.Split(';')[4].Split(':')[1];sr.Close();sr.Dispose();fs.Dispose();button1_Click(sender,e);}privatevoidbutton1_Click(objectsender,EventArgse){if(checkBox1.Checked==false&&checkBox2.Checked==false){MessageBox.Show("Sorry,youmustselectareceptionformat");return;}shifoucsv=checkBox1.Checked?true:false;shifoudat=checkBox2.Checked?true:false;//stringa=listBox1.Items[1].ToString();timer1.Interval=Convert.ToInt32(textBox2.Text)*1000;timer1.Start();label4.Text="Go";receivePoint=newIPEndPoint(IPAddress.Parse(ip),port);thread=newThread(newThreadStart(threadProc));thread.Priority=ThreadPriority.Highest;thread.Start();}boolshifoucsv=false;boolshifoudat=false;Threadthread;intshuliang=0;boolcontinueLoop=true;boolxianshi=false;FileStreamMuBan_FW;StreamWriterMuBan_SW;FileStreamMuBan_FW2;StreamWriterMuBan_SW2;intshuliangnum=0;privatevoidthreadProc(){continueLoop=true;client=newUdpClient(port);//IPAddressHostIP;byte[]recData;//byte[]sendData;shuliang=0;//stringsendString="";stringa="";System.Text.ASCIIEncodingencode=newSystem.Text.ASCIIEncoding();string[]num;object[]obj={shuliang.ToString(),""};this.Invoke(this.UINotifaction,obj);MuBan_FW2=newFileStream(Application.StartupPath+"\Thread"+(shuliangnum%xianchengshuliang).ToString()+"\FWLOG_"+datmingcheng+"_"+DateTime.Now.AddHours(8).ToString("yyyyMMddHHmmss")+"_0000.csv",FileMode.Create);MuBan_SW2=newStreamWriter(MuBan_FW2,Encoding.GetEncoding("UTF-8"));shuliangnum++;while(continueLoop){a="";try{recData=client.Receive(refreceivePoint);a=encode.GetString(recData);if(a!=""){shuliang++;MuBan_SW2.WriteLine(a);num=a.Split(',');if(xianshi){shuliang++;obj=newstring[]{shuliang.ToString(),a};this.Invoke(this.UINotifaction,obj);xianshi=false;shuliang=0;MuBan_SW2.Close();MuBan_FW2.Close();MuBan_FW2=newFileStream(Application.StartupPath+"\Thread"+(shuliangnum%xianchengshuliang).ToString()+"\FWLOG_"+datmingcheng+"_"+DateTime.Now.AddHours(8).ToString("yyyyMMddHHmmss")+"_0000.csv",FileMode.Create);//指定抒写格式MuBan_SW2=newStreamWriter(MuBan_FW2,Encoding.GetEncoding("UTF-8"));shuliangnum++;}}}catch{}}obj=newstring[]{shuliang.ToString(),a};this.Invoke(this.UINotifaction,obj);MuBan_SW2.Close();MuBan_FW2.Close();client.Close();thread.Abort();}privatevoidbutton2_Click(objectsender,EventArgse){label4.Text="Stop";continueLoop=false;}privatevoidtimer1_Tick(objectsender,EventArgse){//continueLoop=false;xianshi=true;}privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){thread.Abort();Application.Exit();}}}
解决方案十:
WInForm??你改用控制台运行试试
解决方案十一:
引用6楼oZiBing的回复:

是这样,程序原先都是正常使用的,我只实例化了一次udp,在线程中就是一直读网络日志,没有重复实例化的,现在是我进行调试,只要实例化了udp,我断点就不动了,但是等几秒服务器就硬了,说明是我实例化udp后,内存空间就堆死了

个人建议1.先把streamwriter的相关操作屏蔽,也就是只接收,不存储,运行看看服务器是不是会死掉;2.程序中的try。。。catch,为何catch中是空的?也可能就是因为循环中的异常导致的问题在catch中加上文件日志3.调试高频通讯类的软件,不要使用断点,而多用文件日志
解决方案十二:
是的,我在实际调试时候已经把文件写入都注视了,catch是因为报错就读取下一条网络日志,这个脚本是需要二十四小时运行的,现在没有报错,现在是只要代码启用后,udp实例化后,直接cpu就堆死了,直接cpu就顶到了百分百,我哪怕不在做任何操作,只要udp的实例化不关闭,服务器的CPU就会一直堆死的,很卡
解决方案十三:
是winform,我改控制台?然后我注意看什么,麻烦说细一点,谢谢了
解决方案十四:
引用11楼oZiBing的回复:

是的,我在实际调试时候已经把文件写入都注视了,catch是因为报错就读取下一条网络日志,这个脚本是需要二十四小时运行的,现在没有报错,现在是只要代码启用后,udp实例化后,直接cpu就堆死了,直接cpu就顶到了百分百,我哪怕不在做任何操作,只要udp的实例化不关闭,服务器的CPU就会一直堆死的,很卡

在catch中添加日志信息才能判定有没有异常吧既然是调试,可以先把try。。。catch去掉,让异常暴露出来个人建议不要轻易怀疑udpclient,重点放在其他处理流程上
解决方案十五:
是这样,你说的这种调试过程,我肯定都处理过了,出现异常就是直接跳转到catch中的,哪怕我不捕捉,我现在就是把异常处理拿掉,程序也是正常跑,现在程序不是不好使,是性能上不去,我用win2003接收网络日志,每秒是三万,现在每秒2000都接不到,而且CPU还会堆死,就是这样所以我在针对代码,一句一等,看CPU状况,这样才试出来,是在udp初始化后,服务器的CPU就堆死了,程序没变,在win2003上,脚本都跑一年多了,换2008性能就上不去了
解决方案:
不知是否有帮助:UDP负载很重的基于WindowsServer2008R2服务器时发生CPU使用率过高https://support.microsoft.com/zh-cn/kb/2685007
解决方案:
引用15楼akuma8848的回复:

不知是否有帮助:UDP负载很重的基于WindowsServer2008R2服务器时发生CPU使用率过高https://support.microsoft.com/zh-cn/kb/2685007

谢谢你的方法,我看和我的症状是一样的,但是我一直下载不下来这个补丁包。。麻烦朋友您,告诉我一下,我进行下测试,谢谢了。
解决方案:
填写邮件地址后,发送到邮箱有个链接http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix401711/7600/free/447595_intl_x64_zip.exe

时间: 2024-10-31 23:23:23

udp 接收网络日志,导致服务器内存溢出,求解决!!!!!的相关文章

模板-求ireprot导致系统挂掉服务器内存溢出求高手指点

问题描述 求ireprot导致系统挂掉服务器内存溢出求高手指点 我用的ireport 制作的pdf模板最近在系统中时不时出现因为某个jasper文件导致系统挂掉,服务器内存被调用这个文件的一个进程占用完了但是再次在系统中打印预览这个文件又正常了.不存在数据量大的问题,求各位高手指点下可能是什么原因导致的!!

关闭IBM HTTP Server插件自动生成服务,以避免部署大量应用时导致Dmgr内存溢出

IBM HTTP Server插件文件plugin-cfg.xml自动生成机制在WAS的Dmgr里默认是启用的,为了避免在部署大量应用的场景中,因配置的变动而触发插件文件的自动再次生成,进而导致Dmgr内存溢出.解决方法除了直接加大Dmgr自身的JVM堆大小之外,也可以禁用掉插件自动生成机制,操作步骤如下: 1.控制台 ==>> 服务器 ==>> 服务器类型 ==>> Web服务器 ==>> 点击右边具体的<Web服务器名称> ==>>

outofmemoryexception-VS2013 coded ui test 编码的UI测试 导致程序内存溢出

问题描述 VS2013 coded ui test 编码的UI测试 导致程序内存溢出 我在使用VS coded ui test对一个Winform的程序做自动化测试的时候,每次都在最后抛出OutOfMemoryException的异常,不知道怎么解决. 大家能不能帮忙解决下? 有没有什么方法控制或者监测内存使用情况啊?

jquery不会自动回收xmlHttpRequest对象 导致了内存溢出_jquery

之前一直都不曾注意到这一点,今天幸亏看了kuibono的文章,下面是kuibono给出的手动回收xmlHttpRequest对象的代码片断: 每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接的请求是一个无限递归,请求数量是非常大的,但是由于每次请求都会建立一个新的xmlhttprequest,而且jquery不会自动回收资源,所以导致了内存溢出. 通过查看jquery API,发现jquery还有一个 complete对象,是请求完成后回调函数 (请求

Python中由于logging模块误用导致的内存泄露的解决方法

  Python中由于logging模块误用导致的内存泄露的解决方法         这篇文章主要介绍了解决Python中由于logging模块误用导致的内存泄露,针对由于过多的UDP连接所产生的问题,需要的朋友可以参考下 首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对 我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接

Tomcat的热部署,出现内存溢出如何解决呢? 求大侠帮帮忙!

问题描述 我在Tomcat的conf目录下的server.xml文件中加了这句<Contextpath="/DCCS"docBase="D:javaapache-tomcat-6.0.18webappsDCCS"debug="99"reloadable="true"crossContext="true"/>;后tomcat不断的加载,请问我该如何解决? 解决方案 解决方案二:tomcat不断的加

android-Android udp接收不到组播,请问如何解决?

问题描述 Android udp接收不到组播,请问如何解决? 50C 能接收到udp数据,但是接收不到udp组播数据,请各位大神帮帮忙,万分感谢!代码如下: package ncepu.wsy.udp_multicast_server; import java.net.DatagramPacket;import java.net.InetAddress;import java.net.MulticastSocket;import java.sql.Date;import java.text.Si

模板匹配-opencv内存溢出怎么解决

问题描述 opencv内存溢出怎么解决 void CtestDoc::OnTemplatematching() { // TODO: 在此添加命令处理程序代码 CFileDialog Dlg(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT, NULL, NULL);//第一步读取模板图像A,为了简便表示算法, //该程序只以灰度图像打开,彩色三个通道原理类似 Dlg.DoModal(); CString FN = Dlg.GetPathName(); std::str

bitmap-ViewPager加载图片内存溢出怎么解决?

问题描述 ViewPager加载图片内存溢出怎么解决? @Override public Object instantiateItem(View view int position) { View mv = mListViews.get(position); ((ViewPager) view).addView(mv 0); // 加载图片 ImageView iv = (ImageView) mv.findViewById(R.id.imageView); try {//图片的名称 Strin