2010 年 03 月

浏览模式: 标准 | 列表 | 图文
浪驰短信接口的实现

浪驰短信接口的实现

浪驰短信是一家短信应用的提供商,提供了一些WEB调用的接口,为了让短信能够加到队列里,我用PHP重新实现了一遍(其实是因为他们没有提供WEB查看的页面,否则还真不需要实现)

注意事项:浪驰的接口必须要在同一个进程里发送和接收短信。否则会失败的。为此我写了三次接口类

第一次采用了snoopy,因为他们建议使用POST发送数据,所以我偷懒就用了snoopy,但只能获取得activeId,却无法进行下一步操作

第二次我直接采用file_get_contents,我没有用Stream流来POST数据,而是用了GET方式(GET方式也支持的),但于第一次一样,只能获取activeId,无法进行下一步操作。

然后我用浏览器打开相应的地址一步步的查看,发现他有一个cookie是每次种入的,于是怀疑他的ActiveID还需要配合cookie才行。于是尝试直接Setcookie,然后再发送。但发现手工种的cookie好象不行。于是

第三次,我用curl,并指定cookie文件,最后终于成功了。感谢curl,可以支持带COOKIE的数据发送。

代码不贴了,涉及公司的代码。再者,纯粹的代码也不能用。。因为我还用mysql实现了一个简单的队列,以及成功记录,错误记录。。。

好象听说目前不能接受回复了。真郁闷。。。

Launchy 2.5 beta 2

Launchy 2.5 beta 2

Launchy是我装机后的必备软件之一,有了他,快速启动栏我已经直接从任务栏上去除。有了他,一些深藏着的软件也可以被我定义成快捷键使用。官方用来这么介绍:Launchy 是一款跨平台的免费开源的快速启动工具.Launchy 是一款跨平台的免费开源的快速启动工具。使用它只需要简单的敲出文件名,就可以快速的启动应用程序、打开文档、播放视频。在windows下它是替换"运 行"命令的不错选择。 Launchy 早先版本支持windows和linux操作系统。在最新的beta 2中,Launchy已提供了对OS X的支持。

如果这次升级仅仅是对OS x的支持,那大可不必下载它,毕竟现在for windows的版本已经很成熟了【唯一不舒服的是,不能够把自定义的快捷键导出来,所以每次重装的时候,对于不在系统盘里的软件,还需要重定义一次】

我自己是定义成alt+space呼出菜单。确实很爽。
在cnbeta上有两个评论:

Launchy+Everything
Launchy能传递参数,而且可以选择性索引,只拿来索引Exe和lnk,作为程序启动器无出其右。
剩下交给Everything。
everything只根据执行频率排序。索引速度无敌,查找不错。但是平时用的启动器的话,手速上完全不是Launchy的对手。
字串匹配和优先级这方面,launchy是我用过最舒服的

灰常同意这两位的观点。。下载地址为:Launchy 2.5 beta 2

潜规则:公司招聘中不能说的秘密

潜规则:公司招聘中不能说的秘密

这是来自豆瓣的文章,看看还是挺有用的,在漫长的工作生涯中,总会去应聘各种各样的职位,因此,了解这些所谓的潜规则,对于自己投递简历等,还是会有点用处的。

以下是原文,来自于:http://www.douban.com/group/topic/9996403/,

  你是否试过狂轰乱炸地在网上发简历,而回应者却寥寥无几?难道真的是人才饱和了吗?或者是你不够优秀,企业在第一时间就把你给枪毙了呢?这里,会告诉你一些企业人才招聘环节中一些不为外人知道的秘密,了解了这些秘密,应该可以让你以后的应聘变得更加有成效!  现在中国所有招聘网站都是以人事经理为中心,因为他们是给钱的一方,较少从求职者角度考虑,如果我们从求职者立场或者中立立场来看中国招聘网站的生意模式及运作流程,将这个求职者并不知晓的事情公布出来,你就会更好清醒认识招聘网站,也更好的实际的利用人才网站求职:

