July 29, 2011
性能测试工具sysbench简介
"sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。\n下载\n** 编译安装** 默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数\n./configure --prefix=/u01/sysbench \\ --with-mysql-includes=/opt/mysql/include/mysql \\ --with-mysql-libs=/opt/mysql/lib/mysql make \u0026amp;\u0026amp; make install 参数\nNinGoo:/u01/sysbench/bin\u0026gt;$sysbench Missing required command argument. Usage: sysbench …"
July 28, 2011
mongodb中实现自定义自增ID
"PHP代码:\nfunction get_autoincre_id($name, $db){ $update = array(\u0026#39;$inc\u0026#39;=\u0026gt;array(\u0026#34;id\u0026#34;=\u0026gt;1)); $query = array(\u0026#39;table_name\u0026#39; =\u0026gt; $name); $command = array( \u0026#39;findandmodify\u0026#39;=\u0026gt;\u0026#39;autoincre_system\u0026#39;, \u0026#39;update\u0026#39;=\u0026gt;$update, \u0026#39;query\u0026#39;=\u0026gt;$query, \u0026#39;new\u0026#39;=\u0026gt;true, \u0026#39;upsert\u0026#39;=\u0026gt;true ); $id = $db-\u0026gt;command($command); return $id[\u0026#39;value\u0026#39;][\u0026#39;id\u0026#39;]; } 其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值.\n$conn = new Mongo(); $db = …"
July 27, 2011
修改window下dos窗口的编码为utf8
"在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。\n如果想正确显示UTF-8字符,可以按照以下步骤操作:\n1、打开CMD.exe命令行窗口\n2、通过 chcp命令改变代码页,UTF-8的代码页为65001\nchcp 65001\n执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。\n3、修改窗口属性,改变字体\n在命令行标题栏上点击右键,选择”属性”-\u0026gt;”字体”,将字体修改为True Type字体”Lucida Console“,然后点击确定将属性应用到当前窗口。\n这时使用type命令就可以显示UTF-8文本文件的内容了:\ntype filename.txt\n4、通过以上操作并不能完全解决问题,因为显示出来的内容有可能不完全。可以先最小化,然后最大化命令行窗口,文件的内容就完整的显示出来了。"
July 27, 2011
MongoDB的ObjectId
"前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的。\n突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。\n下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个”_id”建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。\n当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key\ndb.t_test.insert({“name”:”cyz”})\ndb.t_test.findOne({“name”:”cyz”})\n{ “_id” : …"
July 27, 2011
服务器出现-由注册表引起的I/O操作发生了不可恢复的错误 的解决方法
"昨天一台服务器的80端口突然不行了,3389虽然通,但连接不上,其它的3306和21端口都正常的.初步怀疑是系统资源不足引起的.第二天让机房检查,最后没有办法重启解决了.\n服务器出现此问题: 很多使用Windows Server 2003系统的用户都会收到如下错误: 事件类型: 错误 事件来源: Application Popup 事件种类: 无 事件 ID: 333 日期: 2007-8-11 事件: 8:48:03 用户: N/A 计算机: LZ_YQ 描述: 由注册表引起的 I/O 操作发生了不可恢复的错误。 注册表将不能读取、写出或刷新包含注册表系统图像的其中一个文件。\n然后系统失去响应,需要重新启动。\n事件ID是333,英文日志为:\nEvent Type: Error Event Source: Application Popup Event Category: None Event ID: 333 Date: date Time: time User: N/A Computer: computer name Description: An I/O operation …"
July 26, 2011
利用taskset有效控制cpu资源
"常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;\n这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;\n查看系统下cpu信息:\n#cat /proc/cpuinfo taskset就可以帮我们完成这项工作,而且操作非常简单;\n该工具系统默认安装,rpm包名util-linux\n#taskset --help taskset (util-linux 2.13-pre7) usage: taskset [options] [mask | cpu-list] [pid | cmd [args...]] set or get the affinity of a process -p, --pid operate on existing given pid -c, --cpu-list display and …"
July 25, 2011
iptables 开放80端口
"iptables -F //清空规则\niptables -A INPUT -p tcp –dport 22 -j ACCEPT /*允许包从22端口进入*/ iptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT /*允许从22端口进入的包返回*/ iptables -A OUTPUT -p udp –dport 53 -j ACCEPT iptables -A INPUT -p udp –sport 53 -j ACCEPT iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /*允许本机访问本机*/ iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp -s 0/0 –dport 80 -j ACCEPT /*允许所有IP访问80端口*/ iptables -A OUTPUT -p tcp –sport 80 -m state …"
July 24, 2011
linux下网站排障分析常用的命令
"系统连接状态篇:\n1.查看TCP连接状态 netstat -nat |awk \u0026#39;{print $6}\u0026#39;|sort|uniq -c|sort -rn netstat -n | awk \u0026#39;/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}\u0026#39; 或 netstat -n | awk \u0026#39;/^tcp/ {++state[$NF]}; END {for(key in state) print key,\u0026#34;t\u0026#34;,state[key]}\u0026#39; netstat -n | awk \u0026#39;/^tcp/ {++arr[$NF]};END {for(k in arr) print k,\u0026#34;t\u0026#34;,arr[k]}\u0026#39; netstat -n |awk \u0026#39;/^tcp/ {print $NF}\u0026#39;|sort|uniq -c|sort -rn netstat -ant | awk \u0026#39;{print $NF}\u0026#39; | grep -v \u0026#39;[a-z]\u0026#39; | …"
July 22, 2011
隐藏 Apache & PHP 的版本号
"有朋友问起,如何隐藏 HTTP header 中发送包含在 Server 信息里面的 Apache 和 PHP 版本号(譬如我们可以到 Firefox 的附加工具里面找 Live HTTP Headers;还可以用curl -I IPaddress|http://域名 ) 下面是做法: Apache: 打开 httpd.conf,在文件最后加入以下代码:\n#Hidden I can with apache version number\nServerTokens ProductOnly\nServerSignature Off\nPHP: 隐藏 PHP 版本就是隐藏类似于 “X-Powered-By: PHP/5.1.2-1+b1” 这个,开启 php.ini,加入:\nexpose_php = Off 设置了expose_php=Off后,用phpinfo查看的时候,页面上原来正常显示的图片会消失隐藏的.\n相关:"
July 22, 2011
squid缓存php动态文件
"acl QUERY urlpath_regex cgi-bin ? no_cache deny QUERY\n这段代码会不cache 所有带 cgi-bin 和 ? 的url path.表面看来,如果url 里面不带?还是可以被缓存的。可惜实际并非如此,squid 会根据header读取httpd的声明信息,例如生成时间等信息;实际上.php的页面不返回 last-modified 信息,因此很难被cache。\n通过增加 php 的last-modified header强制 squid 的cache功能:\nheader(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);\nheader要放在所有.php文件中去。换而言之,就是要\n在 include.php中,构造一个当前时间转换为最近那次5分钟/n分钟划分的时间函数 把这个时间函数的结果返回到 header 在所有页面中调用这个 include 以上方法本人已经测试通过.\n分别是加last-modified前台的日志\n============================\n由 …"