在Windows下使用curl命令

curl 是一般linux发行版中都带有的小工具,利用这个工具可以很方便的下载文件,我一般使用这个工具来查看某个页面相应的HTTP头信息,

例如: curl -I http://www.oschina.net/

在Windows系统中我们也一样可以使用这个工具,如果不需要支持https的话,那直接下载一个可执行文件即可,下载页面 是:http://curl.haxx.se/download.html,这个页面最底部有一个Windows下的下载链接,请选择不带SSL的版本, 否则还需要安装SSL的支持包。我下载的地址是:

http://curl.haxx.se/download.html

解压后直接执行 curl.exe 即可,使用方法跟linux下的完全相同。此命令功能非常强大,又兴趣自己研究一下。 Continue reading

性能测试工具sysbench简介

sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。

下载
http://sourceforge.net/projects/sysbench/

编译安装

默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数

./configure --prefix=/u01/sysbench \
--with-mysql-includes=/opt/mysql/include/mysql \
--with-mysql-libs=/opt/mysql/lib/mysql

make && make install

Continue reading

mongodb中实现自定义自增ID

PHP代码:

function get_autoincre_id($name, $db){
	$update = array('$inc'=>array("id"=>1));
	$query = array('table_name' => $name);
	$command = array(
		'findandmodify'=>'autoincre_system', 'update'=>$update,
		'query'=>$query, 'new'=>true, 'upsert'=>true
	);
	$id = $db->command($command);
	return $id['value']['id'];
}

其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值.

$conn = new Mongo();
$db = $conn->cms;

news_max_id = get_autoincre_id('tbl_news'); //从1开始

soft_max_id = get_autoincre_id('tbl_soft'); //从1开始

现在就可以直接在写入新记录的时候使用这个id值了.

其具体实现方式主要是利用MongoDB中findAndModify命令,

修改window下dos窗口的编码为utf8

在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。

如果想正确显示UTF-8字符,可以按照以下步骤操作:

1、打开CMD.exe命令行窗口

2、通过 chcp命令改变代码页,UTF-8的代码页为65001

chcp 65001 

执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。  Continue reading

MongoDB的ObjectId

前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的。

突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。
下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个"_id"建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。
当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key

> db.t_test.insert({"name":"cyz"})
> db.t_test.findOne({"name":"cyz"})
{ "_id" : ObjectId("4df2dcec2cdcd20936a8b817"), "name" : "cyz" }
可以发现这里多出一个Objectid类型的_id,当然了,这个_id是系统默认生成的,你也可以为其指定一个值,不过在同一collections中该值必须是唯一的 Continue reading

服务器出现-由注册表引起的I/O操作发生了不可恢复的错误 的解决方法

昨天一台服务器的80端口突然不行了,3389虽然通,但连接不上,其它的3306和21端口都正常的.初步怀疑是系统资源不足引起的.第二天让机房检查,最后没有办法重启解决了.

服务器出现此问题:
很多使用Windows Server 2003系统的用户都会收到如下错误:
事件类型: 错误
事件来源: Application Popup
事件种类: 无
事件 ID: 333
日期: 2007-8-11
事件: 8:48:03
用户: N/A
计算机: LZ_YQ
描述:
由注册表引起的 I/O 操作发生了不可恢复的错误。 注册表将不能读取、写出或刷新包含注册表系统图像的其中一个文件。

然后系统失去响应,需要重新启动。

事件ID是333,英文日志为:

Event 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 initiated by the Registry failed unrecoverably. The Registry could not read in, or write out, or flush, one of the files that contain the system's image of the Registry.

该错误原因是:在非分页内存或在分页的池内存不足暂时可能会出现此问题。 系统保留录制类事件,直到重新启动计算机时或相关的配置单元是卸载,即使在临时内存 insufficiency 停止。

请参看如下kb,由于该补丁处于测试阶段,因此需要通过邮件下载对应补丁:
http://support.microsoft.com/kb/970054

利用taskset有效控制cpu资源

常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;

这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;

查看系统下cpu信息:

#cat /proc/cpuinfo

taskset就可以帮我们完成这项工作,而且操作非常简单;

该工具系统默认安装,rpm包名util-linux Continue reading

[Squid] 分享squid缓存服务器配置

分享下自己测试squid缓存节点配置文件,如果有不足之处请大家多提意见。
测试的版本已经完全支持http/1.1

squid版本:
Squid Cache: Version 3.1.5

http_port 80 vhost                     #squid监听端口,vhost表示根据请求主机头来转发到后端WEB机器
http_port 8080 vhost vport             #vport 虚拟主机的支持
icp_port 0                             #提供从相邻的squid查询端口,如果不提供该服务,可一将端口改为0
unique_hostname host100                 #防止cache主机名冲突
dns_nameservers 192.168.1.100        #指定内部DNS服务器

cache_replacement_policy heap LFUDA  #控制了squid的磁盘cache的置换策略(例如响应时间,命中率,字节命中率等),一般分为三类,我们只用了LFUDA
memory_replacement_policy heap LFUDA #原理同上

cache_dir aufs /data/cache/cache1 40960 16 256 max-size=204800    指定cache在硬盘上存放的路径,最大存储40G,16个一级目录,256个二级目录,如果不缓存任何文件可以指定 Continue reading