.Net的Outofmemory异常及大内存使用

        从去年起我们的服务器偶尔会抛出OutOfMemoryException,即没有足够的内存继续执行程序时引发的异常。服务器内存加到4G也仍会出现该问题。软件是UO的第三方模拟器。事实上,从任务管理器里,可以看到软件占用了约1G左右的内存,当然因为GC的缘故,实际软件使用的内存在600M左右。为避免超过1G多内存的占用,并抛出Outofmemory异常,设定在内存占用到一定值时进行强制GC,一下子可以减去几百兆,但终究是没彻底解决问题。
        最近国外论坛贴了相关处理方法,在此转述一遍,希望对遇到类似问题的朋友有帮助。


对于2G内存的服务器,.Net只能使用1.2G内存。
对于4G内存的服务器,.Net可使用2.4G内存。但系统需要进行如下设置:
1、 在boot.ini文件中增加/3GB的开关。
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)/WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)/WINNT="????" /3GB
2、在命令行窗口,进入该目录,如 cd "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin"
3、运行link命令: link -edit -LARGEADDRESSAWARE server.exe  (server.exe为你的.Net程序)
4、你的server.exe就可以使用到2.4G内存了


.Net 1.2好像没解决这个问题,新的2.0还没空做测试,不知道2.0在内存管理和GC的性能上有无大的变化。

"Linux out of memory"是指Linux系统在运行过程中出现了内存耗尽的情况。而虚拟内存是一种扩展内存的技术,可以将部分硬盘空间用作临时存储,以解决物理内存不足的问题。 当Linux系统出现内存不足的情况时,它会使用虚拟内存来进行临时存储。虚拟内存机制通过将部分不常用的内存数据交换到硬盘上的交换空间,腾出一定的物理内存供其他进程使用。这个过程被称为页面交换。 通过虚拟内存,Linux系统可以将尽可能多的进程同时运行在有限的物理内存上。当一个进程需要访问被交换到硬盘上的数据时,系统会将这些数据重新加载到物理内存,再让进程访问。这个过程虽然会比直接访问内存慢一些,但是可以避免因为内存不足而导致进程崩溃或系统死机的情况发生。 然而,虚拟内存也有一定的限制。当系统中的所有进程都使用了虚拟内存中的数据时,硬盘上的交换空间也会被占满。此时,Linux系统将无法再使用虚拟内存进行临时存储,从而导致系统报告"out of memory"的错误。在这种情况下,系统管理员需要释放一些内存资源或者增加物理内存的容量,以解决内存不足的问题。 总结来说,Linux系统的"out of memory"错误与虚拟内存是有关系的。虚拟内存是一种解决物理内存不足的技术,可以通过页面交换将部分内存数据存储到硬盘上,腾出物理内存供其他进程使用。然而,虚拟内存也有一定的限制,当交换空间被占满时,系统将无法再使用虚拟内存,出现内存不足的错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值