关于.NET程序内存的问题

wtk13 2008-09-23 01:37:42
各位好,有问题向大家请教

我们的服务程序经常的会报OutOfMemery的错误,那个时候内存只为700多兆,我们的服务器有4G的内存

我也知道报OutOfMemery是由于.NET申请内存时申请不到报出的错误,

所以我想有没有什么办法,让我的程序运行时就给他分配好一个大内存,
然后让它自己不用向系统申请内存了,而是直接申请自己分配好的内存,

谢谢大家
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtk13 2008-09-30
  • 打赏
  • 举报
回复
还有人帮我分析一下内存的问题嘛?
wtk13 2008-09-24
  • 打赏
  • 举报
回复
其实做为一个大应用的服务程序内存大应该是很正常的,
我们的应用是REMOTING架构的,高峰时会有200多个客户端连入系统进行复杂的业务操作,
所以我认为内存大到700M,哪怕高过1G也应该是正常的,可是系统确在使用了700内存后就撑不住了,
而操作系统可用内存还是那么的多,所以提出了这个问题,可不可以能让它使用那么大的内存。
shalen520 2008-09-23
  • 打赏
  • 举报
回复
gen 2 heap特别的大?

看起来很多对象经历了两次以上的GC仍然存活,检查一下 static/shared/global/cache variable,是不是有引用了这些对象
shalen520 2008-09-23
  • 打赏
  • 举报
回复
看帮助吧,有详细解释的,网上也有很多教程
wtk13 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shalen520 的回复:]
启动windbg,设置好符号文件路径,获取full dump,然后分析dump的内存使用情况,查看异常链,检查线程情况等

remoting要特别当心大对象的序列化,有时候一个序列化操作就可以搞死服务器,见过有人序列化100M的dataset,然后CLR申请了1G内存,结果当然是OOM...
[/Quote]

十分感谢,我只会简单的WINDBG命令还不会检查内存的命令,教我几个命令吧。
谢谢。
shalen520 2008-09-23
  • 打赏
  • 举报
回复
启动windbg,设置好符号文件路径,获取full dump,然后分析dump的内存使用情况,查看异常链,检查线程情况等

remoting要特别当心大对象的序列化,有时候一个序列化操作就可以搞死服务器,见过有人序列化100M的dataset,然后CLR申请了1G内存,结果当然是OOM...
sxmonsy 2008-09-23
  • 打赏
  • 举报
回复
不要太相信自带的GC.自己写最好。
wtk13 2008-09-23
  • 打赏
  • 举报
回复
我们的服务程序是一个REMOTING的服务程序。
看有什么能帮我的吗?
wtk13 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shalen520 的回复:]
自己管理内存做不到,因为内存由.NET CLR管理,应用程序无法直接控制内存分配和释放

OutOfMemoryException,说到底是CLR在GC过之后仍然找不到一块连续的64M内存而引发的,导致的原因可能很多,比如:大量的root对象,其他应用占用了很多内存,内存有很多碎片等;可以尝试为应用程序池加大虚拟内存上限,或者改一下machine.config,加大.net内存的阀值

如果还不行,就要用windbg等比较专业的工具来分析内存使用情况,找出原因…
[/Quote]

60%的默认的阀值应该是够了,也没有突破它。
我用ProcessExplorer看了看,线程数很少,打开的端口也少,
只是他的gen 2 heap 特别的大,理论上是应该被垃圾回收掉的,但是回收非常的慢。

WINDBG学的不精啊,只会简单的调试。
wtk13 2008-09-23
  • 打赏
  • 举报
回复
2楼的同志,在200多个工程的解决方案和上百万行代码的程序里,你教教我如何检查内存泄露。
jzywh 2008-09-23
  • 打赏
  • 举报
回复
检查内存泄露
shalen520 2008-09-23
  • 打赏
  • 举报
回复
自己管理内存做不到,因为内存由.NET CLR管理,应用程序无法直接控制内存分配和释放

OutOfMemoryException,说到底是CLR在GC过之后仍然找不到一块连续的64M内存而引发的,导致的原因可能很多,比如:大量的root对象,其他应用占用了很多内存,内存有很多碎片等;可以尝试为应用程序池加大虚拟内存上限,或者改一下machine.config,加大.net内存的阀值

如果还不行,就要用windbg等比较专业的工具来分析内存使用情况,找出原因了

17,739

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