网站终于活过来了
前段时间域名到期了,本来想转移到godaddy的,为啥,因为国外便宜,而且域名服务商服务好呗,但是在要求国内的域名服务商提供转出码的时候,却被要求续费多一年才能转出,续多一年用不了多少钱,但非常反感这些霸王行为,于是就没有继续续费,而是等到到期后,重新在godaddy注册,冒这别人抢注的风险也不在这里续费了。运气还挺好的,今天终于注册会我的域名了,网站复活过来了~~~重新开始写博客了,记录生活的点滴。
前段时间域名到期了,本来想转移到godaddy的,为啥,因为国外便宜,而且域名服务商服务好呗,但是在要求国内的域名服务商提供转出码的时候,却被要求续费多一年才能转出,续多一年用不了多少钱,但非常反感这些霸王行为,于是就没有继续续费,而是等到到期后,重新在godaddy注册,冒这别人抢注的风险也不在这里续费了。运气还挺好的,今天终于注册会我的域名了,网站复活过来了~~~重新开始写博客了,记录生活的点滴。
Xenu 是一款深受业界好评,并被广泛使用的死链接检测工具。 时常检测网站并排除死链接,对网站的 SEO 非常重要,因为大量死链接存在会降低用户和搜索引擎对网站的信任。 我们推荐的死链接检测工具 Xenu 主要具有以下特征: 需要下载安装,不到1M大小,用户界面非常简洁,操作简单。 检测彻底:能够检测到图片、框架、插件、背景、样式表、脚本和 java 程序中的链接。 报告形式合理多样,死链接一目了然。 提供出现死链接的网页,方便扫除导出链接错误。 能够侦测重定向URL 可以选择是否侦测站外链接。 对于小型简单网站,可以用来制作HTML格式网站地图。 死链接检测工具 Xenu 下载地址: http://img.xibu.biz/download/xenu.zip 不懂英文者使用指南: 下载,并安装。 打开后,出现 Tips and Tricks 窗口,点击 Close 按钮。 点击左上第二行第一个按钮。 出现一个对话框,在对话框第一行,写入自己的URL。如: http://gaebbs.xibu.biz/ 按底部的“OK”,就完成了。 报告结果中,出现红色的部分即是死链接。
google reader最近登录了时候,老是提示“花费的时间比平常要多。尝试重新载入页面。”的信息,无论刷新多少次都是这样样子,看起来是网络太慢或者是google的服务器太烂的样子。如下图,有图有真相。
是否真的是网络问题还是google的自身的问题呢,今日刚好买了一个国外空间,提供ssh的服务。同ssh翻×墙出去,打开google reader ,可以正常访问,就是速度慢点而已。正好印证了google的那句话,“使看起来是google自身的问题”。不得不佩服有关单位的技术真是炉火纯青啊。
目前apache的主流工作模式MPM模式。MPM是Multi-Processing-Modules的简称,意思是多道处理模块。MPM模块有不同的种类。现在用的比较多的MPM种类主要是prefork和worker。prefork的工作方式是多个进程工作,每个进程会在处理一定数量的请求后结束(这个数量可能是无穷),没有线程的概念。worker被看作apache未来的主流工作模式,它是一种多进程与多线程混合的模式。
最近发现一个比较奇怪的现象,某台以prefork模式工作的服务器的内存使用率在每次重启apache之后会不停的上涨,直到swap用完,直到死机。后来查出来是因为apache使用的某一些脚本存在内存泄露的代码段。而apache启动的调用这些代码段的进程的处理请求数被设置为无穷。也就是说这些进程只有在apache重启(stop-start模式)或者服务器(指的是机器)重启的情况下才会被kill,否则将一直运行下去,直到耗尽系统的最后一点资源(主要是内存)。
问题貌似已经解决了。但是,还有点不对,就是为什么有将近4G的可用空间(内存2G加上swap2G,除去操作系统部分),资源还是很快就耗尽了?虽然进程在每处理一个请求的情况下都会吃掉一点内存,但是在看了内存泄露的那段代码后发现每次处理泄露的内存也不过2K左右。要消耗掉3G的空间,需要至少15.7w次请求。但是目前的手机统计平台上一天的点击量也不过5w。其实top命令下就能看出来,每个httpd进程的内存使用率有2.4%,3.2%等等。对于一个2G内存的服务器,一个进程2%就等于是40M。仅仅一个普通的请求,没有post参数的,没有大规模数据库查询的,怎么会用这么多内存?httpd的进程在被apache的主控进程创建的时候,会预先加载一些包,这些包是在apache配置文件里设置的。然后发现在apache加载的包目录下,有一个很大的包,是用来根据手机号查找手机卡的信息的。去掉这个包之后,每个httpd的进程使用内存就正常了。
总结有两点:
1、MaxRequestsPerChild不能设置为0,最好设置为一个相对不大的数字,防止httpd进程有意外的内存泄露(当然,也不建议设置为1,否则apache就会不停的fork新的进程了,cpu的资源也就过多消耗了);
2、不要加载过多的包,尤其是比较大的包。如果费用不可,最好能够用数据库来存储包里的一些静态信息。
选择prefork还是worker可以在编译时使用–with-mpm=MPM参数指定,默认为prefork,
prefork
prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。在make编译和make install安装后,使用httpd -l来确定当前使用的MPM是prefork.c。查看httpd-mpm.conf配置文件,里面包含如下默认的配置段:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:1、可防止意外的内存泄漏。2、在服务器负载下降的时侯会自动减少子进程数。因此,可根据服务器的负载来调整这个值。MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。ServerLimit指令无须重编译Apache就可以加大MaxClients。
ServerLimit 10000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10000
MaxRequestsPerChild 0
Worker
相对于prefork,worker全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。在configure –with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd-mpm.conf中有以下默认配置段:
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。 ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
ServerLimit 25
ThreadLimit 200
StartServers 3
MaxClients 2000
MinSpareThreads 50
MaxSpareThreads 200
ThreadsPerChild 100
MaxRequestsPerChild 0
下面是利用Apache自带的测试工具ab对Server进行测试的情况(设定请求的index页面为6bytes),cpu%为cpu占用率,mem为内存使用量(M为单位),RequestsPerSecond为每秒处理的请求数。
1、Prefor方式
(ServerLimit,StartServer,MinSpareServers,MaxSpareServers,MaxClients,MaxRequestPerChild)
-n/-c(ab参数)
Cpu%
Mem
Requestspersecond
(-,5,5,10,150,0)
100000/100
28.8
285
8434
100000/200
29.2
304
8032
100000/500
25.3
323
7348
100000/1000
24.4
330
5886
(10000,5,5,10,500,0)
100000/100
28.7
371
8345
100000/200
27.4
389
7929
100000/500
24.9
417
7229
100000/1000
23.4
437
6676
(10000,5,5,10,1000,0)
100000/100
28.8
408
8517
100000/200
27.0
422
8045
100000/500
24.2
455
7236
100000/1000
22.5
470
6570
(10000,5,5,10,1500,0)
100000/100
29.6
330
8407
100000/200
28.1
349
8014
100000/500
26.4
380
7290
100000/1000
24.0
400
6686
2、Worker方式
(ServerLimt,Threadlimt,Startservers,MaxClients,MinspareThread,MaxspareThread,ThreadperChild,MaxRequestPerChild)
-n/-c(ab参数)
cpu%
mem
RequestsperSecond
(50,500,5,10000,50,200,200,0)
100000/100
18.6
188
6020
100000/200
20.1
195
5892
100000/500
19.8
209
5708
100000/1000
22.2
218
6081
(100,500,5,10000,50,200,100,0)
100000/100
24.5
240
6919
100000/200
23.6
247
6798
100000/500
24.6
254
6827
100000/1000
22.3
271
6114
(200,500,5,10000,50,200,50,0)
100000/100
27.3
301
7781
100000/200
27.4
307
7789
100000/500
26.0
320
7141
100000/1000
21.8
344
6110
相对来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。
附apache两种工作模式的指令:
Apache MPM prefork:http://www.phpchina.com/manual/apache/mod/prefork.html
Apache MPM worker:http://www.phpchina.com/manual/apache/mod/worker.html
Balsamiq Mockups出自加利福尼亚州的Balsamiq工作室,创始人Peldi在2008年6月推出了这款手绘风格的产品原型设计工具,并广受好评。2年多来,Balsamiq工作作为一个微型独立软件开发商,专注于Mockups的开发设计,仅3周便实现了盈利,18个月内销售额达到200万美元,用户端数量超过10万个,这与Balsamiq Mockups的市场用户细分的成功以及产品特性是分不开的。
在Web产品设计中,Balsamiq Mockups是产品设计师绘制线框图或产品原型界面的利器。在产品设计的需求阶段,低保真的线框图或者草图设计介于产品流程设计与高保真DEMO设计之间,在Balsamiq Mockups出现之前,流程图可以使用Visio,高保真DEMO可以使用Axure,但我们并没有好用的草图设计工具;在产品设计管理中,我们通常在产品的业务流程和数据流转已经相当明确时才开始进一步考虑产品的结构层和框架层,虽然此时纸、笔、白板都是非常简单方便的交流工具,但是他们的最大劣势就是——很难将有价值的原型保存下来。Balsamiq Mockups的出现完美的解决了这个问题。
可存:告别那一堆堆的纸质线框图吧…
易用:UI控件支持自动拖拽,并且可以实现自动对齐;
美观:手绘风格,简约清爽;
丰富:从按钮到输入框,从导航条到页面、表格,甚至包括了最潮的Iphone元素;
方便:对元素的修改除了工具栏外,还可以使用隐藏编辑框,支持快捷键;
兼容:可使用XML语言保存元素,也可以导出PNG图片,可以插入到任何项目;
跨平台:Windows、Mac OS、Linux下都可以使用,还有能集成在Confluence,JIRA,和XWiki中的版本,对了,如果你没时间下载桌面版,还可以直接使用网页版的Balsamiq Mockups…
应用范围:就像之前提到的,Balsamiq Mockups最好用于商用web产品设计中的低保真线框图或者草图设计,相对于纸和笔,它不够灵活;相对于Axure,它不够精确;
使用语言:暂时没有英文版的Balsamiq Mockups,虽然相对于用惯国外软件的产品设计师/前端交互设计师来说,这并不是什么大问题,但毕竟这提到了使用门槛,童鞋们还是要学好英语;(关于中文汉化版Balsamiq Mockups下面会提到)
价格不菲:79美元的价格并不适合喜欢的朋友尝鲜;而对于国内公司而言,在产品设计领域的理念和意识,远达不到花钱去买一个细分的专业软件的程度。即便不使用Balsamiq Mockups,地球照样转。(关于Balsamiq Mockups的免费方法下面会提到)
使用Balsamiq Mockups的人包括产品经理、产品设计师、用户体验设计师、交互设计师、网站前端设计师等等,随便谁都可以。这并不重要,问题是很多大公司都在使用,来看看腾讯CDC对Balsamiq Mockups的分析,或者搜狐产品经理对Balsamiq Mockups的推荐,甚至现在网易招聘产品设计师都要求会Balsamiq Mockups了……
首先提供在线安装Balsamiq Mockups的方法:
>> 点击进入Balsamiq Mockups官方下载安装页面 <<
点击图标直接安装即可,安装内容包括Adobe AIR环境以及Mockups主体桌面程序:
如果你的电脑安装时出现问题,可以尝试分步下载安装Balsamiq Mockups:
确保你的电脑安装了Adobe AIR,下载后安装到默认文件夹
>> 点击进入 Adobe AIR 的最新版本安装页 <<
安装完Adobe AIR后直接下载Balsamiq Mockups桌面程序,无论是Windows还是Mac都可以正常使用,下载后安装到你需要的文件夹即可
最后,当你无法安装Balsamiq Mockups或者没时间安装时,Balsamiq还为你提供了在线Web版本的Mockups。
如果不注册,Balsamiq Mockups便只能绘图,不能保存你的Mockups,同时每隔5分钟会弹出提示框请你输入许可证。虽然对企业而言,79美元的注册费并不多,购买大量许可还有打折优惠,但对于个人使用者或者希望体验的朋友来说,免费的总是最好的。Balsamiq非常体贴的推出了“免费获得Balsamiq Mockups许可证密钥的几个方法”,包括:
如果你是非营利、慈善机构、开源贡献者;
如果你是技术/软件博客作者或者记者;
如果你是学校高中班老师;
如果你加入可用性专业培训;
如果你是大学的教授或者学生;
当然,对普通人而言,在你的博客上写一篇关于Balsamiq Mockups的评测或者介绍,做口碑营销,是比较靠谱的办法,这并不困难,因此不要去寻找所谓的破解和注册机了——当你完成博客时,给Balsamiq写邮件索要免费的Mockups注册码吧!
邮箱:free@balsamiq.com
主题:I want to review Mockups on my software blog!
内容:关于Balsamiq Mockups介绍的博客URL
PS.以下是我成功申请Balsamiq Mockups的免费Serial Key的邮件以及Balsamiq首席运营官Valerie Liberty的回信,再次感谢Balsamiq的慷慨并强烈表扬Valerie Liberty的高效,重点在于,回信的美国当地时间是晚上10点多……
发送至 free@balsamiq.com
日期 2010年3月18日 下午1:08
主题 I want to review Mockups on my software blog!Hi,This is my blog’s URL what about Balsamiq Mockups:http://www.hanjunxing.com/balsamiq-mockups-one-for-all
Could you give me a license, free of charge,please?Thank you very much!
日期 2010年3月18日 下午2:11
主题 Re: I want to review Mockups on my software blog!It’s my pleasure to give you the license below:
Organization name:***
Serial Key:***
Enjoy Balsamiq Mockups and thanks for spreading the word, I am looking
forward to seeing your review!
Valerie Liberty
Chief Operating Officer, Wow! Division
选择菜单栏 View >> 将 Use System Fonts 勾上,就能完美支持中文输入。
目前Balsamiq没有发布中文版的Mockups,同时由于Balsamiq Mockups是基于Flash的应用程序,所以无法安装汉化补丁或汉化包。值得庆幸的是,Balsamiq Mockups的操作非常简单和人性化,你不需要专门的Balsamiq Mockups教程,因为你甚至不需要看文字提示就可以快速上手绘制自己的产品原型了。最后,为需要的朋友提供一个Balsamiq Mockups的山寨中文汉化版:Balsamiq Mockups中英文对照图,顺便做一个Balsamiq Mockups的界面DEMO:
日本发生了特大级的地震,加上核泄漏,真是雪上加霜,伤亡惨重,可以说是日本今年来损失最惨重的一次,这是日本的灾难,更是人类的灾难,我想,这个时候,哪怕是再冷血的人,也会有怜悯之心,就算你帮不到忙,那至少也不会幸灾乐祸。
可是,偏偏在我们这个已有五千年文化的大国,一片欢腾,热门祝贺,比过年国庆还热闹,一颗压抑的心,在此刻得到尽情的释放。谁还记得汶川大地震的时候,人家给我们的帮助呢,谁还想起,日本一直以来对我们的资金援助呢,直到去年由于我们gdp超过日本了才取消。毫无语问,国家之间肯定存在着矛盾,利益的纠纷,而且由于历史的原因,中日两个用世仇来形容也不为过,但我们不能因为历史的恩怨而无视人性的存在,而把自己冷血,无情,低俗的一面展现出来,我相信,我们今天这样当日本人民,我们有一天也会这样对待自己的同胞,中国人的顽劣性。
推特上有人说得好,这是检验人性的时候。曾经9.11的时候,我也为美国暗暗高兴了好久,这么多年走过来,当自己明白了一切之后,发现自己当年是那样的愚蠢。在这个时刻,抛开一切的成见,让我们以最基本的人性,为日本祈祷,希望日本人民早日修复家园。
小孩已经3个多月了,即将升级做爸爸,心里又是兴奋又是开始,头几个月不停的忙着产检、办围产卡,是痛并快乐着。毕业不知不觉已经5个年头了,不长不短,随着小孩的即将来临,我相信这是我人生的一个转折点,身上的责任又重了一点,首先是一个人,然后是两个人,现在是三个人,等到父母都老了之后,那就是五个人,七个人了,随着年龄的增长,肩上扛的重量也就越重了。
过去的五年很难用成功或失败去形容,感觉你还没有怎么拼命,还没用尽全力,战斗还没怎么开始,人生却蓦然来到而立之年,曾经年少的时候,盼着日子快点过去,现在多么的希望上帝能多给我拼搏的时间啊。曾经一起的同龄人、一起奋斗的伙伴慢慢离去,换来一张张陌生、充满朝气的面孔,慢慢感觉这里不再属于自己。人生的路,在何方?有人说,路就在脚下。
每每都以生活忙为理由,多久没有与同学、朋友联系了,甚至在qq上说一声hi也显得那么的艰难,毕业时,豪言壮气地说,以后一定常回来喝酒,酒没喝成,人已各奔南北,大家忙碌在自己的圈子了。
今天收到一条饭局信息,老板要走了,今晚请吃饭。我听了心理为之一振,之前就听同事说老板要走了,但我不信,以为是他忽悠人的,今天,才发现,那是真实。今天,老天也挺给力的,下了一天的雨,淅淅沥沥的,没完没了。
今天在饭桌上尽情地吃饭喝酒,很就没有这么痛苦的喝酒了,今天我决定放纵一次,与老板喝个痛快。我们一起回忆了一起共事的点点滴滴,从进公司那天起,老板就一直关照我,对我们这帮老下属都挺好的,正如有一个同事说的,我们跟了一个全公司最好的部门经理,我们也确实快活了好几年,可是,现在这位最好的部门经理却要离我们而去了。
曾经也有很多想法,也有离职的打算,但一想到有老板在,有一帮感谢深厚的同事在,也最终没有实施,今天老板的离职给我非常大的震撼,好像也再也找不到在这里呆下去的理由。心里有很多话,一整晚也说不完,唯有一句,一路顺风,有空常聊聊。
今日,在好友jeff的推荐下,我在webfaction上购买了3年的空间服务,在网上粗略的看了一下网友对webfaction的评价,发现评价比较高,特别是对程序员比较友好,自己可以控制的地方比较多,最主要的是有ssh服务,有了这个东西,啥都好办了,可以在服务器上安装你喜欢的任何程序。而且他的domian/website/application的管理模式,确实比较独特、新颖,使用起来比较方便。不过在网上,也发现有个别网友评价webfaction的管理非常不友好,不是针对初学者,不如cpanle界面容易使用。个人感觉,webfaction的这么多特性,这么高的自由度,如果没有一点的技术基础,就像用牛刀杀鸡,发挥不了他的功能,如果是初学者,我还是建议不要使用webfaction。
为了测试webfaction的写意,而且由于个人的需要,今天在webfaction上安装、配置了apache、php,并成功的跑了起来,jeff推荐的确实不错,使用起来很爽,完成可以当独立主机来使用,主要是缺少root缺陷,不过也够用了。还有一个不爽的地方是,ps -aux的时候,可以看到整个服务器上启动的所有服务器进程,想到自己启动的进程也会给别人看到,比较别扭,私密性不好。下面简单说一下安装的过程,给也需要在webfaction上安装apache的朋友作一个参考。
首先是下载apache,我下载的是最新的版本,apache2.2.17,我是直接在服务器上使用wget下载的,下载速度非常快,可以达到5、6m/s,老外地网速真是快。
下载好后,解压,tar -xjvf httpd-2.2.17.tar.bz2
配置:./configure –prefix={安装目录} –enable-so –enable-cgi –enable-info –enable-rewrite –enable-speling –enable-usertrack –enable-deflate –enable-ssl –enable-mime-magic
编译:make
安装:make install,即可把apache安装到指定的目录。
接下来,下载php,我下载的是最新的php5.3.5,
配置:./configure –with-apxs2={apache的安装目录}/bin/apxs –with-mysql –prefix={php的安装目录} –with-config-file-path={php.ini文件的存放目录,一般放在php的安装目录下} –enable-force-cgi-redirect –disable-cgi –with-zlib –with-gettext –with-gdbm
解压:tar -xjvf php-5.3.5.tar.bz2
编译:make
安装:make install,即把php安装到指定的目录。
复制php.ini文件到php.ini的的存放目录,cp php.ini-production {php.ini的存放目录}/php.ini。
在apache的配置文件http.conf里面确保已经添加了如下代码:
LoadModule php5_module modules/libphp5.so
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
启动apache,./apachectl start。
喜欢webfaction的朋友可以通过这里注册,有2个月退款服务,如果不满意,可以2个月内申请退款。