php - 600+ memcache req/s 问题 - 帮助!

标签 php nginx memcached

我在我的服务器上运行 memcached,当它达到 600+ req/s 时,它变得不稳定并导致大量问题。看起来当请求率变得那么高时,我的 PHP 应用程序在随机时间无法连接到 memcache 服务器,导致加载时间变慢,这使得 nginx 和 php-fpm 崩溃,我收到一堆 104: Connection reset by peer我的 nginx 日志中的错误。

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

如果您对这个问题有任何帮助,我将不胜感激。非常感谢!

最佳答案

从使用 TCP 套接字转而使用 UNIX 套接字(假设您在基于 unix 的服务器上)

在启用套接字的情况下启动 memcached: 添加-s /tmp/memcached.socket到您的 memcached 启动行(注意,套接字禁用网络支持)

然后在 PHP 中,使用持久连接进行连接,并连接到新的内存缓存套接字:

$memcache_obj = new Memcache;
$memcache_obj->pconnect('unix:///tmp/memcached.socket', 0);

另一个建议,如果你有多个“类型”的缓存对象,为每个“类型”启动一个 memcached 实例,并在它们之间分配你的热门项目。

Drupal 这样做,您可以看到他们的配置文件和 memcached init 是如何设置的 here .

此外,在我看来您的 memcached 超时设置得很高。如果超过 1 或 2 秒,您可以锁定脚本。应该达到超时,脚本应该默认通过另一种方法(SQL、文件等)检索对象

另一件事是验证你的内存缓存没有被放入交换文件,如果你的缓存小于你的平均空闲内存,尝试使用 -k 选项启动内存缓存,这将强制它的缓存始终留在ram 且无法交换。

如果你有一个多核服务器,还要确保 memcached 编译时支持线程,并使用 -t <numcores> 启用它。

关于php - 600+ memcache req/s 问题 - 帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771261/

相关文章:

php - 从日期 ('g:i a' 减去 6 小时,strtotime($time_date_data));

ruby-on-rails - rails - nginx + puma - 来自提供的教程链接的 nginx 未提供静态 Assets

nginx - vue-router、nginx 和直接链接

php - 在全动态和重数据库网站中使用memcached好吗?

php - 与 PHP 函数等效的 Javascript 函数

php - 通过 CSV 复制记录更新数据库

PHP 警告 : Unable to load dynamic library '/usr/lib64/php/modules/solr.so' undefined symbol: php_json_decode_ex in Unknown on line 0

php - php-memcached 有本地缓存​​缓冲区吗?

caching - Windows 上的 MS Velocity 与 Memcached 对比?

php - .htaccess 删除扩展名不起作用