January 25, 2013
分布式TCP压力测试工具 tcpcopy
"tcpcopy是一种应用请求复制(基于tcp的packets)工具,其应用领域较广,我们曾经应用于网易的广告投放系统,urs系统,nginx hmux协议开发等系统,避免了上线带来的很多问题。\n总体说来,tcpcopy主要有如下功能:\n1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug 2)对于后端的短连接,请求丢失率非常低(1/10万),可以应用于热备份 3)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线 4)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验 5)利用多种手段,构造无限在线压力,满足中小网站压力测试要求 6)实战演习(架构师必备)\ntcpcopy可以用于实时和离线回放领域,并且tcpcopy支持mysql协议的复制,开源一年以来,功能上越来越完善。\n如果你对上线没有信心,如果你的单元测试不够充分,如果你对新系统不够有把握,如果你对未来的请求压力无法预测,tcpcopy可以帮助你解决上述难题。 …"
January 25, 2013
git config –global push.default
"参考教程 http://blog.haohtml.com/archives/10093 刚安装的git最新版本,发现有些命令发生了一些变化.\n[web@bogon www]$ git push warning: push.default is unset; its implicit value is changing in Git 2.0 from ‘matching’ to ‘simple’. To squelch this message and maintain the current behavior after the default changes, use:\ngit config –global push.default matching\nTo squelch this message and adopt the new behavior now, use:\ngit config –global push.default simple\nSee ‘git help config’ and search for ‘push.default’ for further …"
January 25, 2013
git remote用法总结
"git remote\ngit remote显示所有的remote(加-v显示详细信息)。 git remote add [shortname] [url]用来添加remote。 git fetch [remote-name]只会pull下来全部的更动,但不会自动merge,但是git pull会自动merge。 git remote show [remote-name]可以看到一个remote的详细信息。 git remote rename old new 用来改变一个remote的名字。 git remote rm [remote-name]删除一个remote。 git remote 不带参数,列出已经存在的远程分支,例如: #git remote origin_apps\ngit remote -v | –verbose 列出详细信息,在每一个名字后面列出其远程url,例如: #git remote -v origin_apps gitolite@scm:apps/Welcome.git (fetch) origin_apps …"
January 17, 2013
如何查看crontab的日志记录
"昨天crontab中的同步任务没有执行,不知道是什么原因没有执行,貌似任务hang住了,想查询一下crontab到底问题出在哪里,或者hang在了什么地方。\n1. linux\n看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察\n2. unix\n在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。\nmail任务 在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。"
January 17, 2013
运行cacti的问题Cannot connect to MySQL server on ‘localhost’.Please make sure you have specified a valid MySQL database name in ‘include/config.php’
"参考以次的教程 http://blog.haohtml.com/archives/9428,在centos安装cacti监控工具,发现在命令行下运行\nphp /var/www/html/cacti/poller.php\n的时候,提示以下错误\nFATAL: Cannot connect to MySQL server on ‘localhost’. Please make sure you have specified a valid MySQL database name in ‘include/config.php’\n而这此配置文件是没有任何问题的,cacti后台访问一切正常的。poller.php是使用/var/lib/mysql/mysql.sock的,\n当我在my.cnf里把mysql.sock定义到/var/lib/mysql/mysql.sock时,poller.php可以连接, 但执行mysql就提示错误了,我把mysql.sock的位置改为/tmp/mysql.sock,使用网上提供解决办法:\nln -s /tmp/mysql.sock …"
January 17, 2013
查看Linux系统 重启日志,登录日志和输入命令的日志
"查看 重启情况\n# last reboot\n——————————————————————————————————————————————–\nreboot system boot 2.6.18-92.el5 Mon Dec 6 12:50 (05:11) reboot system boot 2.6.18-92.el5 Mon Dec 6 10:49 (07:12) reboot system boot 2.6.18-92.el5 Sun Dec 5 18:56 (23:05) reboot system boot 2.6.18-92.el5 Mon Nov 29 09:55 (7+08:06) reboot system boot 2.6.18-92.el5 Sun Nov 28 13:47 (8+04:14) reboot system boot 2.6.18-92.el5 Thu Nov 25 11:59 (11+06:02) reboot system boot 2.6.18-92.el5 Wed Nov 24 10:51 (12+07:10) reboot system …"
January 14, 2013
nginx无法启动: libpcre.so.1/libpcre.so.0: cannot open shared object file解决办法
"NGINX启动时提示错误:\n/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory\nldd $(which /usr/local/nginx/sbin/nginx)\nlinux-vdso.so.1 =\u0026gt; (0x00007fff48ff0000) libcrypt.so.1 =\u0026gt; /lib64/libcrypt.so.1 (0x0000003065800000) libpcre.so.1 =\u0026gt; not found libssl.so.6 =\u0026gt; /lib64/libssl.so.6 (0x0000003067000000) libcrypto.so.6 =\u0026gt; /lib64/libcrypto.so.6 (0x0000003066400000) libdl.so.2 =\u0026gt; …"
December 31, 2012
golang中的函数
"函数是构建Go程序的基础部件;所遇有趣的事情都是在它其中发生的。函数 的定义看起来像这样: Listing 3.1. 函数定义\ntype mytype int 新的类型,参阅第 5 章 0 保留字func用于定义一个函数;\n1 函数可以定义用于特定的类型,这类函数更加通俗的称呼是method。这 部分称作receiver而它是可选的(可参考: http://blog.haohtml.com/archives/13766)。如下图:\n2 funcname是你函数的名字; 3 int类型的变量q作为输入参数。参数用pass-by-value方式传递,意味着它 们会被复制; 4 变量r和s是这个函数的命名返回值。在Go的函数中可以返回多个值。 参阅第32页的“多值返回”。如果不想对返回的参数命名,只需要提供类 型:(int,int)。如果只有一个返回值,可以省略圆括号。如果函数是一 个子过程,并且没有任何返回值,也可以省略这些内容; 5 这是函数体,注意return是一个语句,所以包裹参数的括号是可选的。\n这里有两个例子,左边的函数没有返回值,右边的只是简单的将输入返回。 …"
December 27, 2012
[golang]将函数作为值
"就像其它在Go中的几乎所有的东西,函数也同样是值而已.它们可以像下面这样赋值给变量:\npackage main import \u0026#34;fmt\u0026#34; func main() { f := func() { fmt.Println(\u0026#34;func\u0026#34;) } // 下面才开始调用函数 f() } 结果会打印出 func 字符串。\n另一种用法是立即调用函数,但是要求匿名函数要有返回值才可以,不然会提示错误信息."
December 16, 2012
mysql中alter语句中change和modify的区别
"以下摘自mysql5手册\n您可以使用CHANGE _old_col_name__column_definition_子句对列进行重命名。重命名时,需给定旧的和新的列名称和列当前的类型。例如:要把一个INTEGER列的名称从a变更到b,您需要如下操作:\n· mysql\u0026gt; ALTER TABLE t1 CHANGE a b INTEGER;\n如果您想要更改列的类型而不是名称, CHANGE语法仍然要求旧的和新的列名称,即使旧的和新的列名称是一样的。例如:\nmysql\u0026gt; ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;\n您也可以使用MODIFY来改变列的类型,此时不需要重命名:\nmysql\u0026gt; ALTER TABLE t1 MODIFY b BIGINT NOT NULL;\nmysql alter 语句用法,添加、修改、删除字段等\n//主键549830479\nalter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment …"