一、下载 
1.Libevent 
简单的说就是一个事件触发的网络库,Memcached离不开它。

  1. wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.17-stable.tar.gz

2.Memcached 
今天的主角

  1. wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

二、安装 
1.Libevent 
解压缩

  1. tar zxvf libevent-2.0.17-stable.tar.gz

编译、安装

  1. ./configure --prefix=/usr && make && make install

这里一定要注意指定--prefix,后面配置memcached的时候就有必要用到。 
2.Memcached 
解压

  1. tar zxvf memcached-1.4.13.tar.gz

编译、安装

  1. ./configure --with-libevent=/usr/lib && make && make install

这里一定要指定libevent的路径,否则启动的时候就有找不到libevent的so文件的错误! 
启动

  1. memcached -d -m 512 -p 11211 -u root -c 256 -P /var/run/memcached.pid

参数

引用
-p <num>      TCP port number to listen on (default: 11211) 
-U <num>      UDP port number to listen on (default: 11211, 0 is off) 
-l <addr>     interface to listen on (default: INADDR_ANY, all addresses) 
              <addr> may be specified as host:port. If you don't specify 
              a port number, the value you specified with -p or -U is 
              used. You may specify multiple addresses separated by comma 
              or by using -l multiple times 
-d            run as a daemon 
-u <username> assume identity of <username> (only when run as root) 
-m <num>      max memory to use for items in megabytes (default: 64 MB) 
-M            return error on memory exhausted (rather than removing items) 
-c <num>      max simultaneous connections (default: 1024) 
-v            verbose (print errors/warnings while in event loop) 
-P <file>     save PID in <file>, only used with -d option 

要关掉memcached

  1. kill -9 `cat /var/run/memcached.pid`

是否正常?Telnet上去看看

  1. telnet xxx.xxx.xxx.xxx 11211

然后输入

  1. stats

接着就能看到:

引用
STAT pid 3021 
STAT uptime 3621 
STAT time 1331261509 
STAT version 1.4.13 
STAT libevent 2.0.17-stable 
STAT pointer_size 64 
STAT rusage_user 0.000000 
STAT rusage_system 0.000999 
STAT curr_connections 6 
STAT total_connections 7 
STAT connection_structures 7 
STAT reserved_fds 20 
STAT cmd_get 0 
STAT cmd_set 0 
STAT cmd_flush 0 
STAT cmd_touch 0 
STAT get_hits 0 
STAT get_misses 0 
STAT delete_misses 0 
STAT delete_hits 0 
STAT incr_misses 0 
STAT incr_hits 0 
STAT decr_misses 0 
STAT decr_hits 0 
STAT cas_misses 0 
STAT cas_hits 0 
STAT cas_badval 0 
STAT touch_hits 0 
STAT touch_misses 0 
STAT auth_cmds 0 
STAT auth_errors 0 
STAT bytes_read 72 
STAT bytes_written 1038 
STAT limit_maxbytes 52428800 
STAT accepting_conns 1 
STAT listen_disabled_num 0 
STAT threads 4 
STAT conn_yields 0 
STAT hash_power_level 16 
STAT hash_bytes 524288 
STAT hash_is_expanding 0 
STAT expired_unfetched 0 
STAT evicted_unfetched 0 
STAT bytes 0 
STAT curr_items 0 
STAT total_items 0 
STAT evictions 0 
STAT reclaimed 0 
END 

上面状况说明Memcached服务正常。 
还可以试试get、set、delete、replace

引用
set foo 0 0 3     (保存命令) 
bar               (数据) 
STORED            (结果) 
get foo           (取得命令) 
VALUE foo 0 3     (数据) 
bar               (数据)

输入

  1. quit

退出。

三、系统服务 
参照Nginx的系统服务,自己写了一个Memcached的系统服务脚本。 
先构建/etc/init.d/memcahed这个文件,然后赋予其可执行权限:

  1. touch /etc/init.d/memcached
  2. chmod +x /etc/init.d/memcached

memcached脚本如下:

  1. #!/bin/bash
  2. # v.0.0.1
  3. # create by snowolf at 2012.5.25
  4. #
  5. # memcached  - This shell script takes care of starting and stopping memcached.
  6. #
  7. # chkconfig: - 90 10
  8. # description: Memcache provides fast memory based storage.
  9. # processname: memcached
  10. memcached_path="/usr/local/bin/memcached"
  11. memcached_pid="/var/run/memcached.pid"
  12. memcached_memory="1024"
  13. # Source function library.
  14. . /etc/rc.d/init.d/functions
  15. [ -x $memcached_path ] || exit 0
  16. RETVAL=0
  17. prog="memcached"
  18. # Start daemons.
  19. start() {
  20. if [ -e $memcached_pid -a ! -z $memcached_pid ];then
  21. echo $prog" already running...."
  22. exit 1
  23. fi
  24. echo -n $"Starting $prog "
  25. # Single instance for all caches
  26. $memcached_path -m $memcached_memory -l 0.0.0.0 -p 11211 -u root -d -P $memcached_pid
  27. RETVAL=$?
  28. [ $RETVAL -eq 0 ] && {
  29. touch /var/lock/subsys/$prog
  30. success $"$prog"
  31. }
  32. echo
  33. return $RETVAL
  34. }
  35. # Stop daemons.
  36. stop() {
  37. echo -n $"Stopping $prog "
  38. killproc -d 10 $memcached_path
  39. echo
  40. [ $RETVAL = 0 ] && rm -f $memcached_pid /var/lock/subsys/$prog
  41. RETVAL=$?
  42. return $RETVAL
  43. }
  44. # See how we were called.
  45. case "$1" in
  46. start)
  47. start
  48. ;;
  49. stop)
  50. stop
  51. ;;
  52. status)
  53. status $prog
  54. RETVAL=$?
  55. ;;
  56. restart)
  57. stop
  58. start
  59. ;;
  60. *)
  61. echo $"Usage: $0 {start|stop|status|restart}"
  62. exit 1
  63. esac
  64. exit $RETVAL

