【问题标题】:Memcached PerformanceMemcached 性能
【发布时间】:2014-03-28 11:33:53
【问题描述】:

我感觉我网站中的 Memcached 的速度比 Mysql 查询慢。请看我从 New Relic 获得的网站性能截图。

我不知道如何优化我的 CentOS 服务器中的 memcached。请查看 Memcached 的配置和性能截图。我觉得总连接数很高。

请查看下方的实时统计信息

以下是我在我的网站中使用 Memcached 的方式

<?php


class dataCache {

        function setMemData($key, $var, $flag = false, $expire = 36000) {
                global $memcache;
                if (!$memcache) {
                        $memcache = new Memcache;
                        $memcache->connect('localhost', 11211) or die("Could not connect");
                }
                if ($result = $memcache->set($key, $var, $flag, time() + $expire)) {
                        return TRUE;
                } else {
                        return FALSE;
                }
        }

        function getMemData($key) {
                global $memcache;
                if (!$memcache) {
                        $memcache = new Memcache;
                        $memcache->connect('localhost', 11211) or die("Could not connect");
                }

                if ($data = $memcache->get($key)) {
                        return $data;
                } else {
                        return FALSE;
                }
        }

        function delMemData($key) {
                global $memcache;
                if (!$memcache) {
                        $memcache = new Memcache;
                        $memcache->connect('localhost', 11211) or die("Could not connect");
                }

                if ($result = $memcache->delete($key)) {
                        return TRUE;
                } else {
                        return FALSE;
                }
        }
}

并且在每个PHP页面的最后,我使用如下方式关闭连接

if(isset($memcache)){                                                                 
     $memcache->close();
}

这个服务器需要更多内存吗?如何减少连接数?有什么提高性能的建议吗?

-------------编辑------------

正如cmet所说,当前连接数为9。总连接数为671731。连接数可能不是问题。

【问题讨论】:

  • 你能贴出你从 PHP 初始化你的 memcached 连接的代码吗?假设有 1 个 PHP 服务器和 1 个 memcached 服务器,那么连接太多了。
  • 我认为这个问题可能更适合serverfault.com
  • @DanielWilliams,感谢您的建议。我刚刚添加了 PHP 代码。问题可能出在代码中。
  • @Don Li:“太多”太模糊了。你为什么这么认为? “这正是我想要的”连接数是多少? “我不知道如何减少连接”——正如我之前提到的——对于这个问题,唯一的答案是:只需关闭 memcached 服务器,连接数就会减少到理想的 0。
  • @Don Li:这是服务器启动后的连接数。根据您的屏幕截图,在过去 10 小时内。 “我觉得这可能会影响性能。” --- 当您讨论性能优化时,您应该相信数字而不是感觉。

标签: php performance memcached newrelic


【解决方案1】:

这里有一些方法可以加快速度。

您的总连接数实际上是创建到 memcached 的连接数。

首先,使用 memcached php 扩展而不是 memcache 扩展。它们是完全不同的,memcache 扩展几乎被弃用了。 Memcached 扩展使用 libmemcached,它速度快得令人难以置信,并且具有更好的功能(如二进制协议、更好的超时、udp)

其次,使用持久连接。对于您的工作负载,这些应该完全足够,并且可以减少不断重新连接到 memcache 的成本。

第三,使用multi get/set/delete/etc。如果您知道您的请求中需要 10 个 memcache 键,请一次要求全部 10 个。如果您在任何时候循环访问 memcache 请求,这可以大大提高性能。

另一个需要注意的是,NewRelic 在报告内存缓存所花费的时间方面历来是糟糕的。由于 zend 引擎的检测方式,它可能会将在 php 中花费的时间误报为在 memcache 中花费的时间。

至于为什么你的 memcache 和 mysql 性能如此接近,你很可能是在运行相当简单的查询,所以在 memcache 和 mysql 上花费的时间是相当的。 Memcache 非常快,但它也是一个网络跃点,这通常是等待 memcache 所花费的最大时间。如果您真的只有 1 台服务器,您可以尝试在本地运行 memcache 或使用 APC 而不是 memcache。

【讨论】:

  • APC 是否可靠地存储 4GB 数据?
  • 可以。但是,您的 Web 服务器上需要 4GB 的备用 ram 来容纳它。如果您还没有运行 APC,那么您应该使用它,因为它可以极大地提高 PHP 代码的性能(无论将其用作键值缓存)。
  • 只是一个旁注:我不是 OP,我已经运行 APC(虽然不是为了数据缓存目的):-)
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2022-09-29
相关资源
最近更新 更多