我正在使用 php 创建一个服务,该服务从包含 2100 行的表中返回 json 数据。我在开发中使用以下设置:
- 使用 Apache 和 MySql 的 Xampp
- Windows 10
- PHP-7.0.8
在php中使用PDO来执行查询
该服务对于小型请求(30 行)和整个表都运行良好。我经常调用它,但没有遇到任何问题。最近它停止处理返回整个表的请求,只处理较小的请求。
我检查了 Apache 错误日志并得到以下信息:
[Sun Nov 20 11:06:06.687051 2016] [mpm_winnt:notice] [pid 4576:tid 536] AH00428:父进程:子进程 11908 已退出,状态为 1 -- 正在重新启动。
[Sun Nov 20 11:06:06.889267 2016] [mpm_winnt:notice] [pid 4576:tid 536] AH00418: Parent: Created child process 924
[Sun Nov 20 11:06:07.415857 2016] [ssl:warn] [pid 924:tid 436] AH01909: www.example.com:443:0 服务器证书不包含与服务器名称匹配的 ID
[Sun Nov 20 11:06:07.442378 2016] [mpm_winnt:notice] [pid 924:tid 436] AH00354: child :启动 150 个工作线程。
虽然我不确定问题是什么,但为了有效搜索,我已经搜索了解决方案。上面的每条错误消息似乎都给我提供了与我遇到的问题无关的答案(尽管我不完全确定问题是什么)。
有人知道为什么会发生这样的事情吗?
最佳答案
我的猜测是内存限制( child 被服务器杀死)。您可以增加它,但它不会解决问题 - 当您有 100 万条记录时会发生什么?
我的建议是您实现分页参数和要返回的最大记录数:
http://website.com/api/v1/getUsers?position=0
http://website.com/api/v1/getUsers?position=100
http://website.com/api/v1/getUsers?position=200
etc..
这将大大降低您系统的压力,并使用户能够在他们只想要前 x 条记录、最后 2 条记录等的情况下降低吞吐量。
如果您仍然希望能够为所有人提供服务,您可以查看此线程以了解如何增加 Apache 的内存:https://stackoverflow.com/a/36920556/1935500
关于PHP 无法检索大请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40699817/