32位windows 2003 server,web服务器为IIS 6。
服务器上有几个网站,独立使用自己的pool,每个app pool的最大内存使用限制为800M,超过这个数目就回收pool池的资源。我的网站,有几个地方比较好资源,会发生因为超过内存限制而回收,重启。所以写了个判断,及时强制回收,请问这个值多大好呢,540 million, 600 million,还是多少?肯定不是800M,因为这时已经超过限制了。if (GC.GetTotalMemory(false) > 540,000,000)
{
GC.Collect(1, GCCollectionMode.Forced);
}
服务器上有几个网站,独立使用自己的pool,每个app pool的最大内存使用限制为800M,超过这个数目就回收pool池的资源。我的网站,有几个地方比较好资源,会发生因为超过内存限制而回收,重启。所以写了个判断,及时强制回收,请问这个值多大好呢,540 million, 600 million,还是多少?肯定不是800M,因为这时已经超过限制了。if (GC.GetTotalMemory(false) > 540,000,000)
{
GC.Collect(1, GCCollectionMode.Forced);
}
说不定会有意外呢
建议还是优化代码
一般Web应用,写这种代码就是直接送网站进坟墓... ...另外,建议不要随便手动去回收GC.
频繁调用GC.Collect会导致100% CPU,而真正的请求就无法响应至于你所谓的耗资源,只要用完之后立即释放(var = null),那么当内存不够用的时候,CLR会自动帮你回收内存的.前面你所谓的回收Apppool,建议你不要设置800M(还不知道你这个800是指虚拟内存还是物理内存呢),如果是物理内存,800M确实是一个合适的值,但是根本解决办法是找到你内存泄露的代码段,进行改进
GC.WaitForPendingFinalizers();一起用
也要占CPU的,
还是要从根本上解决问题,优化代码
还是强制GC吧.
你把几百页的PDF同时生成保存到内存中,肯定内存不足.
能不能考虑一部分的处理,一部分的写入呢?
如 using
已定为400,000,000
if (GC.GetTotalMemory(false) > 400000000)
{
GC.Collect(0, GCCollectionMode.Forced);
}
直接GC.Collect()反而内存下降很多。