我的PHP不断抛出与缓慢脚本有关的随机错误。 nginx / php5-fpm在错误日志中报告由于脚本超时而导致子节点被终止。
PHP5-FPM慢速错误日志报告的问题是我做的curl请求。
困惑,因为我使用连接超时所有我的curl请求例如
CURLOPT_CONNECTTIMEOUT 3 #number of seconds trying to connect CURLOPT_TIMEOUT 3 #number of seconds to run curl for
这是一个生产服务器,所以价值很低,我们希望在1秒内做出回应。
所以我意识到我们用于CURL的URL必须在DNS层失败。
所以我模拟了一个坏的DNS或不可用的DNS,我能够在我的日志中重现相同的错误和缓慢的脚本消息。
那么,我该如何处理呢?
1)CURLOPT_DNS_CACHE_TIMEOUT – 但增加默认从2分钟说10分钟?
不过,我确实看到,在我的错误,我有这些慢脚本2分钟和3秒准确…这表明CURLOPT_DNS_CACHE_TIMEOUT默认2分钟正在caching一个坏的响应,这是无论多久的caching设置。 时间似乎很方便忽略,但我可能是错的。 它会caching一个坏的DNS /不可用的DNS?
2)以某种方式编辑我的DNS名称服务器以允许多个DNS服务器。
然而,我编辑我的resolv.conf文件,并将openDNS添加到现有的名称服务器。 但我把一个虚假的DNS第一个1.1.1.1,它仍然没有给我一个网站上的错误的网关错误。 为什么不select另一台服务器来获得响应?
我认为添加多个服务器将sorting它,但它仍然在阅读列表中的第一个和失败。 我认为curlcaching可能caching不好的反应,但我不知道。 理想情况下,我保持caching,以减less查询IP的延迟。
任何build议如何我可以解决一个不可用的DNS服务器崩溃我的PHP脚本/curl请求?
谢谢
您可能需要考虑将DNS从curl手中移除,并运行您自己的本地cachingparsing器。
您可以将CURLOPT_DNS_USE_GLOBAL_CACHE设置为false以closurescaching,然后使用本地DNScaching来pipe理您的查找。
我不确定您正在处理的吞吐量,但是我发现在DNS服务器级别处理我们自己的DNS通常比依靠许多应用程序堆栈内部的caching更快。
请参阅: http : //devblog.moz.com/2011/02/high-performance-libcurl-tips/
此外,这可能会更好地问在stackoverflow,因为我认为这是您的应用程序层,而不是服务器级configuration造成的问题。