查看、分析memcached使用状态
访问量上升,数据库压力大,怎么办?好办法是在中间挡一层缓存!这个缓存要求高效,不能比数据库慢,否则服务质量受影响;如果能把数据用hash打散存储到硬盘,也是可以的,不过在内存越来越便宜的今天,还是使用内存吧!
mysql也有自己的缓存,也是存储在内存的,但是有一个说法是:
以下是引用片段: 只能有一个实例 只要有写操作,mysql的query cache就失效 |
再说,如果mysql都抗不住了,怎么还能指望它提供的缓存呢?
所以我可以使用memcached了!他的好处和如何用可以参考:
以下是引用片段:
1:《Memcache和mysql交互流程操作原理》 2:《让memcached和mysql更好的工作》 |
开发时面对需求是个麻烦事,更漫长而闹心的是维护,所以我更关心的是memcached运行中的情况。还好的是,memcached的作者给我们提供查看运行情况的命令。主要是“stats”,使用方法为 “telnet ip 端口号”,登录后使用“stats”命令。
然后你可以看见很多内容,具体可以参考:《memcacche stats》
以下是引用片段: pid = process id |
着重说一下几个对观测很有用的项。
limit_maxbytes、bytes
memcached在存储的时候是可以设置失效时间的,但如果存储已经满了,那旧数据即使没有到过期时间,也会被移除。所以需要观察memcached存储是否已经满了,同时这对扩容也是有意义的参考。limit_maxbytes即总的存储大小,而bytes就是已经使用的大小,从这两个数据就可以看出在memcached启动时,我们为它分配的内存是否足够使用。
cmd_get、cmd_set
memcached启动后,我们对它一共做了多少次读取操作呢?从这两个参数可以观察出来。
get_hits、get_misses
使用memcached后,我们需要评估我们使用的策略是否合理。不能够使用中间缓存后,后端的数据库还是有较大的访问量,这样的话中间缓存就变得没有意义了。get_hits表示命中了多少次读取,即来memcached取到了多少有效数据;get_misses表示没有命中的次数,即此次来取数据的时候,memcached并没有你所查询的数据。如果没有清零统计数据的话,cmd_get = get_hits + get_misses。
memcached 的状态查询还有其它的命令,可以参考:《Memcached的stats命令》
如下:
stats reset
清空统计数据
stats malloc
显示内存分配数据
stats maps
这个不太确定,看源代码是把/proc/self/maps的数据显示出来。
stats cachedump slab_id limit_num
显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本显示的是 访问时间(timestamp)
1.2.4以上版本,包括1.2.4显示 过期时间(timestamp)
如果是永不过期的key,expire_time会显示为服务器启动的时间
stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]
stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)
stats detail [on|off|dump]
设置或者显示详细操作记录
参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)
stats detail dump
PREFIX copy_test2 get 1 hit 1 set 0 del 0
PREFIX copy_test1 get 1 hit 1 set 0 del 0
PREFIX cpy get 1 hit 0 set 0 del 0
memcached数据存储和取回相关的基本命令只有4条。
下面将采用telnet与memcached进行交互,并介绍这4条基本命令。
假设memcached服务器在本机上,并监听在默认端口11211上。
telnet连接到memcached:
telnet 127.0.0.1 11211
SET:添加一个新的条目到memcached,或是用新的数据替换掉已存在的条目
set test1 0 0 10
testing001
STORED
ADD:仅当key不存在的情况下存储数据。如果一个key已经存在,将得到NOT_STORED的响应
add test1 0 0 10
testing002
NOT_STORED
add test2 0 0 10
testing002
STORED
REPLACE:仅当key已经存在的情况下存储数据。如果一个key不存在,将得到NOT_STORED的响应
replace test1 0 0 10
testing003
STORED
replace test3 0 0 10
testing003
NOT_STORED
GET:从memcached中返回数据。从缓存中返回数据时,将在第一行得到key的名字,flag的值和返回的value的长度。真正的数据在第二行,最后返回END。如果key并不存在,那么在第一行就直接返回END。
get test1
VALUE test1 0 10
testing003
END
get test4
END
get test1 test2
VALUE test1 0 10
testing003
END
注:像上面那样你可以在一个请求中包含多个由空格分开的key。当请求多个key时,将只会得到那些有存储数据的key的响应。memcached将不会响应没有存储Data的key。
###################################################################
1、启动Memcache 常用参数
memcached 1.4.3
-p <num> 设置端口号(默认不设置为: 11211)
-U <num> UDP监听端口 (默认: 11211, 0 时关闭)
-l <ip_addr> 绑定地址 (默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d 独立进程运行
-u <username> 绑定使用指定用于运行进程 <username>
-m <num> 允许最大内存用量,单位M (默认: 64 MB)
-P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与 -d 一起使用
如:
在linux下:./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121
在window下:d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500
在windows下注册为服务后运行:
sc.exe create jb-Memcached binpath= “d:\App_Serv\memcached\memcached.exe -d RunService -p 11211 -m 500″ start= auto
net start jb-Memcached
2、连接:telnet 127.0.0.1 11211
不要说不会用这个?
3、写入memcache
<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
a) <command name> 可以是”set”, “add”, “replace”。
“set”表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖。
“add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败。
“replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败
b) <key> 客户端需要保存数据的key。
c) <flags> 是一个16位的无符号的整数(以十进制的方式表示)。
该标志将和需要存储的数据一起存储,并在客户端get数据时返回。
客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。
d) <exptime> 过期的时间。
若为0表示存储的数据永远不过时(但可被服务器算法:LRU 等替换)。
如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。
e) <bytes> 需要存储的字节数(不包含最后的”\r\n”),当用户希望存储空数据时,<bytes>可以为0
f) 最后客户端需要加上”\r\n”作为”命令头”的结束标志。
<data block>\r\n
紧接着”命令头”结束之后就要发送数据块(即希望存储的数据内容),最后加上”\r\n”作为此次通讯的结束。
结果响应:reply
当以上数据发送结束之后,服务器将返回一个应答。可能有如下的情况:
a) “STORED\r\n”:表示存储成功
b) “NOT_STORED\r\n” : 表示存储失败,但是该失败不是由于错误。
通常这是由于”add”或者”replace”命令本身的要求所引起的,或者该项在删除队列之中。
如: set key 33 0 4\r\n
ffff\r\n
4、获取/检查KeyValue
get <key>*\r\n
a) <key>* 表示一个或者多个key(以空格分开)
b) “\r\n” 命令头的结束
结果响应:reply
服务器端将返回0个或者多个的数据项。每个数据项都是由一个文本行和一个数据块组成。当所有的数据项都接收完毕将收到”END\r\n”
每一项的数据结构:
VALUE <key> <flags> <bytes>\r\n
<data block>\r\n
a) <key> 希望得到存储数据的key
b) <falg> 发送set命令时设置的标志项
c) <bytes> 发送数据块的长度(不包含”\r\n”)
d) “\r\n” 文本行的结束标志
e) <data block> 希望接收的数据项。
f) “\r\n” 接收一个数据项的结束标志。
如果有些key出现在get命令行中但是没有返回相应的数据,这意味着服务器中不存在这些项,这些项过时了,或者被删除了
如:get aa
VALUE aa 33 4
ffff
END
5、删除KeyValue:
delete <key> <time>\r\n
a) <key> 需要被删除数据的key
b) <time> 客户端希望服务器将该数据删除的时间(unix时间或者从现在开始的秒数)
c) “\r\n” 命令头的结束
6、检查Memcache服务器状态:
stats\r\n
在这里可以看到memcache的获取次数,当前连接数,写入次数,已经命中率等;
pid : 进程id
uptime :总的运行时间,秒数
time : 当前时间
version : 版本号
……
curr_items : 当前缓存中的KeyValue数量
total_items : 曾经总共经过缓存的KeyValue数量
bytes : 所有的缓存使用的内存量
curr_connections 当前连接数
….
cmd_get : 总获取次数
cmd_set : 总的写入次数
get_hits : 总的命中次数
miss_hits : 获取失败次数
…..
bytes_read : 总共读取的流量字节数
bytes_written : 总的写入流量字节
limit_maxbytes : 最大允许使用的内存量,字节
7、高级缓存细节查看方法:
stats reset
清空统计数据
stats malloc
显示内存分配数据
stats cachedump slab_id limit_num
显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本显示的是 访问时间(timestamp)
1.2.4以上版本,包括1.2.4显示 过期时间(timestamp)
如果是永不过期的key,expire_time会显示为服务器启动的时间
stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]
stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)
stats detail [on|off|dump]
设置或者显示详细操作记录
参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)
8、清空所有键值
flush_all
注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。
8、退出
quit\r\n
查看、分析memcached使用状态相关推荐
- ss流量查询 php,Linux_Linux怎么使用ss命令查看系统的socket状态, Linux系统中,ss命令可用于 - phpStudy...
Linux怎么使用ss命令查看系统的socket状态 Linux系统中,ss命令可用于查看系统的socket的状态,而socket作为系统的进程通信机制,了解其状态是很有必要的,下面小编就给大家介绍下 ...
- 华为OSPF抓包分析七种状态
前言: OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(Auto ...
- 使用 smartmontools 查看硬盘的健康状态
使用 smartmontools 查看硬盘的健康状态 要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了.诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬 ...
- linux如何看udpsocket状态,Linux如何使用ss命令查看系统的socket状态
Linux如何使用ss命令查看系统的socket状态 发布时间:2021-05-08 10:34:54 来源:亿速云 阅读:99 作者:小新 小编给大家分享一下Linux如何使用ss命令查看系统的so ...
- rsyslog概要以及源码安装mysql,rsyslog输出到Mysql基于loganalyzer查看分析
Rsyslog:syslog的加强版本 日志对于系统中程序和服务的运行起着很大的作用,我们经常需要去看日志记录来查看各种信息,有用户登录信息,有网页访问信息,有系统故障信息,等等.. 日志通常有日志级 ...
- mysql查看历史连接数_MySQL如何查看连接数和连接状态
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准 ...
- 查看tcp各个连接状态的数量
4. 查看tcp各个连接状态的数量下面对的 netstat -tan|awk '$1~/tcp/{aa[$NF]++}END{for (h in aa)print h,aa[h]}' SYN_SENT ...
- 查看mysql数据库服务_MySQL数据库之mysql5.7基础 查看mysql的服务状态
本文主要向大家介绍了MySQL数据库之mysql5.7基础 查看mysql的服务状态 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Operating System:Ubunt ...
- 查看TCP进程各状态连接数 IP封掉 的两个脚本
)结合/var/log/secure文件,将ssh登陆失败次数大于N的IP封掉 1 2 3 4 5 6 N=3 SEC_FILE=/var/log/secure for ip in `grep &qu ...
最新文章
- HandlerThread 类的学习(转载)
- Pytorch预训练模型下载并加载(以VGG为例)自定义路径
- case study
- table { border-collapse:collapse; }
- 用 GetEnvironmentVariable 获取常用系统环境变量
- SpringBoot 整合 Spring Cloud Alibaba Nacos 连通性+负载均衡
- 关于Request.ServerVariables(HTTP_REFERER)
- TurnipBit开发板DIY呼吸的吃豆人教程实例
- Python 处理各种编码的字符串
- atitit.js 各版本 and 新特性跟浏览器支持报告
- 高等数学(同济第七版上)课后习题及解答
- java pdf 加图片_java实现在pdf模板的指定位置插入图片
- 2019年最新版,百度云不限速下载工具,亲测好用!
- 前端生成pdf的js库-pdfmake.js的简单使用
- vue3.0 + xlsx 实现纯前端生成excel表格
- 【Linux】两个故事带你使用git命令行
- 建筑图纸设计加密软件在规划设计行业的应用价值
- FPS游戏自动瞄准敌人头部?是如何实现的(三)准星算法与实现自动瞄准
- 20180908考试
- 新华三硬件工程师校招一面面经
热门文章
- SAP QM 执行事务代码QA11 报错- Selected set code does not exist, or data entered is incomplete-
- SAP MM 采购价格里的阶梯价格
- GAN、云原生、分布式系统、自动驾驶…哪些技术撑起今年618?
- 47%德国企业认为人工智能较大的优势是提高生产效率
- 如何使用人工智能发展业务并创造企业价值
- Python中的*args和**kwargs是什么?该如何使用?
- 爬取30亿人脸被600家执法机构使用,这家公司揭美国数据隐私老底
- 人工智能热门技术研究课题
- 2018年中国城市用电量30强
- 风之语.甲骨文裁员之我见