一、人才网站与企业人事经理的生意模式对求职者影响:
人才网站的行规是企业人事经理支付600元,可以在一个月内发布一定的职位让求职者投递简历,可以搜索查看人才网站简历库的简历,还可以下载一定数量的简历主动与求职者联系。而大企业及知名公司一般都是购买1年的招聘服务。问题就出来了:如果这个职位1到2周企业招到人了,但他购买的是1个月的服务,所以企业的职位还是挂在网上,而且人才网站竞争激烈,一般都会赠送1个月服务。所以一般职位至少1个月挂在人才网站是无效的,是浪费求职者查看与投递简历时间的。

大公司最不可靠,他们利用网络、报纸、现场等多种方式,而1年的大大banner永远挂在人才网站上,他们并不需要人,只是为了广告宣传。

所以人才网站50%以上的职位都是过期的、无效的、不招人或招满人的,所有求职者抱怨我投了那么多简历为什么反馈率那么低,反馈率低是非常正常的。

另外51job网站的反馈率是最低的,这也是行业秘密:因为51Job的资源80%是以报纸招聘为主,报纸招聘效率高,但网站上的职位都是在报纸上刊登过后作为免费与补充服务,所以很多HR只会看报纸上来的简历,网站来的简历基本不看,在加上51job简历投递量实在太大,那些懒惰的HR才懒得一封一封的看,只会用搜索关键字来看,如本科+3年工作经验+主管等,其他不符合条件的看都不看一眼。所以你知道为什么一直没有公司找你面试,不是你不行,而是HR都不看你发的简历。下面第二部分告诉你如何被他们搜索到。

现在你知道网络招聘的反馈率为什么那么低了吧。不信你用自动回复邮件形式发送中国3大招聘网站职位HR的邮箱,看看有多少HR看了你的简历,一个工作论坛的网友说,他试着发了100个HR邮箱简历,可以通过自动回复的反馈率统计,可以看到50%HR不看简历就直接删除,30%根本就不打开邮件,只有20%打开邮箱,还有10%可能已经找到人的。他的分析说即使是中国前3名招聘网站以严格标准来看也只有10%职位是真正要急迫招人的。

二、既然知道一些潜规则,那我们也迎合一些这些规则,告诉你一些网络求职的小秘密

(1)采用行业招聘网站求职。因为行业招聘网站是按行业发布职位信息的,所以专业和工作经历比较对口。比如你要找物业管理类的工作,你到万行工作网www.114job.com.cn的物业管理招聘频道上去注册简历就比较好,因为那里全部都是物业管理类的企业在招聘;如果你要找外贸的工作,你就可以万行工作网的外贸招聘频道去找,肯定有大量的外贸工作机会。其它的就不在列举。在目前的情况下,几乎每个行业的人才在万行工作网上都能找到自己的频道。

(2)简历要与大公司沾边
当人事经理搜索招聘网站简历库简历时,一般会以关键字“知名企业名称+职位名称”,比如消费品行业可能喜欢可口可乐及宝洁的人,人事经理会这样搜索,例如:“可口可乐+销售经理”,系统会搜索到简历中出现以上关键字的求职者,如果你的简历里出现知名企业名称的字样,就可以被搜索到,例如:“我在xx矿泉水公司工作,成功地令竞争对手——可口可乐旗下的天与地矿泉水在当地的市场份额减少……”:“我在可口可乐的广州白云区经销商工作”等。又提高了人事经理浏览简历的机会!

(3)经常刷新简历
当人事经理搜索简历库的简历时,符合条件的简历是按刷新的时间顺序排列,而一般只会看前面一两页。很多求职者其实并不知道刷新简历可以获得更多求职机会。因此每次登陆,最好都刷新简历,刷新以后,就能排在前面,更容易被人事经理找到!
(4)不要只应聘最近三天的职位

一般求职者认为刚刚发布的最新的招聘信息肯定是成功率最大的,其实不然。因为很多企业人事经理没有及时的登陆刷新刊登的职位,所以求职者在搜索职位时刚刷新的职位会排在前面,这些职位应聘的人多,竞争大,相反,一些职位已经是半个月甚至两个月的,应聘的人少,成功率反而高。

