gpt4 book ai didi

php - Memcached 忽略 OPT 超时

转载 作者:搜寻专家 更新时间:2023-10-31 21:12:35 24 4
gpt4 key购买 nike

遇到调用 memcached->get( $key ) 超过 30 秒并抛出致命异常的问题。有点奇怪的场景,但基本上,我们拥有的环境有 4 台服务器运行 memcached 0.4,3 台运行 1.08。

异常(exception)情况

最长执行时间
/docroot/www/library/lib/Core/Cache/Memcache.php 第 152 行超过 30 秒

行号变化,调用内存缓存连接的不同函数,但它们总是在 replaceget 上。我检查了按键,它们都是字母数字。

该文件的第 152 行是

在运行 1.08 的服务器上,我试图将其设置为获取 3 秒的超时(这比实际应该的高,但没关系)

因此,我编写了一个简单的脚本来连接到一些 AWS 内存缓存实例,将超时设置为一微秒并尝试让它缓存一个大值。

这是脚本

$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

有人知道如何解决我的任何一个问题吗?非常感谢帮助

最佳答案

您是否尝试过使用持久连接?看起来您正在使用服务器池,因此请尝试像这样简单的操作:

$poolId = sha1(serialize($servers));
$cache = Memcached( $poolId );
if( sizeof( $cache->getServerList() ) === 0 ) {
$cache->addServers( $servers );
}

我遇到了一些奇怪的行为和随机的问题,很难产生 fatal error ,持久连接为我解决了这个问题。在这里找到我的解决方案和代码示例:Configuring the PHP Memcached client

认为这可能是问题所在,正如作者提到的:

In a large server farm, you want to make sure you properly configure a connection pool. Otherwise, Memcached has a bad habit of happily leaking connections.

关于php - Memcached 忽略 OPT 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com