注意这几行配置,请根据实际情况配置memcached执行文件路径,以及Memcached使用内存大小:

引用
memcached_path="/usr/local/bin/memcached" 
memcached_memory="1024"

追加为系统服务:

  1. chkconfig --add memcached
  2. chkconfig memcached on

然后就可以通过service memcached start|stop|status|restart控制memcached了!

四、常规错误 
一开始没有指定libevent路径安装memcached的时候,启动memcached就报这个错误:

引用
memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory 

其实这个文件就在/usr/lib下。错就错在Linux是64bit系统,如果没有指定libevent路径,memcached就会去/usr/lib64下去找。 
找到这个文件

  1. whereis libevent-2.0.so.5
引用
libevent-2.0.so: /usr/lib/libevent-2.0.so.5
  1. ldd /usr/local/bin/memcached

提示找不到libevent-2.0.so.5

引用
        linux-vdso.so.1 =>  (0x00007fff41dfd000) 
        libevent-2.0.so.5 => not found 
        librt.so.1 => /lib64/librt.so.1 (0x0000003c94a00000) 
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c93a00000) 
        libc.so.6 => /lib64/libc.so.6 (0x0000003c92e00000) 
        /lib64/ld-linux-x86-64.so.2 (0x0000003c92a00000)

定位

  1. LD_DEBUG=libs /usr/local/bin/memcached -v
引用
     19905:     find library=libevent-2.0.so.5 [0]; searching 
     19905:      search path=/usr/lib/lib/tls/x86_64:/usr/lib/lib/tls:/usr/lib/lib/x86_64:/usr/lib/lib          (RPATH from file /usr/local/bin/memcached) 
     19905:       trying file=/usr/lib/lib/tls/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib/lib/tls/libevent-2.0.so.5 
     19905:       trying file=/usr/lib/lib/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib/lib/libevent-2.0.so.5 
     19905:      search cache=/etc/ld.so.cache 
     19905:      search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64            (system search path) 
     19905:       trying file=/lib64/tls/x86_64/libevent-2.0.so.5 
     19905:       trying file=/lib64/tls/libevent-2.0.so.5 
     19905:       trying file=/lib64/x86_64/libevent-2.0.so.5 
     19905:       trying file=/lib64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/tls/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/tls/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/x86_64/libevent-2.0.so.5 
     19905:       trying file=/usr/lib64/libevent-2.0.so.5 
     19905: 
/usr/local/bin/memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory 

注意这句:

引用
19905: trying file=/usr/lib64/libevent-2.0.so.5

做个软连接

  1. ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

再试试:

  1. ldd /usr/local/bin/memcached

这回找到了!

引用
        linux-vdso.so.1 =>  (0x00007fffffef6000) 
        libevent-2.0.so.5 => /usr/lib64/libevent-2.0.so.5 (0x00002b5608a26000) 
        librt.so.1 => /lib64/librt.so.1 (0x0000003c94a00000) 
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c93a00000) 
        libc.so.6 => /lib64/libc.so.6 (0x0000003c92e00000) 
        /lib64/ld-linux-x86-64.so.2 (0x0000003c92a00000)

五、监控 
可以在服务器上配置一个PHP页面来监测Memcached的情况, 
下载MemcachePHP

配置也比较简单,主要包括账户配置,以及Memcached Server地址配置。

  1. define('ADMIN_USERNAME','memcache');    // Admin Username
  2. define('ADMIN_PASSWORD','password');    // Admin Password
  3. define('DATE_FORMAT','Y/m/d H:i:s');
  4. define('GRAPH_SIZE',200);
  5. define('MAX_ITEM_DUMP',50);
  6. $MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
  7. $MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

常见错误:

引用
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/usr/local/apache.../memcache.php on line 726 

在memcache.php顶端加上“date_default_timezone_set('Asia/Hong_Kong');”即可,具体地域设置参考:http://www.php.net/manual/zh/datetime.configuration.php#ini.date.timezone

如果不方便搭建PHP服务,可以使用Perl脚本memcache-top 
修改@default_instances或使用--instances参数:

  1. perl memcache-top-v0.6 --instances 10.11.155.26 10.11.155.41

先到这里,后续做压力测试,Java客户端开发,Spring系统集成等。