(5)让你的邮件永远在最前面
你要知道每天人事经理看求职者邮箱,他们其实是很懒的,100多页简历邮件他们最多只看前5页!你现在应该知道为什么你的求职简历永远没有回应!

所以发邮件到企业指定的邮箱时,怎样才能让你的邮件永远排在最前面,让人事经理每次打开邮箱都首先看到你的邮件?只要在发邮件前,把电脑系统的日期改为一个将来的日期,如2008年,因为大多邮箱都是默认把邮件按日期排序,所以你的邮件起码要到2008年以后才会被排在后面!(如果你求职成功,要向我请客耶!)

(6)新颖的邮件标题
人事经理每天收到大量的求职电子邮件,求职者一般会按企业要求把邮件题目写成:应聘xx职位,怎样才能吸引人事经理的眼球,让他先打开自己的邮件?可以在邮件题目上做文章。一天人事经理收到几百封邮件,只有标题新颖的才有机会被打开。

例子:我的一个女性朋友发了100多封邮件求职都没有任何反应,因为应聘做文员的太多了,而我这个朋友做过空姐,我将她的邮件标题改为“空姐来广州找工作”,引起绝大部分男人事经理想入非非,结果三天之内有30多个男人事经理通知面试,3个月找不到工作的她而变成3天找到上十份工作。你现在知道邮件标题的重要性了吧。

(7)简历最好放靓照
对于人事经理来说,每天需要浏览大量简历,如果同等的条件,一般会先通知有照片的求职者来面试,因为通过照片,人事经理对应聘者又多了几分了解。如果是美女,被通知的可能性就更大。我作为人事经理,曾经招聘一个人事主管,收到300多封简历,我找出前30份有相片的前5份,通知了最漂亮相片的2个女孩,就定下了其中的一个。对于一般职位如文职人员之类,中国人的传统还是以貌取人,你即使不漂亮,也照一个艺术照,就增多了面试机会(与其等死,还不如放手一搏),毕竟很现实的是,简历的目的就是有面试的机会,其他就要靠实力与运气了。

(8)求职信“骂”对方公司往往会带来意想不到的效果
一般人认为在求职信中称赞对方公司会引起好感,其实不然。如果先指出这家公司的缺点,往往会引起关注,语不惊人死不休呢,我作为人事经理,我只会对指出我们缺点的求职者有好感,对恭维我们公司的求职者一般会放在一边。即使你不知道对方公司缺点,你随便写一些永远不会错的:“我认为贵司创新不够,市场表现过于常规化;我以消费者心态观察贵司,发现贵司客户服务还有许多待改进的地方;我发现贵司品牌形象还有可能做的更好……”如闻其详,可面谈。可勾引相关公司面试。只要有面试机会,其他再说。(简历有机会面试目的是一切,手段是无所谓的)。

(9)自己要学会让简历与职位匹配
2个观念都是有效的:一是不要太在乎对方职位要求的描述,很多职位描述只是写写,连经理都不知道要招什么样的人,如果你看到对方职位要求本科,你是专科就不敢投递简历,那就失去机会了。如果你看到对方要求有5年经验,你只有3年经验,你也不敢投,那完全没有必要。因为人事经理们对职位的描述只是例行公事随便写写而已,你千万不要当真!

另外一个匹配观念就是他的职位如何描述,你就改变你的简历换一个说法匹配,如他说要求领导能力强,你的简历也说具有领导才能,他要沟通能力一流,你的简历也说我最擅长沟通。你的简历表面匹配度最高,也可以多增加机会。你可将简历改成为他职位描述完全量身定做的简历。

其实求职者有更多的面试机会,不但可以增加成功求职机会,还可以增加自己的信心,工资越叫越高还可以积累面试经验。很多优秀的求职者网上发了很多简历没有回应,以为自己不行没有竞争力,只好自动降价,实为可惜!特别是中国最大的招聘网站51job的简历投递反馈率是同行业最低的,因为它主要资源80%投入报纸,报纸招聘完甚至录取完毕后将职位入库,只是将职位作为一个摆设放到网站。

