我找不到这个答案,可能我没有用正确的词search。
当一个PHP脚本失败(脚本中的错误,无限循环,无休止的sql调用等),整个服务器变得“忙碌”。 这就像所有的资源被采取,并集中在试图执行该脚本。 通过重新启动apache / Nginx,服务器恢复正常。
这怎么可以避免? 设置脚本超时将无法解决它,因为如果它甚至10秒超时服务器将不响应这10秒的每个人。
有什么办法可以避免这种情况发生? 是的,解决脚本问题将停止发生,但我相信有一种方法来防止在服务器端的这一点。
apache和sftp的权限在wordpress的wordpress自动更新
Oauth 2在Mendeley与Java
在此服务器上找不到请求的URL /前端/ ru / site / login /
Apache dbutils在更新sql中更改列名称
禁止:您无权访问此服务器上的WAMP错误
刚才我有一个例子。 该脚本通过调用该网站中的服务来获取国家/地区代码。 由于某种原因,该网站不会随机为我们服务,所以脚本将永远等待接收文件内容。
$getcountry = file_get_contents('http://ip-API.com/PHP/'. getUserIP());
谢谢
如何通过tomcat和PHP之间的会话
如何阻止Apache列出我的用户目录的内容
RewriteRule会导致页面重新加载两次
如何使用Apache 2.0为IE 8浏览器设置X-UA兼容标头为IE = Emulateie7?
通过PHP运行复杂的ROS shell命令
设置脚本超时将无法解决它,因为如果它甚至10秒超时服务器将无反应的10秒给大家。
如果您的服务器设置正确,请不要使用。 设置PHP超时是处理失控脚本的正确方法(除了解决问题的实际原因外)。 致命脚本错误将立即终止,不占用服务器资源。
您的文章似乎认为只有一个PHP脚本的实例在任何时候运行。 这不应该是这样的。 您的Web服务器应该为每个由PHP处理的Web请求启动新的进程或线程,直到某些配置的限制。 或者,如果您正在使用PHP-FPM,则将其交给PHP进程池。 在任何情况下,您的整个服务器都不应该锁定一个请求。
现在,如果你的代码或服务器有严重的问题,那么所有的请求可能需要很长的时间,并挂起更多的请求。 唯一的解决办法是解决问题的根源,并保持合理的超时作为故障安全。
对于Apache,这些是您要检查的一些设置: serverlimit , Startservers , MaxClIEnts 。 对于PHP-FPM,您可以从max_children设置开始。
该脚本通过调用该网站中的服务来获取国家/地区代码。 由于某种原因,该网站不会随机为我们服务,所以脚本将永远等待接收文件内容。
这是一个非常普遍的问题,必须由您的代码来解释。 你永远不能相信,第三方服务将立即返回。 很明显,将这样的请求卸载到后台进程是最好的(例如cron)。 但是,如果需要将其作为普通页面请求的一部分来完成,则应该始终设置合理的超时时间。 对于使用file_get_contents具体示例,请减少套接字超时:
ini_set('default_socket_timeout',10); // 10 seconds
总结以上是内存溢出为你收集整理的如何在PHP脚本失败时避免服务器不响应全部内容,希望文章能够帮你解决如何在PHP脚本失败时避免服务器不响应所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)