MySQL 5.1.73 Apache/2.2.15 PHP 5.6.13 CentOS 6.5 Cakephp 3.1
导入过程大约4分钟后(3分57秒),我正在运行的导入过程停止了。 我找不到任何日志中的错误或警告。 导入过程包括许多SQL调用和数据处理,没有太复杂的东西,但如果进行完整比较以进行更新,则可能需要约10分钟才能完成5500个记录。
Firefox:安全连接失败-在页面加载时重置与服务器的连接。 Chrome:ERR_NO RESPONSE
- php设置的时间限制为900,这是有效的。 我可以将其设置为5秒并获得错误。 没有达到限制。
- 我可以暂停另一个控制器10分钟,而此错误不会发生,表明实际程序中的某些内容导致它失败,而不是托管服务因花费太长时间而终止请求(阅读有关VPS执行此操作以防止垃圾邮件的文章)。
- php.ini中已将php错误全部打开,并且只有为了确保,在控制器本身中也打开了。
- 如果我减少要导入的文件的大小,则导入过程完成。 如果恰到好处,它将完成并显示浏览器消息。 这对我表明它不会在执行的每个点上都失败。
- 我已经删除了所有缓存并重新启动了服务器。
- 我在apache日志中没有看到任何输出,除非是请求已进行。
- 我没有在mysql日志中看到任何错误,但是我不知道是否因为其未开启。
- 相同的代码在我的本地主机上完全没有问题。 它与服务器不完全匹配,但接近。 Ubuntu Desktop vs Centos,php 5.5 vs php 5.6
- 我已经注意到内存使用情况,并没有发现任何问题。
此时,我正在寻找关于需要查看或可能导致失败的原因的任何好建议。 有许多可能的地方可以查看,而没有错误,很难缩小问题可能出现的范围。 提前感谢您的任何建议!
更新
在更仔细地查看请求期间的内存使用情况后,我注意到它比理想状态高得多。
Apache进程(httpd)被杀死并产生一个新线程。一旦新线程消耗完内存,屏幕上就会显示错误信息。之前我看过它,只有30%的内存使用率,可能是因为刚刚结束了旧进程。这一次我一直观察到它达到80%,加上其他进程,使得它的内存不足而被终止。被终止的进程不能记录任何错误或警告信息,这就是为什么没有出现任何错误或警告的原因。对我来说,有趣的是进程会马上重新启动。我发现一个命令可以显示哪些进程由于内存原因被杀死,这非常有用:
dmesg | egrep -i 'killed process'