要知道现在网络求职的成功率一般2个月是发1000份简历,有8份面试,2份成功,一个是你不想去的,另一个可能是你相对满意的。所以网络求职的朋友千万不要对自己失去信心。

博客放上了全站广告

博客放上了全站广告

我在博客上预留的三个广告位,目前却放了一个不在广告位上的广告。
这三个广告位是什么呢?在这里有详细介绍:http://www.neatstudio.com/show-142-1.shtml

主要是这三处:
1、BANNER
2、文章内页右侧
3、文章内页,文章结束的地方:目前是alimama的广告。。。

目前我在导航条下放了一个较大的广告,是个flash的。(还是flash容易控制宽高,而且变形不明显,HOHO),正好也算是38节(三八节),链接地址为:http://www.bestjia.com/special/women/

首页的左侧,也有我出售给Textlink的四个链接。每个链接因为我的PR高的关系,也有4刀一个月,如果PR高的网站,不妨可以尝试一下,PR3左右的就不要试了,PR3左右的网站好象很难卖得出链接。。。4以上的会好一点,点击 购买文字链。

在 Ubuntu 9.10 Server 上安装 Nginx 0.8.34

在 Ubuntu 9.10 Server 上安装 Nginx 0.8.34

本文的内容对我来说或许可以有用,因为我的VPS用的就是9.10,用默认的apache好象效率并不高,所以。。。真的可以参考一下。

Nginx 在 3 月 3 日放出了 0.8.34 这个开发版。张宴也随即更新了《Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器》 到第六版。不过,他写的记录是针对 CentOS、Redhat 等 rpm 包管理的服务器。由于习惯了 debian 系列的服务器,特别是用惯了 ubuntu 服务器,在这里特别做一下 Ubuntu 9.10 下的安装笔记。其他基于 deb 包管理的发行版也类似。

首先,为了编译 Nginx,应在新装好的 Ubuntu server 环境下安装如下软件包:

sudo apt-get install build-essential libpcre3-dev libssl-dev libxslt-dev libgd2-xpm-dev libgeoip-dev

然后下载 0.8.34 版本的 Nginx:

wget http://www.nginx.org/download/nginx-0.8.34.tar.gz

解压:

tar xvzf nginx-0.8.34.tar.gz

下载 upstream fair 模块。upstream fair 是比内建的负载均衡更加智能的负载均衡模块。它采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。

wget http://github.com/gnosek/nginx-upstream-fair/tarball/master

解压:

tar xvzf gnosek-nginx-upstream-fair-2131c73.tar.gz

然后进入 nginx 源码目录执行 configure 配置编译选项。下面是我所使用的配置:


./configure --conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-debug \
--with-http_stub_status_module \
--with-http_flv_module \
--with-http_ssl_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-mail \
--with-mail_ssl_module \
--with-ipv6 \
--with-http_realip_module \
--with-http_geoip_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-sha1=/usr/include/openssl \
--with-md5=/usr/include/openssl \
--add-module=/home/mikespook/gnosek-nginx-upstream-fair-2131c73

这个配置来自于 Jeff Waugh 的 PPA 中的 nginx 0.8.34 编译选项。配置、lock、pid 等文件的位置都是按照 ubuntu 系统惯例设置的。需要注意的是 –add-module 指向的是 upstream fair 的解压缩目录的绝对路径。这样就可以将 upstream fair 编译进 nginx。

然后编译并安装:

make && make install

nginx 就安装成功了。目录 /var/lib/nginx 需要手工建立,否则启动 nginx 会报错:

[emerg]: mkdir() "/var/lib/nginx/body" failed (2: No such file or directory)

建立shell 脚本 /etc/init.d/nginx:

#! /bin/sh

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi

set -e

case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

并执行命令:

sudo update-rc.d -f nginx defaults

更新 rc 后,即可使用:

sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx restart

