`

安装&常规错误&监控

阅读更多

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

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

Shell代码  收藏代码
  1. wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.17-stable.tar.gz  


2.Memcached
今天的主角

Shell代码  收藏代码
  1. wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz  


二、安装
1.Libevent
解压缩

Shell代码  收藏代码
  1. tar zxvf libevent-2.0.17-stable.tar.gz  


编译、安装

Shell代码  收藏代码
  1. ./configure --prefix=/usr && make && make install   


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

Shell代码  收藏代码
  1. tar zxvf memcached-1.4.13.tar.gz  


编译、安装

Shell代码  收藏代码
  1. ./configure --with-libevent=/usr/lib && make && make install  


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

Shell代码  收藏代码
  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

Shell代码  收藏代码
  1. kill -9 `cat /var/run/memcached.pid`    


是否正常?Telnet上去看看

Shell代码  收藏代码
  1. telnet xxx.xxx.xxx.xxx 11211  


然后输入

Shell代码  收藏代码
  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               (数据)



输入

Shell代码  收藏代码
  1. quit  

退出。

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

Shell代码  收藏代码
  1. touch /etc/init.d/memcached  
  2. chmod +x /etc/init.d/memcached  


memcached脚本如下:

Shell代码  收藏代码
  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.   
  11. memcached_path="/usr/local/bin/memcached"  
  12. memcached_pid="/var/run/memcached.pid"  
  13. memcached_memory="1024"  
  14.   
  15. # Source function library.  
  16. . /etc/rc.d/init.d/functions  
  17.   
  18. [ -x $memcached_path ] || exit 0  
  19.   
  20. RETVAL=0  
  21. prog="memcached"  
  22.   
  23. # Start daemons.  
  24. start() {  
  25.     if [ -e $memcached_pid -a ! -z $memcached_pid ];then  
  26.         echo $prog" already running...."  
  27.         exit 1  
  28.     fi  
  29.   
  30.     echo -n $"Starting $prog "  
  31.     # Single instance for all caches  
  32.     $memcached_path -m $memcached_memory -l 0.0.0.0 -p 11211 -u root -d -P $memcached_pid  
  33.     RETVAL=$?  
  34.     [ $RETVAL -eq 0 ] && {  
  35.         touch /var/lock/subsys/$prog  
  36.         success $"$prog"  
  37.     }  
  38.     echo  
  39.     return $RETVAL  
  40. }  
  41.   
  42.   
  43. # Stop daemons.  
  44. stop() {  
  45.     echo -n $"Stopping $prog "  
  46.     killproc -d 10 $memcached_path  
  47.     echo  
  48.     [ $RETVAL = 0 ] && rm -f $memcached_pid /var/lock/subsys/$prog  
  49.   
  50.     RETVAL=$?  
  51.     return $RETVAL  
  52. }  
  53.   
  54. # See how we were called.  
  55. case "$1" in  
  56.         start)  
  57.             start  
  58.             ;;  
  59.         stop)  
  60.             stop  
  61.             ;;  
  62.         status)  
  63.             status $prog  
  64.             RETVAL=$?  
  65.             ;;  
  66.         restart)  
  67.             stop  
  68.             start  
  69.             ;;  
  70.         *)  
  71.             echo $"Usage: $0 {start|stop|status|restart}"  
  72.             exit 1  
  73. esac  
  74. exit $RETVAL  


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

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



追加为系统服务:

Shell代码  收藏代码
  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下去找。
找到这个文件

Shell代码  收藏代码
  1. whereis libevent-2.0.so.5  

 

引用
libevent-2.0.so: /usr/lib/libevent-2.0.so.5

 

Shell代码  收藏代码
  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)


定位

Shell代码  收藏代码
  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



做个软连接

Shell代码  收藏代码
  1. ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5  


再试试:

Shell代码  收藏代码
  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地址配置。

Php代码  收藏代码
  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.   
  7. $MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'// add more as an array  
  8. $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参数:

Shell代码  收藏代码
  1. perl memcache-top-v0.6 --instances 10.11.155.26 10.11.155.41  





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

分享到:
评论

相关推荐

    delphi实现window下一些常规监控

    在IT领域,开发人员经常需要对操作系统进行各种监控,以便于调试、性能优化或问题排查。本主题聚焦于使用Delphi编程语言...在提供的"Window常规监控"项目中,你可以深入研究这些功能的具体实现,为自己的项目提供参考。

    A卷-监控错误日志文件(1).rar

    在IT系统管理和维护中,监控错误日志文件是一项至关重要的任务。日志文件记录了系统、应用程序或服务运行过程中的各种事件,包括错误、警告、信息以及调试信息,它们为故障排查、性能优化和系统稳定性提供了宝贵的...

    计算机监控系统讲义.ppt

    计算机监控系统的基本类型包括计算机辅助监控系统(CASC)、基于计算机的监控系统(CBSC)和计算机与常规装置双重监控系统(CCSC)。CASC强调计算机辅助,而CBSC则分为以计算机为主和为辅两种,CCSC则在传统设备和...

    串口监控精灵CommMonitor12

    这一特性使得CommMonitor12不仅适用于常规的串口通信监控,还能应对特殊应用的需求。 5. **友好界面**:软件界面设计简洁明了,操作直观,无论是初学者还是经验丰富的开发者都能快速上手。它提供了多种视图模式,如...

    Prometheus稳定性测试监控方案

    3. **稳定性指标**:除了常规性能指标,还应关注系统稳定性相关的指标,如错误率、延迟、恢复时间等。 四、监控最佳实践 1. **指标设计**:确保指标具有明确的业务含义,避免过于复杂或冗余的指标。 2. **资源规划*...

    性能测试监控-Windows系统资源监控工具perfmon.pdf

    右键点击图表区域,选择“属性”,在属性设置窗口中的常规页面,可以设置采样间隔(即采样的频率)和采样持续时间,以便实时监控可以按照设置的参数刷新监视结果。 除了实时监控外,perfmon还支持长时稳定性采集...

    串口监控助手,比串口调试助手好用,监控串口底层数据

    总的来说,串口监控助手是一款专业且强大的串口调试工具,它超越了常规的串口调试助手,提供更加全面和精细的串口监控能力,帮助工程师们更有效地进行软硬件联调工作,提高开发效率,减少错误和调试时间。...

    监控系统施工方案(20211219222109).pdf

    由于提供的文件内容存在OCR扫描错误和重复的数字序列,加上缺乏具体的监控系统施工细节,生成一个准确且丰富的知识点文章存在困难。不过,我会尝试根据文件标题“监控系统施工方案”所隐含的含义,以及根据常规监控...

    VB 实现远程监控 winscok +VB6.0

    1. **反向连接**:在远程监控中,反向连接是一种特殊的连接方式,不同于常规的客户端主动连接服务器。在这里,服务端会主动监听客户端的连接请求,而不是客户端去寻找服务端。这种方式在一些特定场景下有优势,例如...

    大型C++开源视频监控软件ContaCam调试教程(VS2010)

    - **连接包出错**:在解决方案中,通过“解决方案资源管理器”定位到项目属性设置,具体路径为:解决方案→属性→配置属性→链接器→常规→附加库目录。添加路径`D:\Program Files\Microsoft\Microsoft DirectX SDK...

    zabbix监控(二)添加新主机、自定义监控1

    例如,内置的"Template OS Linux (Template App Zabbix Agent)"模板提供了对CPU、内存、磁盘和网卡的常规监控。若要监控服务器登录人数,我们可以创建自定义监控项。 **4.1.1 说明** 在实验场景中,如果服务器登录...

    PLC的故障诊断与常规维护.pptx

    总的来说,对PLC的故障诊断与常规维护涉及到系统状态监控、环境条件评估、硬件检查、软件校验以及错误处理策略的制定。通过有效的维护和及时的故障排除,可以极大地延长PLC的使用寿命,保证工业生产过程的稳定和高效...

    云数据库MongoDB监控指标解读与关注.pdf

    - Asserts指标:包括常规断言数量、消息断言数量、翻转断言数量和用户断言数量。当某个断言值超过2^30时会重置为0重新计数。这些指标通常用于诊断潜在的系统错误和稳定性问题。 - Connections指标:描述当前可用连接...

    ECS-700培训实时监控

    AI信号成员涵盖了信号处理的多个方面,如通信状态、错误标志、报警设定值、滤波时间、小信号切除等,这些都是确保信号质量和系统稳定性的关键参数。 **AO信号操作** 与AI信号类似,AO信号操作也涉及信号的处理状态...

    IT服务监控

    其次,软件服务的监控也不可忽视,比如数据库性能、应用响应时间和错误日志分析。特别是对于"移动"环境,需要关注移动应用的性能、网络连接稳定性和数据同步状态。 故障流程相关文档通常会涵盖以下几个关键部分: ...

    百度智能视频监控产品介绍-20210414.pdf

    至于提供的部分内容,由于OCR扫描文本的限制,部分文字出现错误或漏识别,但整体上可以识别出产品名称为EasyMonitor。 根据这些信息,我们可以挖掘出以下知识点: 1. 安防监控系统的重要性:安防监控系统是现代...

    西门子SIMATIC WinCC基本技术问题4.pdf

    这些文档将提供详细指导,帮助工程师避免常见的配置错误。 在远程控制方面,使用pcAnywhere软件进行远程控制WinCC站时,WinCC站上必须安装pcAnywhere的主机版本。而远程控制的另一台PC站上则需要安装pcAnywhere的...

    大数据平台的自动化运维及监控技术分析.pdf

    常规功能区通常包括管理区、监控区、设备管理区、知识库管理区、第三方平台接入区和信息管理中心。例如,巡察管理区通过填写表格的方式记录数据监控结果和系统维护记录;运维监控区采用可视化技术,通过大数据技术...

    IBM DB2 系统监控指导和参考.pdf

    - **错误发生**:捕捉数据库中出现的错误信息。 - **监控策略**:用户可以定义自己的事件监控策略,指定需要捕捉哪些类型的事件。 - **权限要求**:为了执行事件监控,用户同样需要具有相应的权限。 #### 使用事件...

Global site tag (gtag.js) - Google Analytics