上周我们在总共有 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 会断开连接。
任何想法都会有用。谢谢。