控制 nginx 启动。
其他配置不再累述,张宴的 blog 里写得非常清晰。只补充一下 upstream fair 的使用,只要在 nginx 配置文件的 upstream 段加入 fair 开关即可:

upstream backend {
server server1;
server server2;
fair;
}

当然,ubuntu 还可以用上面提到的 Jeff 的 ppa 源进行安装:

echo "deb http://ppa.launchpad.net/jdub/devel/ubuntu hardy main" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E9EEF4A1
apt-get update
apt-get install nginx

简单快捷。

原文来自:http://www.mikespook.com/index.php/archives/483,做个参考 。。。。

信息过载如何应对

信息过载如何应对

以前,我们总是认为自己获取新信息新资料等等不够。总觉得自己看到的资料太少,信息获取渠道匮乏,可如今不对了,在这个信息爆炸的时代,你缺少的不是资料,而是缺少如何整理资料或者说如何在如海一样的资料中获取你想要的资料。100滴水,对你有用的可能只有5滴,那么你如何过滤到剩下的95滴呢?

看到有个人的博客这么认为信息过载:

* 很难从海量信息找到到合适的信息。
* 获取高质量的信息成本越来越高。
* 浪费的时间越来越多。比如点开一个新闻站点之后可能会不知不觉浪费很多时间来看新闻
* 心态越来越浮躁,很难静下心来去思考和吸引知识。网络上的文章都以快餐化为主,看整本书的人越来越少。
* 注意力非常容易就会分散。比如IM、邮件、RSS、Twitter、电话、短信、游戏等等。

而他的应对方法也很简单:

明确自己的目标,确定自己目前信息获取的关注范围。部分方向包括:学习研究(细分的方向在10种左右)、沟通方式、财务自由、国学、中医保健及养生、宏观经济学、厨艺、IT、外语等方面。
在每个系统中建立自己的知识框架,应用知识管理来不断完善,同时记录心得。
形成自己的GTD系统,不断完善和改进。
定期进行反馈和思考
把身边的信息源划分不同层次,明确轻重缓急
拿出固定时间来放松自己,缓解压力

他认为具体可以这样做:

1、对于遇到信息过载的人,说白了就是个人的目标不明确不具体,不清楚自己到底是需要什么信息,才会觉得信息越来越多。当你的目标明确之后,会发现高质量的信息还是很少。
2、强烈推荐学习快速阅读和思维导图,会发现带来的好处越出想象,同时节省大量时间
3、学习从无到有建设一个知识框架,并记录每一步的心得和反思
4、目前获得信息质量最好的办法还是书籍,网络上的信息质量越高,付出的时间成本就越大
5、尽可能少的去阅读新闻,新闻95%以上都对你的本人无效,同时会浪费大量时间
6、学习GTD,提高时间有效利用率
7、象IM、Twitter这类的东西能不用就用,浪费的时间会越出你的想象。象偷菜之类的网页游戏也少玩,或者想办法不玩。
8、你不是神不可能把一切做得完美,不要过于极端
9、学习利用手机来帮助自己
10、找出放松自己的办法,比如游戏、运动。
11、利用网络书店、社区、豆瓣、博客和朋友推荐的方式来得到书籍阅读清单,应用速读在书店和图书馆快速略读和路读来寻找自己对有帮助的书籍
12、学好英语,网络上很大部分的资料还是英文的
13、同时进行多任务操作,会分散你的注意力,要学习集中注意力,并练习延长集中的时间。
14、想办法建立或加入一个与你目标相同或相近的圈子,会对你有很大的帮助。
15、定期的反思和改进,非常重要,一定要养成这个习惯
不过我自己还是觉得对于时间的管理是最重要的。当然不能全部用来看书或者查资料。锻炼身体其实也很重要,没有身体,一切都是白搭。对于一些你认为以后可能会用到,而目前暂时用不到的,可以用一些软件记录下来。并用标签进行一些整理。相信以后有机会会用上吧。

上面3段转贴都来自于http://www.read.org.cn/html/978-how-do-i-deal-with-information-overload.html,各人的方法不一样,仅作参考

