1

上周我们在总共有 400k 行和大约 220 MB 的 mysql 服务器上遇到了一个非常大的问题,所以我们决定开始使用 memcache。在更改整个脚本之前,已经准备好测试页面并使用 apache 基准测试(我不确定它是否是正确的测试方法)

ab -n 50000 -c 150 http://192.168.1.5/test.php

当我使用上面的命令测试更多请求时,memcache 在 25000 个请求后开始断开连接。

这是test.php的示例代码

<?php
global $memcache;
$memcache = new Memcache();

//$memcache->flush();
$memcache->connect("127.0.0.1", "11211");

$key = "10";

$cache_result = $memcache->get($key);

if($cache_result) {
    $data = $cache_result;
    echo "<h1>cache data</h1>";
} else {
    mysql_connect("localhost", "root", "root") or die(mysql_error());
    mysql_select_db("newstest");
    mysql_set_charset("utf8");

    $q = mysql_query("SELECT * `news`, `categories` WHERE `publish_area` LIKE 'headline' AND `published`='1' AND `category_parent`=`category_id` AND `publish_date` <= '".date("Y-m-d H:i:s")."' ORDER BY publish_date DESC LIMIT 0,15");

    while($o = mysql_fetch_object($q)) {
        $data[] = $o;
    }

    $memcache->set($key, $data);
    echo "<h1>mysql data</h1>";

    mysql_close();
}

foreach($data as $o) {
    print_r($o);    
}

?>

从 MySQL 中提取的数据约为 120 KB

memcached cachesize = 1024 也尝试了 2048

内存缓存 maxconn = 4096

看来mysql服务器高流量引起的问题在memcache之后会得到解决,但是memcache断开是当前的问题。似乎这次 mysql 服务器可以工作,但 memcache 会断开连接。

任何想法都会有用。谢谢。

4

0 回答 0