发布新日志

  • tcpcopy,模拟在线压力测试的好帮手

    msnshow 发布于 2013-12-07 14:13:45

        主要信息来自:http://code.google.com/p/tcpcopy/

         tcpcopy是一个基于底层的应用请求复制(所有基于tcp的packets)开源项目,可用于替代ab做在线模拟压力测试,可转发各种在线请求到测试服务器上,进行较为详尽的近乎实际的测试,从而避免了新业务、系统上线带来的潜在问题。

         tcpcopy的四大功能:

         1)分布式压力测试,将多个前段请求集中到某个后端进行压力测试

         2)上线前测试,检验新系统可靠性,提前发现潜在问题

         3)对比测试,同样请求,针对不同或不同版本程序,可以做性能对比等试验

         4)应用热备份,对于后端的短连接,请求丢失率非常低(1/10万)

         tcpcopy具有以下几个特点:

         1)实时转发

         2)近乎真实效果

         3)对在线系统影响很小

         4)操作简单

         5)分布式

         6)意义非凡

         使用tcpcopy非常简单,下载源码,编译,按照说明,几个步骤很快就能使用。

         关于tcpcopy使用的一些注意事项有:

         1)Linux平台,内核2.6+

         2)TCPCOPY类似于UDP,所以会丢包,进而丢失请求

         3)本系统不支持域名,只支持ip地址

         4)Local Requests,请设置lo MTU不超过1500,并且在配置文件中不要设置127.0.0.1地址,

         要设置内网或者外网地址

         5)TCPCOPY server有可能会成为性能瓶颈

         6)丢失请求率跟网络状况有关,最好在内网内复制请求

         7)TCPCOPY中的tcpcopy和interception程序运行需要root权限

         8)TCPCOPY只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。

         例如:mysql连接协议,由于权限认证与tcp层上面的mysql协议有关,所以复制过去的请求会被目

         标测试服务器认为非法请求,这个时候需要针对mysql协议作具体针对性的处理,tcpcopy程序才能正常运行

         9)程序更新非常快,所以最新版本在svn上面

         svn checkout http://tcpcopy.googlecode.com/svn/trunk/ tcpcopy

         10)目前追求的是功能,性能优化和代码重构会在稳定以后进行

         11)长response目前支持不是很好,将在下一个版本改进

         12)如果有问题,请注意error.log文件提示的错误信息 (email: 163.beijing@gmail.com)

         13)源代码已经转到github

         除了这些,下面是我在用tcpcopy测试mysql时的一些小结:

         1) 测试MySQL时,测试机需要开启 skip-grant-tables,否则无法正常进行,因为MySQL需要进行认证;在线服务器无需调整

         2) 测试过程中不能执行flush privileges,否则上述选项会失效

         3) 每次启用tcpcopy时,都需要重启mysqld,不能在线直接应用,否则不能转发包(最新版本已经解决这个问题)

         4) 用sysbench进行测试过程中,prepare时,在线服务器能创建测试表,测试机无法创建新表

         5) 需适当调大内核参数:ip_queue_maxlen,否则会出现大量的queue dropped

         6) 无法完全保证在线服务器和测试机的数据一致性,只能做为模拟线上压力,提前进行bug测试等用途

  • 交互式shell和非交互式shell、登录shell和非登录shell的区别

    smile665 发布于 2010-07-09 00:20:40

    本文的最新版本见:
    http://smilejay.com/2012/10/interactive-shell-login-shell/


    也算写过一些Bash脚本的人了,不过对与这几个概念,还不是很清楚,于是恶补了一下。
    交互 式shell和非交互式shell、登录shell和非登录shell的区别。
    首先,这是两个不同的维度来划分的,一个是是否交互式,另 一个是是否登录。
    交互式shell和非交互式shell
    交互式模式就是shell等待你的输入, 并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签 退后,shell也终止了。
    shell也可以运行在另外一种模式:非交互式模式,shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

    chinaunix 论坛中关于登录shell与非登录shell、交互式shell与非交互式Shell的讨论:
    Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录外壳;
    Interactive Shell:接下来你得到了一个像root@host />这样的提示符,你输入什么,它就解释出什么,这就是交互式外壳;你在当前Shell又fork了一个shell(bash),这个bash也是 交互式外壳。通常情况下interactive shell是login shell派生出来的。
    Non Interactive Shell:你可能需要学习写一个bash script,用外部shell执行:bash  script.sh,它(bash)从第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是 非交互式外壳。
    交互式非登录shell就是指你在Gnome图形界面中打开“终端”出来的那种窗口程序,
    和登录shell 相比,它是“非登录”的,你并不需要输入用户名和密码,
    和非交互式shell相比,这是“交互式”的,就像你说的那它:你输入什么,它就解释出什么

    执行exit退出非登录shell状 态;
    执行logout退出登录shell状态。


    在登录shell里,确实只读取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了;
    在非登录shell里,确实只读取 /etc/bash.bashrc和~/.bashrc

    参考资料:
    http://www.learndiary.com/home/space-1-do-blog-id-3780.html
    http://blog.csdn.net/jiankun_wang/archive/2009/07/02/4317407.aspx
    http://xjwb.com.cn/onews.asp?id=261
    http://linux.chinaunix.net/bbs/viewthread.php?tid=1044225
Open Toolbar