我有一台用C ++实现的服务器,运行在具有25GB RAM的Windows 2003企业上。
在压力测试期间,我看到它试图通过调用_beginthread创建一个新线程,我得到了ENOMEM,这意味着"没有足够的内存"。
但我不明白为什么内存不足,perfmon数据显示当时该进程已经使用了1.2GB的VM和类似的物理内存,只有250个线程。
任何人都可以帮我分析或解释为什么我还有这个错误吗?
答案 0 :(得分:2)
线程通常需要1 MB 未分段地址空间。如果您的压力测试将内存碎片化到没有1 MB伸展的可用点,您将无法创建任何新线程。在最坏的情况下,这可以通过每个一个字节的2000个分配来实现。
答案 1 :(得分:0)
由于我们的应用程序中存在内存泄漏,最终结束了。