我使用 PHP 和 Restler 库编写了一个 RESTful Web 服务作为移动应用程序的骨干。它运行在我的开发服务器上,该服务器运行 Windows Server 2008 R2、PHP 5.3.5、Apache 2.2.17 和 MySQL 5.5.8。为了好玩,我决定对我的开发服务器进行基准测试,结果遇到了一个可能的配置问题
如果我ab -k -n 1000 -c 50 http://myproductionserver.com/something/restful
通过 Windows CLI 运行,通常会在 300-700 个请求之间停止。错误显示“apr_socket_recv:远程主机强制关闭现有连接。(730054)。总共完成 X 个请求。”
我想我应该检查一下我的 Apache 错误日志。但毫无帮助。这是我用 ab 调用的错误:
[Fri Feb 24 17:23:27 2012] [notice] Parent: child process exited with status 255 -- Restarting.
[Fri Feb 24 17:23:27 2012] [notice] Apache/2.2.17 (Win32) PHP/5.3.5 configured -- resuming normal operations
[Fri Feb 24 17:23:27 2012] [notice] Server built: Oct 18 2010 01:58:12
[Fri Feb 24 17:23:27 2012] [notice] Parent: Created child process 768
[Fri Feb 24 17:23:28 2012] [notice] Disabled use of AcceptEx() WinSock2 API
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Child process is running
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Acquired the start mutex.
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Starting 64 worker threads.
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Listening on port 80.
因此,当我回到家时,我使用本地 IP 运行了相同的测试 - 认为这可能是网络问题。同样的事情发生了。我已经搜索了很长时间,但没有太多答案。我发现了一个非常相似的问题,解决方案是在 httpd.conf 文件中使用“Win32DisableAcceptEx”,说明该问题实际上是 PHP .dll 的一个错误。我禁用了除基本 MySQLi 之外的所有 MySQLi。从上面的日志可以看出,两者都没有起到什么作用。
有人知道吗?我发送 1000 个请求真的会让服务器崩溃吗?如果您需要更多信息,请告诉我!我知道这只是一个放在家里的开发服务器 - 但它模仿了我的生产服务器。我需要先解决这个问题,然后再继续。非常感谢您的帮助!