c++ - 为什么 _beginthread 返回错误 ENOMEM

标签 c++ stress-testing

我有一台用 C++ 实现的服务器,运行在具有 25GB RAM 的 Windows 2003 企业版上。

在压力测试期间,我看到当它试图通过调用 _beginthread 创建一个新线程时,我得到了 ENOMEM,这意味着“内存不足”。

但是我不明白为什么内存不足,perfmon数据显示当时进程使用了​​1.2GB VM和类似的物理内存,只有250个线程。

谁能帮我分析或解释为什么我仍然会报错?

最佳答案

一个线程通常需要 1 MB 的未碎片化地址空间。如果您的压力测试将内存碎片化到没有 1 MB 可用空间的程度,您将无法创建任何新线程。在最坏的情况下,这可以通过少至 2000 次每次分配一个字节来实现。

关于c++ - 为什么 _beginthread 返回错误 ENOMEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360845/

相关文章:

.net - 企业服务器 WCF 压力/线束测试

performance - 负载测试软件

c++ - 为什么此代码只能在一个平台上运行而不能在另一个平台上运行?

c++ - C++ 编译器如何决定何时调用 std::vector 或任何对象的移动构造函数

c++ - 内存博士 : are these lines really causing of memory leaks?

git - 使用 git 进行压力测试

c++ - 接口(interface)C++的好处?

c++ - 使用 getline 读取文件时遇到问题(菜鸟)

ruby-on-rails - 如何调整在使用生产级 Heroku Postgres 的 Heroku 上运行的 Ruby on Rails 应用程序?

java - 总是出现错误 “Non HTTP response code: java.net.UnknownHostException”