【问题标题】:Drupal site - Memcache Connection errorsDrupal 站点 - 内存缓存连接错误
【发布时间】:2009-05-18 19:41:24
【问题描述】:

我们正在努力优化我们的 drupal 网站。 我们正在使用 Siege 来衡量性能(作为 drupal 访问者)。

环境: Nginx + FastCGI+ Memcache

Siege 运行良好几秒钟,然后我们遇到连接错误: 示例:

HTTP/1.1 200  29.18 secs:    5877 bytes ==> /
HTTP/1.1 200  29.39 secs:    5877 bytes ==> /
warning: socket: -1656235120 select timed out: Connection timed out
warning: socket: -1673020528 select timed out: Connection timed out

使用相同的 Siege 测试配置,Nginx + FastCGI+ Drupal Cache 似乎工作正常。 示例:

HTTP/1.1 200   1.41 secs:    5868 bytes ==> /
HTTP/1.1 200   1.40 secs:    5868 bytes ==> /

如您所见,除了连接错误之外,使用 MemCache 的响应时间要长得多。

知道这里可能出了什么问题...以及为什么 Drupal 在加载内存缓存时抛出错误?

Memcache 在单独的实例上运行。为 MemCache 分配 2GB 内存。

【问题讨论】:

    标签: drupal timeout memcached


    【解决方案1】:

    猜想您的 memcached 连接用完了。请每秒使用一个简单的脚本检查您的 memcached 安装。然后开始围攻。我猜你的 memcached 会在一段时间后停止响应。

    测试memcache php脚本:

    <?php
     $memcache = new Memcache;
     $memcache->connect('localhost', 11211) or die ('Unable to connect');
     $version = $memcache->getVersion();
     echo 'Server version: '.$version;
    ?>
    

    猜测正在发生的事情是您没有禁用 memcache 中的持久连接,它们在 php 线程中徘徊。 Memcached 一次可以服务约 1023 个,而在 Sieging 中这可能还不够。

    您也可以尝试 ab,这是一种 apache 基准测试工具,与 -c 开关密切相关。尝试一下,看看结果如何在不同的值上变化。

    最后,您应该在 php 机器上的 memcached 端口(通常为 11211)上运行tcpdump,以了解连接发生了什么。 drupal会启动它们吗?其他主机是响应 RST 还是超时?

    memcached php 文档 api 中有一个错误,表示默认情况下连接是非持久的。默认情况下,它们持久的(嗯,它们在我遇到问题的时候就存在)。

    请随意评论这个答案,我会阅读 cmets 并在必要时提供进一步帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      相关资源
      最近更新 更多