政协委员建议关闭网吧

政协委员建议关闭网吧

最近在网上不停的看到《全国政协委员建议关闭网吧 六成网友表示反对》以及相类似的新闻,甚至有黑客去黑了政协委员所在的公司网站。

颇有一番感慨,网吧这玩意,我从97年就开始知道,那时候的网吧还不能算是真正的网吧。或许就象陶教授说的是“游戏吧”,但我也在那段时间里熟悉了电脑的操作、使用,包括一些软件的安装、卸载,甚至是一些硬件的安装(偶尔还有尝试帮网吧老板的电脑超频)。或许这在现在看来是不可想像的事情,但在当时,一台MX166的普通电脑就要6、7000的时候,还真的需要网吧来学电脑。

现在的网吧,或者说是游戏吧。为什么就不需要了呢?由政府来开办公益性网吧?安排几个就业人员?我觉得不应该这样。毕竟孩子玩游戏是天性,关键在于家长怎么疏导。在上世纪90年代,没有网络,好多孩子还是沉迷游戏厅【我就是其中之一】。再说下去就又要谈网瘾了。其实想想,现在的孩子也真可怜,小时候的我们爬上爬下,玩来玩去,大人们管的也少。现在的小孩子,能去哪 里玩?到处是高楼大厦,出个门都得担心被车撞。我们小时候胡同里逛逛,附近的小孩也就都认识了。现在呢?铁门都拴起来了,锁也开始防盗了,天空不是蓝的,水也不是绿的,土地也成了水泥的。小孩还能干嘛?在家里,还不让上网,不让看电视。怎么过啊。。。

不过现在很多事情都是头痛医头,脚痛医脚的。实在没法治了,就直接切除了。

本文实在不算是发表意见,仅当争取多一些搜索关键字吧。因为写了一半不知道写啥了,再写下去怕被和谐。

网站压力测试工具

网站压力测试工具

大多数在win下面进行开发的人员,在做压力测试时,都是采用了apache自带的ab.exe进行测试的。工具虽然小,但也算强大。只是Ab的数据不是特别准确。
除此之一,还有一些工具可以做压力测试,如loadRunner,webbench等。现在我就做一点小小的介绍。。

