我们在我们的应用服务器上运行一个PHP栈,这些服务器在本地使用twemproxy (通过套接字),为我们的缓存层连接到多个上游memcached服务器(EC2小实例)。
每隔一段时间,我就会收到我们的应用程序监视器发出的警告,页面加载时间超过5秒。当发生这种情况时,直接的解决方法是在每个应用服务器上重新启动twemproxy服务,这是一个麻烦。
我现在唯一的修复方法是每分钟运行一次crontab并重新启动服务,但正如您可以想象的那样,每分钟几秒钟都不会写入任何内容,这不是理想的、永久的解决方案。
以前有没有人遇到过这种情况?如果是这样,修复方法是什么?我试图切换到AWS Elasticache,但它的性能与我们目前的twemproxy解决方案不同。
这是我的twemproxy配置。
default:
auto_eject_hosts: true
distribution: ketama
hash: fnv1a_64
listen: /var/run/nutcracker/nutcracker.sock 0666
server_failure_limit: 1
server_retry_timeout: 600000 # 600sec, 10m
timeout: 100
servers:
- vcache-1:11211:1
- vcache-2:11211:1下面是php层的连接配置:
# Note: We are using HA / twemproxy (nutcracker) / memcached proxy
# So this isn't a default memcache(d) port
# Each webapp will host the cache proxy, which allows us to connect via socket
# which should be faster, as no tcp overhead
# Hash has been manually override from default jenkins to FNV1A_64, which directly aligns with proxy
port: 0
<?php echo Hobis_Api_Cache::TYPE_VOLATILE; ?>:
options:
- <?php echo Memcached::OPT_HASH; ?>: <?php echo Memcached::HASH_FNV1A_64; ?><?php echo PHP_EOL; ?>
- <?php echo Memcached::OPT_SERIALIZER; ?>: <?php echo Memcached::SERIALIZER_IGBINARY; ?><?php echo PHP_EOL; ?>
servers:
- /var/run/nutcracker/nutcracker.sock我们运行的是0.4.1 twemproxy和1.4.25 memcached。
谢谢。
发布于 2017-02-16 01:55:04
我最终在本地主机上从unix套接字切换到tcp端口,似乎解决了重启问题。然而,由于与tcp相关的开销,我确实注意到在进行切换时响应时间增加了。不接受这个答案,希望以后会有人发布一个关于套接字的更权威的答案……
发布于 2017-02-10 21:19:01
打开/过时套接字连接的数量可能是问题所在
https://stackoverflow.com/questions/41989898
复制相似问题