转载地址:http://snowolf.iteye.com/blog/1447348

Memcached理解笔记1---安装&常规错误&监控的更多相关文章

  1. Memcached笔记——(一)安装&常规错误&监控

    08年的时候接触过Memcached,当时还对它的客户端产品嗤之以鼻,毕竟手工代码没有各种ORM原生XML配置方便.尽管如此,Memcached现在已经成了服务器架构里不可或缺的一部分! 相关链接: ...

  2. Memcached理解笔记4---应对高并发攻击

    近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意攻击,不停的刷新产品各个服务入口,制造垃圾数据,消耗资源.他们的最好成绩,1秒钟可以并发6次,赶在Database入库前,Cache进行Mis ...

  3. Memcached理解笔记3---Memcached使用总结

    为了将N个前端数据同步,通过Memcached完成数据打通,但带来了一些新问题: 使用iBatis整合了Memcached,iBatis针对每台server生成了唯一标识,导致同一份数据sql会产生不 ...

  4. (转)memcached学习笔记1(windows 7 64bit 环境下安装memcached)

    windows 7 64bit 环境下安装memcached 1.下载后解压到D:\memcached(下载地址:memcached-win64下载地址) 2.安装到windows服务,打开cmd命令 ...

  5. LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载

    LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载 2014/11/27 教程笔记 4,743 14     WordPress 精品主机推荐:恒创主机 | 阿里云(本站目前所用云主机) 倡萌 ...

  6. 前端监控系列2 |聊聊 JS 错误监控那些事儿

    作者:彭莉,火山引擎 APM 研发工程师.2020年加入字节,负责前端监控 SDK 的开发维护.平台数据消费的探索和落地. 有必要针对 JS 错误做监控吗? 我们可以先假设不对 JS 错误做监控,试想 ...

  7. Memcached在windows下安装与使用

    建议:windows系统下仅为测试所有,生产环境下服务端应使用Linux系统. 本文最后更新于:2014-08-03 18:24 原文:http://www.yaosansi.com/post/mem ...

  8. memcached 的简介、安装、命令

    一.memcached 概述 Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统.通过在内存里维护一个巨大的hash表.(key=value) Hash表 key(键) val ...

  9. memcached学习笔记2--安装及命令

    学习memcached的原理: 用户一 -> 访问浏览器 -> 服务器Apache -> PHP文件(该文件应用了memcached技术) -> [第一次]到数据库DB中查找数 ...

随机推荐

  1. cocos studio

    用了几天,和之前用的cocos creator以及unity的编辑器一对比,很多地方都挺反人类的哈... 拖拽和放大场景元素竟然还要切换一下编辑模式... 移动场景元素竟然没有单独控制x或者y方向的移 ...

  2. 客户端Git代码的下载与提交

    (1)git clone 服务器用户名@服务器IP:~/Git目录/.git 功能:下载服务器端Git仓库中的文件或目录到本地当前目录. (2)对Git目录中的文件进行修改. (3)git statu ...

  3. flume 整合kafka

    背景:系统的数据量越来越大,日志不能再简单的文件的保存,如此日志将会越来越大,也不方便查找与分析,综合考虑下使用了flume来收集日志,收集日志后向kafka传递消息,下面给出具体的配置 # The ...

  4. C# WebAPI中使用Swagger

    随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远. 前端和后端的唯一联系变成了API接口:API文档变成了前 ...

  5. 使用ABP框架踩过的坑系列5

    DDD领域驱动开发,实际是为复杂的业务场景而生的,为了让开发人员专注于业务,而操作系统.数据库.网络之类的技术细节,必须要持久透明化:实际就是数据库系统DBMS的ORM抽象,目标就是业务不需要考虑数据 ...

  6. 初探Angular_02 感受添加组件

    首先把目光聚焦在app这个文件夹里面 1.app.module.ts 这个文件是angular根模块,告诉Angular如何组装应用 // 浏览器解析的模块 import { BrowserModul ...

  7. mysql恢复备份错误:Got a packet bigger than 'max_allowed_packet' bytes

    最近恢复mysql数据库备份时,出现了一个错误:Got a packet bigger than 'max_allowed_packet' bytes 该问题主要是由于mysql的my.ini文件中设 ...

  8. JAVA 从头开始<六>

    一.静态代码块 静态代码块不需要创建对象才执行,比对象数据优先存在于内存中 二.静态函数 三.单例设计模式 1.饿汉单例模式 缺点:一声明就创建一个对象,没有使用的话就浪费了. 2.懒汉单例模式 1. ...

  9. Exp2 后门原理与实践 20164321 王君陶

    Exp2 后门原理与实践 20164321 王君陶 一.实验内容 基础问题回答: 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:通过漏洞,点击陌生链接,或者浏览不良网页挂马. 2.例举你知 ...

  10. jzoj100044

    完全背包問題 我們可以將數組內每個元素看成一個物品,這樣問題就轉化成: 現有n個物品,每個物品可以取a[i]~b[i]個,價值為d[i],費用為c[i],問怎麼樣取讓費用為0且價值最大 我們可以先每種 ...