memcached 压力测试以及性能分析

1、建立测试程序

     选用enyim客户端

  <configSections>
    <sectionGroup name="enyim.com">
      <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching"/>
    </sectionGroup>
  </configSections>
  <enyim.com>
    <memcached protocol="Binary">
      <servers>
        <add address="127.0.0.1" port="11211"/>
      </servers>
      <socketPool minPoolSize="10" maxPoolSize="200" connectionTimeout="00:00:05" deadTimeout="00:00:30"/>
    </memcached>
  </enyim.com>
代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//using Tempus.Framework.Cache.MemCached;
using System.Data.Sql;
using System.Data.SqlClient;
using Enyim.Caching;
using Enyim.Caching.Memcached;
using Enyim.Caching.Configuration;
namespace TestMemcached
{
    public partial class memcached : System.Web.UI.Page
    {
        static MemcachedClient mc = new MemcachedClient();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!ConnectMemCached())
            {
                ConnectDB();
            }
        }

        private bool ConnectMemCached()
        {
            try
            {
                string result;
                object user;
                if (mc.TryGet("User", out user)) //测试缓存中是否存在key的值
                {
                    result = (string)user;
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch (Exception ex)
            {
                return false;
            }
        }

        private void ConnectDB()
        {
            string constr = "data source=localhost;initial catalog=Test;user id=sa;pwd=sa";
            SqlConnection conn = new SqlConnection(constr);

            conn.Open();

            string sql = "Select * From XDCM2007_Users Where UserId=18";

            SqlCommand cmd = new SqlCommand(sql, conn);

            SqlDataReader dr = cmd.ExecuteReader();
            Users user = new Users();

            while (dr.Read())
            {
                user.userName = dr["UserName"].ToString();
                user.RealName = dr["RealName"].ToString();
            }
            dr.Close();
            conn.Close();
            mc.ExecuteStore(StoreMode.Add, "User", user.userName, DateTime.Now.AddMonths(1));
        }

        public class Users
        {
            public int userId { get; set; }
            public string userName { get; set; }
            public string RealName { get; set; }

        }
    }
}


2、Microsoft Web Application Stress Tool 压力测试工具

安装并启动WAS,程序运行时会打开“Cteate new script”对话框,即建立一个新的脚本窗口(如图1),如果运行WAS没有打开该窗口可以单击WAS主程序窗口工具栏上第一个按钮“New Script”即可。

   为了使测试更加准确,更加接按真实效果,需要对录制的测试脚本进行一些设置。

   去除静态干扰

   由于网页是由图片、文字以及其它动态源码组成的,而一般的静态内容消耗的带宽并不是很大,因此我们可以将其排除在外。在脚本中选中指向图像、文字以及其它静态文件项目前的灰色按钮,然后单击工具栏上的“Delete”按钮将其删除(图4)

memcached 压力测试以及性能分析_第1张图片

设置并发数

   然后在单击“New Recorded Script”下的“Settings”标签,其中“Concurrent Connections”是设置并发连接数的,其下面的“Stress level (threads)”和 “Stress multiplier(sockets perthread)” 分别设置对目标服务器的压力及负载程度的,其中Level是客户端所产生的线程数目,一个线程可以产生多个Socket并发请求,因此将两者的数值相乘,所获得的数字就是客户端同时连接的并发数(图5)。

memcached 压力测试以及性能分析_第2张图片

 时间设置

   时间设置包括“Test Run Time”(测试运行时间)和“Request Delay”(停止响应)以及“Suspend”(挂起时间)三项。其中测试运行时间是以日、小时、分钟和秒来设定的,建议该项时间不宜太短,如果设置的并发数较多,那么时间应该按比较增长,以便产生足够多的请求;而停止时间是指连接时超出这个时间即作超时处理;在挂起时间处部分为Warmup和Cooldown两项,一般可以设置为两三分钟为宜,这样做的目的是避免测试开始和结束时数据的变形,影响测试的准确性。

   指定带宽瓶颈

   “Bandwith”是指定带宽瓶颈的,即选择访问该网站大多数用户所使用的带宽。例如访问该网站的绝大部分用户是拨号,那么可以选择56K。

   四、开始测试

   做好基本的设置工作后,就可以在左侧选中新建的脚本“New Recorded Script”项,然后单击工具栏上的“Run Script”按钮,或者打开“Scripts”菜单下的“Run”命令,这样就开始测试了。测试过程中会以进度条的方式实时显示,待进度条结束我们即可进行测试结果分析了

现在我们就可以打开测试报告来查看测试结果了。单击“View”菜单,选择“Reports”,在打开的窗口左侧会按时间显示所有测试报告。根据时间选择本次测试报告,在窗口右侧即可查看具体内容。

   在测试报告中最重要的部分就是“Socket Errors”部分和“Result Codes”部分。其中Socket Errors部分共分为Connect、Send 、Recv和Timeouts。其中Connect表示客户端不能与服务器取得连接的次数;Send表示客户端不能正确发送数据到服务器的次数;Recv表示客户端不能正确从服务器接次的次数;Timeouts表示超时的线程数目。由此我们可以如果这四个数值都比较小,甚至为0则说明我们的服务器是经得起考验的;如果数值居高不下,甚至接近设置的并发数,那么则要好好的检查你的服务器了(图6)。

memcached 压力测试以及性能分析_第3张图片

3、性能分析



你可能感兴趣的:(memcached 压力测试以及性能分析)