600+ memcache req/s 问题 - 救命!

600+ memcache req/s 问题 - 救命!

我在服务器上运行 memcached,当请求数达到每秒 600+ 时,它会变得不稳定并导致大量问题。当请求率达到如此高时,我的 PHP 应用程序有时会无法连接到 memcache 服务器,导致加载时间变慢,这会让 nginx 和 php-fpm 崩溃,并且我会在 nginx 日志中收到一堆 104:对等方重置连接错误。

我想指出的是,在我的 memcache 服务器中,我有一些“热对象” - 这些对象有时会接收 90% 的 memcache 请求。我还注意到,当如此多的请求命中单个对象时,它会稍微增加整个页面的加载时间(当它设法加载时)。

我将非常感激任何能帮助我解决这个问题的人。非常感谢!

答案1

这听起来确实像是网络层的问题。遇到此问题时,您可以抓取 netstat -ano 的输出并查看特定存储桶中有多少连接吗?如果您看到大量连接不在 ESTABLISHED 中,而是在 TIME_WAIT/FIN_WAIT 等中,您可能需要启用时间等待重用和回收。来自:

http://www.speedguide.net/articles/linux-tweaking-121

TCP_TW_REUSE 当从协议角度来看是安全的时,允许重新使用处于 TIME_WAIT 状态的套接字来建立新连接。默认值为 0(禁用)。它通常是 tcp_tw_recycle 的更安全替代方案

echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse(布尔值,默认值:0)

注意:tcp_tw_reuse 设置在大量短连接打开且处于 TIME_WAIT 状态的环境(如 Web 服务器)中特别有用。重用套接字可以非常有效地减少服务器负载。

相关内容