TcpListener的异步调用内存泄漏---最近测试结果,没有泄露
摘要:我后来加大了client的连接/断开的次数(500,1000),Server端的连接被释放了。这说明: 1. 此代码是 可以正常工作的。 2.TcpListener/TcpListener的async的使用上,编译器生成的代码并没有在socket关闭的时候显式调用Disopose(),Dispo...
阅读全文
捉虫记(四)线程安全导致的HighCpu
摘要:一个朋友QQ群里说网站启动后会cpu很高,想要帮忙看一下dump.1.打开windbg加载dump文件后第一个命令lmf,这个命令显示加载的dll以及路径,这样子可以找个dll来帮忙加载sos,(额,我记不住load那么长的路径啊) 0:000> lmfstart end module name……...
阅读全文
捉虫记(三) Event导致的MemoryLeak
摘要:想买把椅子作为礼物送给爸爸,和媳妇逛商场、挑款式、比价格,忙忙活活好几天,最后决定买了打了个电话给爸爸,结果爸爸说“椅子可以折叠么,门太窄,进不来啊(装防盗门的时候没弄好,留下了个Bug)”-----瞬时崩溃,怎么自己平时就没注意到门口很窄,一般的椅子都进不来呢?这篇文章里的Bug也是,很早就发现了,但是一看到OverlappedData,不熟悉啊,没有仔细看一下WinDBG给出的信息,就直接放弃了,想来真后悔,后来还是经过大牛帮忙搞定的。这篇文章的Bug是8月末的事情,弄完这个bug后,我实在不能够再忍受这个社会主义初级阶段的三无程序,脑子一热,就把他给重写了(没有测试代码,逻辑混乱到,连重
阅读全文
捉虫记(二)GC导致的hang
摘要:本来第二篇早就该写的,都准备写一个while(true)导致高CPU的问题,但是那个dump不知道跑到哪里了,害得我这段时间一直在找,这次的现象是,哥正准备出去泡个茶,突然业务经理嗷嗷直叫(终于找到一个Bug,能不兴奋么),一边喊着处理不行了,一边喊着赶紧重新启动,哥没有吱声,默默打开了性能计数器,看到处理程序的缓存的确是慢慢在增长(这表示有积压了),而处理速度降到非常低了,几秒钟处理一个(平时情况下哥的程序每秒钟处理1000个Socket业务包是 没有问题的),说到这里建议大家在自己的程序中也加入一些自定义性能计数器,这东西太好用,当你把系统的一些值(比如说CPU的UserTime,还有Di
阅读全文
捉虫记(一)GC堆中的“内存泄漏”
摘要:首先介绍一下程序,Server程序,同时有好多Client连接,Client用tcpSocket发送数据给Server,Server对数据进行处理并返回处理结果给Client。虽然整个程序的开发时间很长,但中间不停的需求变更,功能不停地增加减少,代码也是好多人,每人几个模块甚至是几个函数杂凑起来,系统正在被使用,功能也不断被增加,总之......是一个SHZY初级阶段特色的绝对代表的Server程序。这是我接手这个程序之后的一些Bug的发现和修改,把他记录下来,以做茶余饭后的谈资。对于这种要文档没文档、要规范没规范程序,要在一边添加新功能,一边发现和修改bug是极其困难的,如果没有一些大杀器,
阅读全文