格式: ./ab [options] [http://]hostname[:port]/path
参数:
-n requests Number of requests to perform
//在测试会话中所执行的请求个数。默认时,仅执行一个请求
-c concurrency Number of multiple requests to make
//一次产生的请求个数。默认是一次一个。
-t timelimit Seconds to max. wait for responses
//测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p postfile File containing data to POST
//包含了需要POST的数据的文件.
-T content-type Content-type header for POSTing
//POST数据所使用的Content-type头信息。
-v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
-w Print out results in HTML tables
//以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i Use HEAD instead of GET
// 执行HEAD请求,而不是GET。
-x attributes String to insert as table attributes
//
-y attributes String to insert as tr attributes
//
-z attributes String to insert as td or th attributes
//
-C attribute Add cookie, eg. 'Apache=1234. (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
//-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)
//-attributes 设置 属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现 HTTP/1.x; 仅接受某些'预想'的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。

参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:

./ab -c 1000 -n 1000 http://127.0.0.1/index.php

这个表示同时处理1000个请求并运行1000次 index.php文件.
#/usr/local/xiaobai/apache2054/bin/ab -c 1000 -n 1000 http://127.0.0.1/index.html.zh-cn.gb2312
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software: Apache/2.0.54
//平台apache 版本2.0.54
Server Hostname: 127.0.0.1
//服务器主机名
Server Port: 80
//服务器端口

Document Path: /index.html.zh-cn.gb2312
//测试的页面文档
Document Length: 1018 bytes
//文档大小

Concurrency Level: 1000
//并发数
Time taken for tests: 8.188731 seconds
//整个测试持续的时间
Complete requests: 1000
// 完成的请求数量
Failed requests: 0
//失败的请求数量
Write errors: 0

Total transferred: 1361581 bytes
//整个场景中的网络传输量
HTML transferred: 1055666 bytes
//整个场景中的HTML内容传输量
Requests per second: 122.12 [#/sec] (mean)
//大家最关心的指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值
Time per request: 8188.731 [ms] (mean)
//大家最关心的指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值
Time per request: 8.189 [ms] (mean, across all concurrent requests)
//每个请求实际运行时间的平均值
Transfer rate: 162.30 [Kbytes/sec] received
//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 646 1078.7 89 3291
Processing: 165 992 493.1 938 4712
Waiting: 118 934 480.6 882 4554
Total: 813 1638 1338.9 1093 7785
//网络上消耗的时间的分解,各项数据的具体算法还不是很清楚

Percentage of the requests served within a certain time (ms)
50% 1093
66% 1247
75% 1373
80% 1493
90% 4061
95% 4398
98% 5608
99% 7368
100% 7785 (longest request)
//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1093 毫秒,60% 的用户响应时间小于1247 毫秒,最大的响应时间小于7785 毫秒

由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数
LoadRunner 对应用程序进行压力测试,以隔离并标识潜在的客户端、网络和服务器瓶颈。
通过 LoadRunner,可以在可控制的峰值负载条件下测试系统。要生成负载,LoadRunner 需要运行分布在网络中的数千个虚拟用户 (Vuser)。通过使用最少的硬件资源,这些 Vuser 提供一致的、可重复并可度量的负载,像实际用户一样使用您的应用程序。LoadRunner 深入的报告和图可以提供评估应用程序性能所需的信息。

LoadRunner 技术
使用 Mercury LoadRunner,可以创建场景,并在其中定义性能测试会话期间发生的事件。在场景中, LoadRunner 会在物理计算机上用虚拟用户(即 Vuser)代替真实用户。这些 Vuser 通过以可重复、可预测的方式模拟典型用户的操作,在系统上创建负载。假设您正在测试一个基于 Web 的旅行代理应用程序(用户可以通过它在线预订航班),并要确定多个用户同时执行相同的事务时,该应用程序将如何处理。使用 LoadRunner代替旅行代理,您可以创建具有 1000 个 Vuser 的场景,并且这些 Vuser 可以同时尝试在应用程序中预订航班。

测试过程
LoadRunner 测试过程由以下四个基本步骤组成:
➤ 步骤 1 — 创建脚本:捕获在您的应用程序中执行的典型最终用户业务流程。
➤ 步骤 2 — 设计场景:通过定义测试会话期间发生的事件,设置负载测试环境。
➤ 步骤 3 — 运行场景:运行、管理并监控负载测试。
➤ 步骤 4 — 分析结果:分析负载测试期间 LoadRunner 生成的性能数据。

LoadRunner 组件
测试过程的每个步骤均由一个 Mercury LoadRunner 组件执行。这些组件如下:
➤ Mercury 虚拟用户生成器 (VuGen) — 创建脚本
VuGen 通过录制应用程序中典型最终用户执行的操作来生成虚拟用户 (Vuser)。VuGen 将
这些操作录制到自动虚拟用户脚本中,以便作为负载测试的基础。
➤ Mercury LoadRunner Controller — 设计和运行场景
Controller 是用来创建、管理和监控负载测试的中央控制台。使用 Controller 可以运行用
来模拟真实用户执行的操作的脚本,并可以通过让多个 Vuser (虚拟用户)同时执行这些
操作来在系统中创建负载。
➤ Mercury Analysis — 分析场景
Mercury Analysis 提供包含深入的性能分析信息的图和报告。使用这些图和报告,可以标
识和确定应用程序中的瓶颈,并确定需要对系统进行哪些更改来提高系统性能。


webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。

1、适用系统:Linux

2、编译安装:

wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

3、使用:

webbench -c 500 -t 30 http://127.0.0.1/test.jpg
参数说明:-c表示并发数,-t表示时间(秒)

4、测试结果示例:

Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://127.0.0.1/test.jpg
500 clients, running 30 sec.

Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.

ab是最方便的。毕竟他直接内置。。。webbench需要安装在linux下,一般人还真难装。loadRunner太大了,几百兆的东西,而且,很多人还用不来。

所以我简要介绍一下。。

jQuery写的tab切换

花了半小时左右写了这个小东西。没有封装成插件。因为我觉得性能不好。主要就是想试一下$('xxx').data()这个方法。
在页面不大的时候,其实真的可以用这个方法来缓存ajax的数据。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script src="http://localhost/jquery.js"></script>
<style>
.mytab{border:1px solid #888;cursor:pointer;}
.showdiv{border:1px solid #888;cursor:pointer;}
</style>
</head>

<body>
<div>
<span class="mytab">Tab1</span>
<span class="mytab">Tab2</span>
</div>
<div id='tab-1' style="display:none" rel="http://localhost/test.php" class="showdiv">
</div>
<div id='tab-2' style="display:none" class="showdiv">
ddssasdflkjasdflkjalsdkfj
</div>

<input type='button' value="click" id='clickid'>
<script language="JavaScript">
<!--
$(document).ready(function(){
$('body').append("<div id='testData' />");

$('.mytab').each(function(i){
$(this).click(function(){
var j = i+1;
var id = 'tab-' + j;
var src = $('#'+id).attr('rel');
if( src ){
if($('testData').data('data_'+id)){
return ;
}else{
$.get( src ,function(data){
if(data){
$('testData').data('data_'+id,data);
$('#'+id).html(data);
}
});
}
}
var len = $('.mytab').length;
for (var s=1;s<=len ; s++){
s == j ? $('#'+id).show() : $('#tab-'+s).hide();
}

});
});
});
//-->
</script>
</body>
</html>

纯实现,无性能无效果。只是可以运行而己
目前我就在tab的切换和Div的显示方面没有想到更好的。。。其实如果显示内容的div不用ID也可以这样写:

$('.test').hide();
$('.test').eq(i).show();

避免了循环

随便写写。。。也请随便看看

open_basedir 严重影响PHP I/O性能

这是昨天看到的一篇文章,看完后,我针对服务器等做了一下测试,确实有影响。毕竟open_basedir在每一次require,include以及判断文件等的时候,都要先判断是否在可执行目录内。所以。。。性能就会下降(如果是用框架的,可能性能会更差一点),如果是自己的机器,一般也可以通过设定文件目录权限,来防止这种情况发生【linux可以指定用户、用户组。windows可以设定目录的所有者(当时在win下我就最烦这个,因为需要为每个虚拟主机添加一个用户,再指定权限,然后再到目录上设定用户)】

下面就是我看到的文章的内容:

今天在做项目的时候发现 没几行语句 竟然耗费了0.04秒

十分让我吃惊.随后进行跟踪 得知就在I/O读写的时候最费时间 一个is_file竟然费了0.003秒

后来让我百思不得其解 Google也没有任何答案.

然后我又把项目放到另外一个电脑上 发现速度直线上升 从以前的0.04秒变成了0.007秒左右.

我很纳闷 难道我的本本就这么差劲不应该啊

经过我的比较 我发现了 在我机器上的这个项目的虚拟主机中 设置了open_basedir.

大家都知道 这个对于虚拟主机来说是必不可少的..

但是后来我又进行测试一遍 难道真的是这样吗

我的测试代码非常简单:

$time = microtime(true);
is_file('1.html');
echo microtime(true) - $time;

我的弄了一个空的1.html文件 这个文件是在当前目录绝对存在的.

我新建了一个虚拟主机 然后设置了一下open_basedir.

得到的结果是0.0018570423126221左右

然后我进apache的配置文件 把open_basedir删除以后

得到的结果是5.0067901611328E-5 这个结果小到PHP中的小数点都不能表示了

(注:以上结果都是多次运行缓存后的结果 因为is_file的结果会被缓存的)

现在我终于明白了 为啥虚拟主机那些探针中 I/O的性能都那么小的原因了..

杯具啊..

--EOF--

原文来自http://www.skiyo.cn/article/Skiyo-243-1263890301.html,各位也可以测试一下。。