遇到一个问题,即对memcached-> get($ key)的调用花费超过30秒,并且引发致命异常。一种奇怪的场景,但基本上,我们拥有的环境有4台服务器运行memcached 0.4,3台服务器运行1.08。Memcached忽略OPT超时
这里的例外
Maximum execution time of 30 seconds exceeded in /docroot/www/library/lib/Core/Cache/Memcache.php on line 152
行号的变化,不同的功能调用内存缓存连接上,但他们总是在无论是replace
或get
。我已经检查过密钥,并且它们都是字母数字。该文件的
线152
在运行1.08服务器,即时通讯试图设置它,以便那里有3秒对得到的是Timeout(这是比它确实应该是什么更高,但不管)
所以,我写了一个简单的脚本来连接到一些AWS memcache实例,将超时设置为一微秒并尝试让它缓存一个很大的值。
继承人的脚本
$cache = new Memcached();
$cache->addServers($servers);
$cache->setOption(\Memcached::OPT_RECV_TIMEOUT, 1);
$cache->->setOption(\Memcached::OPT_SEND_TIMEOUT, 5000);
$key = sha1(microtime(true) . rand(0, 9999999999));
$value = sha1($key);
for($i = 0; $i < 10000; $i++) {
$value .= sha1($value);
}
$cache->set($key, $value, 120);
echo "Value Set\n";
sleep(5);
$start = microtime(true);
var_dump([ 'key' => $key, 'value' => sizeof($cache->get($key)) ]);
var_dump($cache->getResultMessage());
$end = microtime(true);
echo "Elapsed: " . ($end - $start) . "\n";
AND,time php test.php
Value Set
array(2) {
["key"]=>
string(40) "c5c9da5ebef83a24da78cdd8bba61b0fa8473296"
["value"]=>
int(1)
}
string(7) "SUCCESS"
Elapsed: 0.0075550079345703
real 0m14.326s
user 0m9.129s
sys 0m0.080s
任何的输出有任何想法如何解决或者我的问题?帮助非常感谢
所以问题是,它需要超过30秒,并引发异常(该异常的输出是什么?)。这个时间信息与它有什么关系?你只是计时脚本的一部分,很明显这是脚本的一个不同部分需要花费很多时间。 –
时间点是显示它忽略我设置的超时。 (0.007秒> 1微秒),并且它仅在获得。尝试在单个SO帖子中显示两个问题,我猜 – Ascherer
最近发现服务器在不同的时区设置。已经解决了这个问题,并且正在等待第一个问题再次发生。 – Ascherer