[实践Ok]suse enterprise10在安装nc6后,利用shell命令操作Memcached,利用nc来进行路由洗沟测试,对网路连接性进行评估。
背景:为何要用nc,nc比telnet相对有优势一点,可以作探测之用,hack常用工具,特别是有时路由抽风(为嘛抽风?技术中心基础运维的事儿,走专线,路由没配置好,或是专线满了没有人管,于是队列日志一堆一堆的全是失败信息,满了,磁盘也满了,这是业务问题?),北京到XX有两条路由,一条走专线,一条走VPN,我们这里回指的路由是从专线走的,之前你们的服务器应该也是走的专线,可能你们修改了服务器以后,他有时候匹配到了专线的路由,有时候匹配到了VPN的路由,造成丢包,看看你们那边是不是绑定策略能从专线过来?这种问题怎么从应用层来排查到是网路抽风呢?用netcat加循环设置看现象卡不卡了,无其它办法,如基础运维说没问题,我们也就蔫了,呵呵。
——————————————————————————————————————————————————————————
netcat简称:
[root@localhost ~]# type -a nc
nc is /usr/bin/nc
$ nc -w 10 localhost 2389
该连接将在 10 秒后中断。
注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。
一、循环连接多次:
实践如下:
二、有时候设置值设置不进去,设置一下值:
三、一行shell解决设置memcacheq的键值存起来,方便第一里面的循环:
四、保存为shell如,a.sh,循环设置测试:
上面这样得用vi去复制粘贴多行,于是有下面的简单一行实现循环的语句:
来自:http://www.2cto.com/os/201401/272319.html
近来发现nc可以,而用原生的telnet超时卡顿不行,难道它们的协议不一样???还是有防火墙对telnet作了限定?
Add:2014-08-15
printf "set name 0 0 9\r\njackxiang\r\n" | nc 10.78.78.*** 61611
STORED
nc6安装篇:
打开suse enterprise 10的企业版光盘A,到suse/i586/nc6-0.5-13.2.i586.rpm
#rpm -ihv nc6-0.5-13.2.i586.rpm
#rpm -ql nc6-0.5-13.2.i586.rpm
#rpm -ql nc6-0.5-13.2.i586.rpm
bogon:/home/jackxiang # rpm -ql nc6-0.5-13.2
/usr/bin/nc6
/usr/share/doc/packages/nc6
/usr/share/doc/packages/nc6/AUTHORS
/usr/share/doc/packages/nc6/COPYING
/usr/share/doc/packages/nc6/NEWS
/usr/share/doc/packages/nc6/README
/usr/share/doc/packages/nc6/TODO
/usr/share/locale/it/LC_MESSAGES/nc6.mo
/usr/share/man/man1/nc6.1.gz
/usr/bin/nc6
nc6,不叫nc了,当然可以做软连接:ln -s nc6 nc,也可以直接用nc6:
bogon:/home/jackxiang # nc
nc6 ncopy ncplogin ncpmap ncpmount ncpumount
nc6 ncopy ncplogin ncpmap ncpmount ncpumount
NC说完了,下面用nc操作memcache。。。
/usr/local/sinasrv2/bin/memcached -d -m 10 -u root -p 11211 -c 256 -P /tmp/memcached.pid // 启动memcache
redhat rpm:
http://fr.rpmfind.net/linux/rpm2html/search.php?query=nc
首先,需要了解Memcached协议,如果不清楚可参考《Memcached 协议中英文对照》。http://fr.rpmfind.net/linux/rpm2html/search.php?query=nc
1、数据存储(假设key为zhangyan,value为12345)
printf "set zhangyan 0 0 5\r\n12345\r\n" | nc 127.0.0.1 11211
STORED2、数据取回(假设key为zhangyan)
printf "get zhangyan\r\n" | nc 127.0.0.1 11211
VALUE zhangyan 0 512345
END
3、数值增加1(假设key为zhangyan,并且value为正整数)
printf "incr zhangyan 1\r\n" | nc 127.0.0.1 11211
123464、数值减少3(假设key为zhangyan,并且value为正整数)
printf "decr zhangyan 3\r\n" | nc 127.0.0.1 11211
123435、数据删除(假设key为zhangyan)
printf "delete zhangyan\r\n" | nc 127.0.0.1 11211
DELETED清空memcache:
echo "flush_all" | nc localhost 11211
6、查看Memcached状态
printf "stats\r\n" | nc 127.0.0.1 11211
STAT pid 3025STAT uptime 4120500
STAT time 1228021767
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 433.463103
STAT rusage_system 1224.515845
STAT curr_items 1132460
STAT total_items 8980260
STAT bytes 1895325386
STAT curr_connections 252
STAT total_connections 547850
STAT connection_structures 1189
STAT cmd_get 13619685
STAT cmd_set 8980260
STAT get_hits 6851607
STAT get_misses 6768078
STAT evictions 0
STAT bytes_read 160396238246
STAT bytes_written 260080686529
STAT limit_maxbytes 2147483648
STAT threads 1
END
7、模拟top命令,查看Memcached状态:
watch "printf 'stats\r\n' | nc 127.0.0.1 11211"
或者
watch "echo stats | nc 127.0.0.1 11211"
推荐一篇文章:http://www.ooso.net/index.php/archives/444
memcache遭遇out of memory错误: 关于memcache内存分配的介绍, 很适合了解!
[root@slave1 bin]# telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost (127.0.0.1).
Escape character is ‘^]’.
set key1 0 0 2
SERVER_ERROR out of memory
\n的问题:
我是经常使用nc来查看mc的状态的,突然有一天,我使用nc命令做set操作,发现总是失败;用telnet没有问题,至少应该不是memcached的问题,可能是nc的问题吧。
今天又遇到了这个问题,我使用tcpdump观察使用nc和使用telnet的差别,发现nc发送的回车为\n ,而telnet发送的回车符为\r\n,差异就这么多了,于是使用下列命令测试:
echo -e "set a 0 0 1\r\na\r\nquit\r\n"|nc host port
结果成功
echo -e "set a 0 0 1\na\nquit\n"|nc host port
结果失败
比较久可以知道问题是出现在回车符上了,至于memcached是怎么解释的,有时间在了解一下源码吧
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1432/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2022-3-8 16:17
评论列表