Memcached安装使用和源代码调试
memcached官网:http://memcached.org/
一.安装
下载
# wget http://www.memcached.org/files/memcached-1.4.25.tar.gz
解压
# tar xzvf memcached-1.4.25.tar.gz
#cd memcached-1.4.25
配置
#./configure --prefix=/usr/local/memcached --with-libevent=/usr
注意这里选择libevent的位置就可以 比如你的是在–with-libevent=/usr/local/libevent/
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
编译安装
# make && make install
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
---------------须要依赖安装libevent-------------------
libevent官网 http://libevent.org/
# wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
# tar xzvf libevent-2.0.22-stable.tar.gz
# cd libevent-2.0.22-stable
# ./configure --prefix=/usr/local/libevent
# make && make install
----------------------------------
二.使用
启动
# /usr/local/memcached/bin/memcached -d -m 100 -uroot -l 0.0.0.0 -p 11211 -c 512 -P /usr/local/memcached/memcached.pid
启动參数:
memcached 1.4.2
-p <num> 监听的TCPport(默认: 11211)
-U <num> 监听的UDPport(默认: 11211, 0表示不监听)
-s <file> 用于监听的UNIX套接字路径(禁用网络支持)
-a <mask> UNIX套接字訪问掩码,八进制数字(默认:0700)
-l <ip_addr> 监听的IP地址。 (默认:INADDR_ANY。全部地址)
-d 作为守护进程来执行。 -r 最大核心文件限制。
-u <username> 设定进程所属用户。 (仅仅有root用户能够使用这个參数)
-m <num> 单个数据项的最大可用内存,以MB为单位。(默认:64MB)
-M 内存用光时报错。(不会删除数据)
-c <num> 最大并发连接数。(默认:1024)
-k 锁定全部内存页。注意你能够锁定的内存上限。
试图分配很多其它内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。
(不是前面的 -u <username> 參数。在sh下。使用命令"ulimit -S -l NUM_KB"来设置。 )
-v 提示信息(在事件循环中打印错误/警告信息。)
-vv 具体信息(还打印client命令/响应)
-vvv 超具体信息(还打印内部状态的变化)
-h 打印这个帮助信息并退出。
-i 打印memcached和libevent的许可。 -P <file> 保存进程ID到指定文件,仅仅有在使用 -d 选项的时候才有意义。 -f <factor> 块大小增长因子。(默认:1.25)
-n <bytes> 分配给key+value+flags的最小空间(默认:48)
-L 尝试使用大内存页(假设可用的话)。提高内存页尺寸能够降低"页表缓冲(TLB)"丢失次数,提高执行效率。 为了从操作系统获得大内存页。memcached会把全部数据项分配到一个大区块。 -D <char> 使用 <char> 作为前缀和ID的分隔符。 这个用于按前缀获得状态报告。 默认是":"(冒号)。
假设指定了这个參数。则状态收集会自己主动开启。假设没指定,则须要用命令"stats detail on"来开启。
-t <num> 使用的线程数(默认:4)
-R 每一个连接可处理的最大请求数。
-C 禁用CAS。
-b 设置后台日志队列的长度(默认:1024)
-B 绑定协议 - 可能值:ascii,binary,auto(默认)
-I 重写每一个数据页尺寸。调整数据项最大尺寸。
查看详情
#ps aux|grep mem
输出pid
#cat /usr/local/memcached/memcached.pid
状态
# telnet 127.0.0.1 11211
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
STAT limit_maxbytes就是最大内存是100M。
添加内存到200M
# /usr/local/memcached/bin/memcached -d -m 200 -uroot -l 0.0.0.0 -p 11211 -c 512 -P /usr/local/memcached/memcached.pid
先后2次查看内存使用
# top -n 1 |grep Mem
在启动memcached的时候能够通过-vv来查看slab的种类:
# /usr/local/memcached/bin/memcached -d -m 100 -uroot -l 0.0.0.0 -p 11211 -c 512 -P /usr/local/memcached/memcached.pid -vv
# /usr/local/memcached/bin/memcached -d -m 512 -l 0.0.0.0 -p 11211 -u root -vv
默认一个slab=1048576字节=1024K=1M
默认的truck是48
改为240
# /usr/local/memcached/bin/memcached -d -m 100 -n 240 -uroot -l 0.0.0.0 -p 11211 -c 512 -P /usr/local/memcached/memcached.pid -vv
# /usr/local/memcached/bin/memcached -d -m 512 -n 240 -l 0.0.0.0 -p 11211 -u root -vv
增长因子f默认是1.25,该值越小所能提供的chunk间隔越小。能够降低内存的浪费
# /usr/local/memcached/bin/memcached -d -m 512 -f 2 -l 0.0.0.0 -p 11211 -u root -vv
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
改动-I改变每一个slab的大小:
第一次最大-I仅仅有2048。然后改为4056
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
查看slabs状态
# stats slabs 显示各个slab的信息,包含chunk的大小、数目、使用情况等
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# set key1 0 0 3
www
STORED
# get key1
须要注意的是set 最后一个參数就是value字符的长度!
以下是有益构造多个不同chunk的字符存储效果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
# stats
# stats items
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
slab对于memcached的空间利用率占有决定因素.
用户数据item(包含key,value)终于会保存到chunk内。
chunk规格是固定的,假设用户数据放进来后还有剩余则这剩余部分不能做其它用途。
确定slab后看里面的是否有空暇 chunk放key+value。假设不够就再向系统申请一个page(假设此时已经达到 -m 參数设置的内存使用上限,则看是否设置了 -M 。假设设置了 -M 则返回错误提示,否则按LRU算法删除数据)。申请后将该page按本slab的chunk size 进行分割。然后分配一个来存放用户数据。
假设须要申请内存 时,memcached会划分出一个新的page并分配给须要的slab区域。
Memcached并非将全部大小的数据都放在一起的,而是预先将数据空间划分为一系列slabs。每一个slab仅仅负责一定范围内的数据存储,其大小能够通过启动參数设置增长因子。默觉得1.25。即下一个slab的大小是上一个的1.25倍。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
假设一个新的缓存数据要被存放,memcached首先选择一个合适的slab。然后查看该slab是否还有空暇的chunk。假设有则直接存放进去;如 果没有则要进行申请。slab申请内存时以page为单位。所以在放入第一个数据,不管大小为多少,都会有1M大小的page被分配给该slab。申请到 page后,slab会将这个page的内存按chunk的大小进行切分。这样就变成了一个chunk的数组。在从这个chunk数组中选择一个用于存储 数据。例如以下图。slab 1和slab 2都分配了一个page,并按各自的大小切分成chunk数组。
- default_size: 默认大小为48字节,也就是memcached默认的key+value的大小为48字节,能够通过-n參数来调节其大小;
- item_size: item结构体的长度,固定为32字节。default_size大小为48字节,item_size为32。因此class1的chunk大小为48+32=80字节;
- f为factor,是chunk变化大小的因素,默认值为1.25。调节f能够影响chunk的步进大小。在启动时能够使用-f来指定;
- CHUNK_ALIGN_BYTES是一个修正值,用来保证chunk的大小是某个值的整数倍(在32位机器上要求chunk的大小是4的整数倍)。
–Slab,特定大小的一组chunk
–Page,每次分配给slab的内存空间,会依照slab大小切分为chunk(默认1MB)–Chunk,存储记录的内存空间
1.先依据要存储的key、value和flags计算item的大小
item长度=item结构大小 + 键长 + 后缀长 + 存储值长度
2.假设这个item相应的slab还没有创建,则申请1个page(默认1MB)。将这个page依照这个slab类chunk的大写进行分割,然后将这个 item 存入
3.假设存在。且相应的slab没用完,存储
4.假设存在,且相应的slab用完了,则看内存是否用完,用完则启用LRU,否则申请新的page,存储
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
在make的时候添加參数:
假设之前已经安装须要清理,
必须加上编译选项-O0,不然在gdb内打印变量时提示"<value optimized out>"
# make uninstall
# make CFLAGS="-g -O0"
# make install
在gdb里启动
带精灵模式
# set args -d -m 100 -uroot -l 0.0.0.0 -p 11211 -c 512
不带精灵模式
# set args -m 100 -uroot -l 0.0.0.0 -p 11211 -c 512
后面都是走正常的调试流程
# break main
# break slabs_init
后面都是走正常的调试流程
# s 下一步 跟进函数
# n 下一步 不跟进函数
# c 下一个断点
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdW5peDIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
改动变量值
改动do_daemonize,这样就不用进入daemon了
调试线程
# info threads
显示进程中全部的线程的概要信息。gdb按顺序显示:
1.线程号(gdb设置)
2.目标系统的线程标识。
3.此线程的当前堆栈。
一前面打*的线程表示是当前线程。
#thread THREADNO
把线程号为THREADNO的线程设为当前线程。命令行參数THREADNO是gdb内定的
线程号。
你能够用info threads命令来查看gdb内设置的线程号。
gdb显示该线程
的系统定义的标识号和线程相应的堆栈。比方:
#thread apply [THREADNO] [ALL] ARGS
此命令让你对一个以上的线程发出同样的命令ARGS,[THREADNO]的含义同上。
假设你要向你进程中的全部的线程发出命令使用[ALL]选项。
不管gdb何时中断了你的程序(由于一个断点或是一个信号),它自己主动选择信号或
断点发生的线程为当前线程。gdb将用一个格式为[Switching to SYSTAG]的消息来向你报告。
Memcached安装使用和源代码调试的更多相关文章
- 快Key:按一下鼠标【滚轮】,帮你自动填写用户名密码,快速登录,可制作U盘随身(开源免费-附安装文件和源代码)
* 代码以本文所附下载文件包为准,安装文件和源文件包均在本文尾部可下载. * 快Key及本文所有内容仅供交流使用,使用者责任自负,由快Key对使用者及其相关人员或组织造成的任何损失均由使用者自负,与本 ...
- Unity3D第一战:软件安装与代码调试
1.软件的安装 Unity3D可以轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,功能非常强大. 最新版下载地址:http://unity3d.com/u ...
- 20140331 HOG代码调试 Boost库安装
1.CUDAHOG代码调试 错误1: 错误提示:(main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall cudaHOG::cudaH ...
- Asp.Net Memcached安装配置使用、安全性
Memcached安装配置使用 一,准备 你需要有一下软件: VS.NET(05/08) SQLSERVER memcached服务器端以及客户端类 ...
- C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程
前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...
- javascript代码 调试方法
你的代码可能包含语法错误,逻辑错误,如果没有调试工具,这些错误比较难于发现. 通常,如果 JavaScript 出现错误,是不会有提示信息,这样你就无法找到代码错误的位置. 在程序代码中寻找错误叫做代 ...
- 【转】Memcached安装
解析:Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. 一.软件版本 ...
- Linux下memcached安装和启动方法
Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...
- Windows和Linux环境下Memcached安装与配置(转)
一.memcached安装配置 windows平台安装 1.memcached-1.2.6-win32-bin.zip下载地址: http://code.jellycan.com/memcached/ ...
随机推荐
- ubuntu环境下android开发环境安装
http://blog.csdn.net/shulianghan/article/details/38023959 Android程序开发的环境配置 Ubuntu下自带openjdk的卸载 你无需管它 ...
- iOS键盘高度自适应(中英文输入)
一:添加通知监测键盘高度变化 [self keyBoardAutoSize]; 二:动态改变高度 #pragma mark keyboard height auto /* NSNotification ...
- Fiddler Session标志
Each Session object in Fiddler contains a collection of string flags, in the Session.oFlags[] collec ...
- jquery position方法使用及兼容性
1.position方法 jquery api地址:http://jquery.cuishifeng.cn/position.html position方法获取匹配元素相对父元素的偏移. 2.说明 2 ...
- springmvc自己定义拦截器
Spring MVC也能够使用拦截器对请求进行拦截处理,用户能够自己定义拦截器来实现特定的功能,自己定义的拦截器必须实现HandlerInterceptor接口. 直接看下样例: package co ...
- 〖Android〗OK6410a的Android HAL层代码编写笔记
一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...
- import 如何工作
# -*- coding: utf-8 -*- #python 27 #xiaodeng #import 如何工作 #程序第一次导入指定文件时,会执行三个步骤 #1)找到模块文件 #2)编译成位码(需 ...
- Python 多进程教程
Python2.6版本中新添了multiprocessing模块.它最初由Jesse Noller和Richard Oudkerk定义在PEP 371中.就像你能通过threading模块衍生线程一样 ...
- 动态计算UITableViewCell高度详解
本文将介绍四种情况下UITableViewCell的计算方式,分别是: Auto Layout with UILabel in UITableViewCell Auto Layout with UIT ...
- eclipse背景颜色调整参考(绿色养眼哟),其他工具也可以设置
http://hi.baidu.com/630270730/blog/item/d64f64dcc05376385982ddf6.html 提示键配置.提示快捷键.提示背景色.关键字颜色.代码显示.编 ...