<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>聚沙成塔-小哈的记事薄 &#187; hashei</title>
	<atom:link href="http://www.hashei.me/author/hashei/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hashei.me</link>
	<description>一个系统工程师的絮叨</description>
	<lastBuildDate>Tue, 10 Jan 2012 18:03:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://hashei.me/wp-includes/js/jquery/jquery.js?ver=1.3.2'></script>
<script type="text/javascript">
/* <![CDATA[ */
jQuery.ajax({type:'GET',url:'http://hashei.me/wp-content/plugins/wp-postviews-plus/postviews_plus.php',data:'todowppvp=add&type=/author/hashei/feed&id=1',cache:false,dataType:'script'});
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>人生的必经之路</title>
		<link>http://www.hashei.me/2012/01/%e4%ba%ba%e7%94%9f%e7%9a%84%e5%bf%85%e7%bb%8f%e4%b9%8b%e8%b7%af.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e4%25ba%25ba%25e7%2594%259f%25e7%259a%2584%25e5%25bf%2585%25e7%25bb%258f%25e4%25b9%258b%25e8%25b7%25af</link>
		<comments>http://www.hashei.me/2012/01/%e4%ba%ba%e7%94%9f%e7%9a%84%e5%bf%85%e7%bb%8f%e4%b9%8b%e8%b7%af.html#comments</comments>
		<pubDate>Tue, 10 Jan 2012 17:59:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[生活感想]]></category>
		<category><![CDATA[沈佳宜]]></category>
		<category><![CDATA[那些年]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2012/01/%e4%ba%ba%e7%94%9f%e7%9a%84%e5%bf%85%e7%bb%8f%e4%b9%8b%e8%b7%af.html</guid>
		<description><![CDATA[今天看了《那些年，我们一起追女孩》，趁着“余音绕梁”，记录一下观后感。
故事梗概不用再复述，剧情其实很简单，就是九把刀的个人自传，但是一个自传能引起观众的共鸣并叫好——至少我是——是因为他拍出了那些年，我们都曾有过的青春岁月。
开头的一段，柯景腾被安排坐在沈佳宜前接受“帮教”，这个情节大陆学生也都经历过。不过因为初中阶段我还算一个好学生，属于被老师安排帮教别人的那部分，所以这一段倒也没有什么大的感触。最初产生共鸣的，是沈佳宜扎了马尾辫走过操场，五个男生都觉得沈佳宜对自己有意思的感叹这一情节。虽然有故意制造喜剧的因素在内，但耳边却响起了这么一段歌词“为什么我总觉得你好像其实在注视着我”，明明自己喜欢别人，却觉得别人的一言一行其实是为你做的，这事儿，有过经历的人怕不难体会。之后接着黄舒骏的一首《恋爱症候群》听的人不由会心一笑。
一般发病後的初期反应会开始改变一些生活习性 
洗澡洗得特别乾净 刷牙刷得特别用力 半夜突然爬起来弹钢琴 
有人每天站在阳台对路人傻笑 有人突然疯疯癫癫 突然很安静 
有人一脸痴呆 对着镜子咬着指甲打喷嚏 有人对着小狗骂三字经 
女人突然改变发型 男人开始每天练着哑铃 
食欲不振歇斯底里四肢萎缩神经过敏发抖抽筋都出现在这时期 

如果在这里结束，两人走在一起的话就是童话般美好的故事了，不过这是一篇自传，就注定不会那么一帆风顺。表白未遂的那一段，我觉得很真实。男生平时大大咧咧，脑袋大条一点多的是，可是在喜欢的人面前总是会很敏感“爱一个人常常很小心，仿佛手中捧着水晶”。所以沈佳宜说出“其实我没你想的那么好，也许你只是喜欢想象的我，你好好想想到底喜不喜欢我，都没有好好考虑就回答”的时候，柯景腾疑惑了，“明明站在你的面前，还是害怕这是一场梦”。在戏外的我们心里都在说好傻，这连考验都算不上，就是个试探，抑或说是欲迎还拒。可是那时候的男生哪知道这时要跟上“我喜欢的不是完美的你，而是在家邋遢、有起床气的真实的你”。
因为彼此都是第一次，所以他们的感情在第一次遇到矛盾的时候就断了，不是心灰意冷的破灭，而是硬生生的断开了。沈佳宜在雨里哭骂大笨蛋的时候，你我都知道“大笨蛋”指的什么，但是自尊心受到打击的柯景腾那时以为的是比幼稚更重的伤害。第一次恋爱是单纯的，所以过于脆弱，没有经历住风雨。沈佳宜和阿和在奶茶店，看到一对闹矛盾的情侣最终拥抱在一起的时候，脸上露出的笑容有羡慕，也有祝福。而柯景腾当然也不会忘了沈佳宜，所以台湾921大地震，第一个想到的就是打给她，当然这时候两人之间更多的是友谊。
婚礼上，柯景腾心里说出“看到喜欢的女生有人疼爱，心里会是真正的祝福”，故事在这里结束那也算是一个happy ending。可惜导演要把最残酷的一面放给你们看，“如果柯景腾向我表白，我会很高兴的”，“好，在一起”。这两句话不知道看得多少男生会肝肠寸断，心痛不已。所以在平行的另一个世界中，柯景腾蹲在沈佳宜面前，向她道歉“对不起，是我太幼稚了”，地震的时候沈佳宜也在焦急的搜索信号，婚礼上深情相拥的是他们俩，可惜现实不是。
历史是由一连串的偶然事件组成，这些偶然最后形成一个结果，像蝴蝶扇动的翅膀，这些无法确定的因素共同导致一个结果。无所谓对错，发生了的都叫做必然。而过程当中，任何一项的改变，都可能形成别样的结局。所以初恋失败的人不必痛苦，因为获得了人生中最纯真的经历。而再次投入感情的男女也不用怀疑对方的体贴，动听的话是不是锻炼出来的花言巧语，这是在体会了失去的痛苦后，为了不失去现在的你而做出的改变。联想起前几天看的《失恋33天》，黄小仙说她知道了，她的任性，嘴如尖刀不饶人破坏了陆涛心中的美好形象，以后再也不会了。这种改变应该就是恋爱所得到的经验吧。
最后从我个人的角度说一下柯景腾那场格斗比赛的意义。从进化心理学的角度分析，一场战斗，是男性的本能，竞争、追求层级。好莱坞的电影中，有多少是关于拳击的？《愤怒的公牛》、《洛奇》、《搏击俱乐部》，女生也许对这项运动无感，但男生肯定是热血沸腾的。从文艺的角度分析，这场战斗是柯景腾实现自己从小的梦想，在心爱的人面前把纸上的李小龙真真切切付诸现实，是一场宣告男孩进化成男人的仪式。所以他说这是对于他十分重要的东西，不过可惜的是仅仅对于他而言。
  Copyright &#169; 2008 This feed is for personal, non-commercial use only
聚沙成塔-小哈的记事薄 by hashei 
如果喜欢，欢迎订阅feed.hashei.com
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949]]></description>
			<content:encoded><![CDATA[<p>今天看了《那些年，我们一起追女孩》，趁着“余音绕梁”，记录一下观后感。</p>
<p>故事梗概不用再复述，剧情其实很简单，就是九把刀的个人自传，但是一个自传能引起观众的共鸣并叫好——至少我是——是因为他拍出了那些年，我们都曾有过的青春岁月。</p>
<p>开头的一段，柯景腾被安排坐在沈佳宜前接受“帮教”，这个情节大陆学生也都经历过。不过因为初中阶段我还算一个好学生，属于被老师安排帮教别人的那部分，所以这一段倒也没有什么大的感触。最初产生共鸣的，是沈佳宜扎了马尾辫走过操场，五个男生都觉得沈佳宜对自己有意思的感叹这一情节。虽然有故意制造喜剧的因素在内，但耳边却响起了这么一段歌词“为什么我总觉得你好像其实在注视着我”，明明自己喜欢别人，却觉得别人的一言一行其实是为你做的，这事儿，有过经历的人怕不难体会。之后接着黄舒骏的一首《恋爱症候群》听的人不由会心一笑。</p>
<blockquote><li>一般发病後的初期反应会开始改变一些生活习性 </li>
<li>洗澡洗得特别乾净 刷牙刷得特别用力 半夜突然爬起来弹钢琴 </li>
<li>有人每天站在阳台对路人傻笑 有人突然疯疯癫癫 突然很安静 </li>
<li>有人一脸痴呆 对着镜子咬着指甲打喷嚏 有人对着小狗骂三字经 </li>
<li>女人突然改变发型 男人开始每天练着哑铃 </li>
<li>食欲不振歇斯底里四肢萎缩神经过敏发抖抽筋都出现在这时期 </li>
</blockquote>
<p>如果在这里结束，两人走在一起的话就是童话般美好的故事了，不过这是一篇自传，就注定不会那么一帆风顺。表白未遂的那一段，我觉得很真实。男生平时大大咧咧，脑袋大条一点多的是，可是在喜欢的人面前总是会很敏感“爱一个人常常很小心，仿佛手中捧着水晶”。所以沈佳宜说出“其实我没你想的那么好，也许你只是喜欢想象的我，你好好想想到底喜不喜欢我，都没有好好考虑就回答”的时候，柯景腾疑惑了，“明明站在你的面前，还是害怕这是一场梦”。在戏外的我们心里都在说好傻，这连考验都算不上，就是个试探，抑或说是欲迎还拒。可是那时候的男生哪知道这时要跟上“我喜欢的不是完美的你，而是在家邋遢、有起床气的真实的你”。</p>
<p>因为彼此都是第一次，所以他们的感情在第一次遇到矛盾的时候就断了，不是心灰意冷的破灭，而是硬生生的断开了。沈佳宜在雨里哭骂大笨蛋的时候，你我都知道“大笨蛋”指的什么，但是自尊心受到打击的柯景腾那时以为的是比幼稚更重的伤害。第一次恋爱是单纯的，所以过于脆弱，没有经历住风雨。沈佳宜和阿和在奶茶店，看到一对闹矛盾的情侣最终拥抱在一起的时候，脸上露出的笑容有羡慕，也有祝福。而柯景腾当然也不会忘了沈佳宜，所以台湾921大地震，第一个想到的就是打给她，当然这时候两人之间更多的是友谊。</p>
<p>婚礼上，柯景腾心里说出“看到喜欢的女生有人疼爱，心里会是真正的祝福”，故事在这里结束那也算是一个happy ending。可惜导演要把最残酷的一面放给你们看，“如果柯景腾向我表白，我会很高兴的”，“好，在一起”。这两句话不知道看得多少男生会肝肠寸断，心痛不已。所以在平行的另一个世界中，柯景腾蹲在沈佳宜面前，向她道歉“对不起，是我太幼稚了”，地震的时候沈佳宜也在焦急的搜索信号，婚礼上深情相拥的是他们俩，可惜现实不是。</p>
<p>历史是由一连串的偶然事件组成，这些偶然最后形成一个结果，像蝴蝶扇动的翅膀，这些无法确定的因素共同导致一个结果。无所谓对错，发生了的都叫做必然。而过程当中，任何一项的改变，都可能形成别样的结局。所以初恋失败的人不必痛苦，因为获得了人生中最纯真的经历。而再次投入感情的男女也不用怀疑对方的体贴，动听的话是不是锻炼出来的花言巧语，这是在体会了失去的痛苦后，为了不失去现在的你而做出的改变。联想起前几天看的《失恋33天》，黄小仙说她知道了，她的任性，嘴如尖刀不饶人破坏了陆涛心中的美好形象，以后再也不会了。这种改变应该就是恋爱所得到的经验吧。</p>
<p>最后从我个人的角度说一下柯景腾那场格斗比赛的意义。从进化心理学的角度分析，一场战斗，是男性的本能，竞争、追求层级。好莱坞的电影中，有多少是关于拳击的？《愤怒的公牛》、《洛奇》、《搏击俱乐部》，女生也许对这项运动无感，但男生肯定是热血沸腾的。从文艺的角度分析，这场战斗是柯景腾实现自己从小的梦想，在心爱的人面前把纸上的李小龙真真切切付诸现实，是一场宣告男孩进化成男人的仪式。所以他说这是对于他十分重要的东西，不过可惜的是仅仅对于他而言。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2012/01/%e4%ba%ba%e7%94%9f%e7%9a%84%e5%bf%85%e7%bb%8f%e4%b9%8b%e8%b7%af.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>tuxedo11g MP 模式配置</title>
		<link>http://www.hashei.me/2011/12/tuxedo_mp_configuration.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tuxedo_mp_configuration</link>
		<comments>http://www.hashei.me/2011/12/tuxedo_mp_configuration.html#comments</comments>
		<pubDate>Sun, 04 Dec 2011 15:34:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[tuxedo]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2011/12/tuxedo_mp_configuration.html</guid>
		<description><![CDATA[随着一些项目对实时交易处理量和响应时间的要求较高，最近两月接触了交易中间件的安装配置。上一会写了CICS的相关内容，这次整理一下oracle tuxedo的内容。tuxedo 11g在系统架构和基础配置文件上和之前的版本没什么区别。下文内容为整理而得，较中文网络其它的文章，多了多域间网关对的配置，这一点在MP模式下还是较为有用的。
Tuxedo架构图


说明：域（DOMAIN）
域是具有相同功能或结构的应用系统的集合。应用系统可以有多台服务器组成。Tuxedo的域特性把客户/服务器模型扩展到多个独立自治的应用系统。一个域既可以是一组Tuxedo的应用程序，也可以是一组运行在另一个非Tuxedo环境中的应用程序。Tuxedo的每个域独立完成域内的操作，域间操作由域网关完成。
比较重要的进程为
1、BBL(Bulletin Board Liaison)，主要对公告板等进行管理，包含了一个公告牌的本地拷贝和本地服务器上应用的状态。
Bulletin Board（BB，公告板）：Tuxedo把系统的配置信息保存在一个共享内存中，该共享内存称为公告板。
2、DBBL(Distinguished Bulletin Board Liaison)，TUXEDO用于多服务器配置各个服务器之间的协调工作，只有当TUXEDO配置为MP方式时才需要用到DBBL。DBBL与BBL协同，保证所有的公告牌内容的一致性。
3、WSL：WorkStation Listener，Tuxedo系统自带的一个Server，它侦听一个指定的端口，WSC最初与该Server建立连接。
4、WSH：WorkStation Handler Server ，Tuxedo系统自带的一个Server，由它处理WSC与Tuxedo Server之间的通信。
5、BRIDGE，不同的服务器之间通过BRIDGE进程进行通讯，该BRIDGE的侦听IP地址及端口 在NADDR中指定。如果是在UNIX下要指定该BRIDGE所用的网络设备，如果是在NT下则不要。
6、DMADM，域间通信的进程：管理域的server,在运行时管理BDMCONFIG,对已登记的gateway group提供支持,在tuxedo系统中,只能有一个DMADM进程,且不能对它采用MSSQ,不能有REPLYQ
7、GWADM，管理DOMAIN的域网关进程（在/DOMAIN中是GWTDOMAIN）的SERVER，在运行时可以对某一组域网关（Domain Gateway Group）进行管理。主要从DMADM那里取得域的配置信息,并对域网管进程及跨越域的全局事务的LOG文件进行管理
8、GWTDOMAIN，处理DOMAIN之间的互操作,使本地域和调用远程域可以互相调用彼此的service,其中GMADM和GWTDOMAIN必须在一个组中,一个tuxedo应用可以有多个GWADM,GWTDOMAIN对,一个组只能有一个GMADM,GWTDOMAIN对,但一个tuxedo应用只能有一个DMADM, DMADM可以在任何一个组中,一个本地域可以和多个远程域实现互操作。
9、tlisten，是TUXEDO自带的管理程序，在MP模式下，完成主机之间的初始化通讯，如非MASTER机从MASTER机中下载tuxconfig配置文件。
tlisten的启动办法:tlisten –l //NLSADDR
以上几点概念清楚后，就可以尝试配置一个简单的tuxedo环境了。
 
官方的小写变大写例子

Example:
#       APPDIR=&#34;/usr/tuxedo/simpapp&#34;
#       TUXCONFIG=&#34;/usr/tuxedo/simpapp/tuxconfig&#34;
#       TUXDIR=&#34;/usr/tuxedo&#34;

&#60;machine name&#62; LMID=simple #machine name需要修改为自己的主机名
#Example:
#beatux     LMID=simple
*GROUPS
GROUP1
    [...]]]></description>
			<content:encoded><![CDATA[<p>随着一些项目对实时交易处理量和响应时间的要求较高，最近两月接触了交易中间件的安装配置。上一会写了CICS的相关内容，这次整理一下oracle tuxedo的内容。tuxedo 11g在系统架构和基础配置文件上和之前的版本没什么区别。下文内容为整理而得，较中文网络其它的文章，多了多域间网关对的配置，这一点在MP模式下还是较为有用的。</p>
<h4>Tuxedo架构图</h4>
<p><a href="http://hashei.me/wp-content/uploads/2011/12/1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tuxedo架构图" border="0" alt="tuxedo架构图" src="http://hashei.me/wp-content/uploads/2011/12/1_thumb.png" width="644" height="293" /></a></p>
</p>
<p>说明：域（DOMAIN）</p>
<p>域是具有相同功能或结构的应用系统的集合。应用系统可以有多台服务器组成。Tuxedo的域特性把客户/服务器模型扩展到多个独立自治的应用系统。一个域既可以是一组Tuxedo的应用程序，也可以是一组运行在另一个非Tuxedo环境中的应用程序。Tuxedo的每个域独立完成域内的操作，域间操作由域网关完成。</p>
<p>比较重要的进程为</p>
<p>1、BBL(Bulletin Board Liaison)，主要对公告板等进行管理，包含了一个公告牌的本地拷贝和本地服务器上应用的状态。</p>
<p>Bulletin Board（BB，公告板）：Tuxedo把系统的配置信息保存在一个共享内存中，该共享内存称为公告板。</p>
<p>2、DBBL(Distinguished Bulletin Board Liaison)，TUXEDO用于多服务器配置各个服务器之间的协调工作，<strong>只有当TUXEDO配置为MP方式时才需要用到DBBL</strong>。DBBL与BBL协同，保证所有的公告牌内容的一致性。</p>
<p>3、WSL：WorkStation Listener，Tuxedo系统自带的一个Server，它侦听一个指定的端口，WSC最初与该Server建立连接。</p>
<p>4、WSH：WorkStation Handler Server ，Tuxedo系统自带的一个Server，由它处理WSC与Tuxedo Server之间的通信。</p>
<p>5、BRIDGE，不同的服务器之间通过BRIDGE进程进行通讯，该BRIDGE的侦听IP地址及端口 在NADDR中指定。如果是在UNIX下要指定该BRIDGE所用的网络设备，如果是在NT下则不要。</p>
<p>6、DMADM，域间通信的进程：管理域的server,在运行时管理BDMCONFIG,对已登记的gateway group提供支持,在tuxedo系统中,只能有一个DMADM进程,且不能对它采用MSSQ,不能有REPLYQ</p>
<p>7、GWADM，管理DOMAIN的域网关进程（在/DOMAIN中是GWTDOMAIN）的SERVER，在运行时可以对某一组域网关（Domain Gateway Group）进行管理。主要从DMADM那里取得域的配置信息,并对域网管进程及跨越域的全局事务的LOG文件进行管理</p>
<p>8、GWTDOMAIN，处理DOMAIN之间的互操作,使本地域和调用远程域可以互相调用彼此的service,其中GMADM和GWTDOMAIN<strong>必须</strong>在一个组中,一个tuxedo应用<strong>可以有多个</strong>GWADM,GWTDOMAIN对,一个组<strong>只能</strong>有一个GMADM,GWTDOMAIN对,但一个tuxedo应用<strong>只能有</strong>一个DMADM, DMADM可以在任何一个组中,一个本地域可以和<strong>多个</strong>远程域实现互操作。</p>
<p>9、tlisten，是TUXEDO自带的管理程序，在MP模式下，完成主机之间的初始化通讯，如非MASTER机从MASTER机中下载tuxconfig配置文件。</p>
<p>tlisten的启动办法:tlisten –l //NLSADDR</p>
<p>以上几点概念清楚后，就可以尝试配置一个简单的tuxedo环境了。</p>
<p> <span id="more-1168"></span><br />
<h4>官方的小写变大写例子</h4>
<div>
<pre>Example:
#       APPDIR=&quot;<span style="color: #8b0000">/usr/tuxedo/simpapp</span>&quot;
#       TUXCONFIG=&quot;<span style="color: #8b0000">/usr/tuxedo/simpapp/tuxconfig</span>&quot;
#       TUXDIR=&quot;<span style="color: #8b0000">/usr/tuxedo</span>&quot;

&lt;machine name&gt; LMID=simple #machine name需要修改为自己的主机名
#Example:
#beatux     LMID=simple
*GROUPS
GROUP1
    LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
        CLOPT=&quot;<span style="color: #8b0000">-A</span>&quot;
simpserv    SRVGRP=GROUP1 SRVID=1
*SERVICES
TOUPPER</pre>
</div>
<h4>配置文件的各个部分</h4>
<p>1、RESOURCES：设置域范围参数（必须）</p>
<p>RESOURCES小节是一个必须存在的小节，并且必须是配置文件中的第一个小节。本节包括如下信息：</p>
<p>• 共享内存的地址（IPCKEY）<br />
  <br />• 启动和关闭服务程序的管理点（MASTER） </p>
<p>• 访问应用的用户控制（UID、GID和PERM） </p>
<p>• 本应用的安全级别（SECURITY、AUTHSVC） </p>
<p>• 应用中各进程的IPC限制，服务器进程的数量，以及提供的服务数（MAXACCESSERS、MAXSERVERS、MAXSERVICES） </p>
<p>• 应用结构（MODEL），表明是单机器应用还是多机器应用 </p>
<p>• 是否使用服务器负载均衡（LDBAL） </p>
<p>• 缓冲区类型和子类型的最大数目（MAXBUFTYPE、MAXBUFSTYPE） </p>
<p>• 公告牌健全扫描（sanity scans）的时间间隔（SCANUNIT、SANITYSCAN） </p>
<p>• 服务请求的超时值（BLOCKTIME） </p>
<p>• 并发会话最大数目（MAXCONV） </p>
<p>• 主动通知方法（NOTIFY、USIGNAL）</p>
<p>2、MACHINES：配置机器（必须）</p>
<p>应用中的每个机器必须在配置文件的MACHINES小节中有一个入口项，并且该小节必须是配置文件的第二个小节。MACHINES小节中包含应用中每个机器的如下信息：</p>
<p>• 机器地址到逻辑标识（LMID）的映射<br />
  <br />• 配置文件的位置（TUXCONFIG） </p>
<p>• BEA TUXEDO软件的安装位置（TUXDIR） </p>
<p>• 应用服务器的位置（APPDIR） </p>
<p>• 应用日志文件的位置（ULOGPFX） </p>
<p>• 环境文件的位置（ENVFILE）</p>
<p>MACHINES小节中必需的几个参数是LMID、TUXCONFIG、TUXDIR和APPDIR</p>
<p>3、GROUPS：配置组信息（必须） </p>
<p>通过GROUPS小节可以指定从逻辑上分组的服务器集，这些服务器组以后可被用来访问资源管理器（resource managers）,并且便于服务器组迁移。配置文件的GROUPS小节包含对服务器组的定义。<strong>你必须为有应用服务器运行其上的机器定义至少一个服务器组</strong>。</p>
<p>对于无事务、非分布式系统，组非常简单，只需定义组名到组号的基本映射及各组的逻辑机器即可。此外还有更多灵活选项以支持分布式的带事务的系统。</p>
<p>组名是GROUPS小节入口项的基础，它是一个字母数字混合名称，通过它来识别一个组。<strong>一个组必须有一个唯一的组号（GRPNO），并且必须位于一个逻辑机器（LMID）上</strong>，LMID也是必须的。</p>
<p>4、SERVERS：配置服务器（可选）</p>
<p>配置文件的SERVERS小节包含某个服务器进程的信息。虽然本小节并非必需，但是一个配置文件中没有本小节的应用将没有应用服务器，因此将没有实际功能。本小节的每个入口项代表一个要在应用中被启动的服务器进程，包含如下信息：</p>
<p>• 一个服务器名称、组别以及数字标识（SRVGRP、SRVID）<br />
  <br />• 命令行选项（CLOPT） </p>
<p>• 执行服务器启动顺序和启动个数的参数（SEQUENCE、MIN、MAX） </p>
<p>• 一个服务器专用的环境文件（ENVFILE） </p>
<p>• 与服务器队列有关的信息（RQADDR、RQPERM、REPLYQ、RPPERM） </p>
<p>• 重启动信息（RESTART、RCMD、MAXGEN、GRACE） </p>
<p>• 服务器被指定为一个会话服务器（CONV） </p>
<p>• 重载系统范围的共享内存访问设置（SYSTEM_ACCESS）</p>
<p>5、SERVICES：配置服务（可选）</p>
<p>通过配置文件中的SERVICES小节可以指定BEA TUXEDO服务的信息。这些信息对于无事务、非分布式应用相对简单。SERVICES小节包含下面一些信息：<br />
  <br />• 负载均衡信息（SRVGRP） </p>
<p>• 给服务赋予优先级 </p>
<p>• 为不同的服务器组指定不同的服务参数 </p>
<p>• 缓冲区类型检查信息（BUFTYPE）</p>
<p>6、ROUTING：配置路由（可选）</p>
<p>UBBCONFIG文件的ROUTING小节允许对在SERVICES小节中命名的路由标准（routing criteria）进行全面的定义（针对BEA TUXEDO数据依赖性路由）。</p>
<p>7、NETGROUPS/NETWORK：配置网络信息</p>
<p>UBBCONFIG文件的NETGROUPS小节描述在在局域网环境下应用可用的网络组。对于网络组的个数没有限制，每个网络组可能被分配一对机器。一个网络组不同网络成员之间采用的通讯方法由优先级机制（NETPRIO）决定。 </p>
<p>每个LMID都必须是缺省网络组（DEFAULTNET）的成员，这个组的网络组号（即NETGRPNO）必须为零。不过可以更改DEFAULTNET的缺省优先级。</p>
<p>#NADDR指定网络连接的接入点。 </p>
<p>#NLSADDR则指定tlisten的接入点。 </p>
<p>#BRIDGE则指TCP连接所用的设备文件。</p>
<h4>MP的例子</h4>
<p>下面这个是实际用到的例子，group、servers、services和GWTDOMAIN都是分布在两台机器上。</p>
<div>
<pre>#ident	&quot;<span style="color: #8b0000">@(#) apps/simpapp/ubbSITE1	$Revision: 1.3 $</span>&quot;

#Skeleton UBBCONFIG file <span style="color: #0000ff">for</span> the TUXEDO SITE1 Application.
#Replace the &lt;bracketed&gt; items with the appropriate values.

*RESOURCES
IPCKEY		230399

DOMAINID	domainID
MASTER		SITE1,SITE2
MAXACCESSERS 100
MAXSERVERS	60
MAXSERVICES	60
<strong><font color="#ff0000">MODEL		MP</font></strong>
<strong><font color="#ff0000">OPTIONS		LAN</font></strong>
LDBAL		Y

*MACHINES
&quot;<span style="color: #8b0000">machine name1</span>&quot; LMID=SITE1
		APPDIR=&quot;<span style="color: #8b0000">C:\installroot</span>&quot;
		TUXCONFIG=&quot;<span style="color: #8b0000">C:\installroot\tuxconfig</span>&quot;
		TUXDIR=&quot;<span style="color: #8b0000">C:\installroot\oracle\tuxedo11gR1</span>&quot;
		MAXWSCLIENTS=20

&quot;<font color="#8b0000">machine name2</font>&quot; LMID=SITE2
		APPDIR=&quot;<span style="color: #8b0000">c:\installroot</span>&quot;
		TUXCONFIG=&quot;<span style="color: #8b0000">c:\installroot\tuxconfig</span>&quot;
		TUXDIR=&quot;<span style="color: #8b0000">C:\installroot\oracle\tuxedo11gR1</span>&quot;
		MAXWSCLIENTS=20

*NETWORK
SITE1
		NADDR=&quot;<span style="color: #8b0000">//IP1:9991</span>&quot;
		NLSADDR=&quot;<span style="color: #8b0000">//IP1:9999</span>&quot;

SITE2
		NADDR=&quot;<span style="color: #8b0000">//IP2:9991</span>&quot;
		NLSADDR=&quot;<span style="color: #8b0000">//IP2:9999</span>&quot;

*GROUPS
BSGRP1   LMID=SITE1 GRPNO=1
WSGRP1   LMID=SITE1 GRPNO=2
LDMGRP  LMID=SITE1 GRPNO=3
LGWGRP1 LMID=SITE1 GRPNO=4
JSLGRP1  LMID=SITE1 GRPNO = 5
JREPGRP1 LMID=SITE1 GRPNO = 6

BSGRP2   LMID=SITE2 GRPNO=10
WSGRP2   LMID=SITE2 GRPNO=20
LDMGRP2  LMID=SITE2 GRPNO=30
LGWGRP2 LMID=SITE2 GRPNO=40
JSLGRP2  LMID=SITE2 GRPNO = 50
JREPGRP2 LMID=SITE2 GRPNO = 60

*SERVERS
DEFAULT:
		CLOPT=&quot;<span style="color: #8b0000">-A</span>&quot;
yktfront SRVGRP=BSGRP1 SRVID=51
	CLOPT=&quot;<span style="color: #8b0000">-A -- -ws C:installroot\wsclient <a href="http://ip:port/webservice/services/CommWebService">http://ip:port/webservice/services/CommWebService</a> -cics WZMIB cicsuser cicsuser</span>&quot;
		CLOPT=&quot;<span style="color: #8b0000">-A</span>&quot;
yktfront SRVGRP=BSGRP2 SRVID=52
	CLOPT=&quot;<span style="color: #8b0000">-A -- -ws c:installroot\wsclient <a href="http://IP:port/webservice/services/CommWebService">http://IP:port/webservice/services/CommWebService</a> -cics WZMIB cicsuser cicsuser</span>&quot;

WSL
	SRVID=61
	SRVGRP=WSGRP1
	RESTART=Y
	MAXGEN=10
	GRACE=3600
	CLOPT=&quot;<span style="color: #8b0000">-A -- -n //IP1:5000 -m 2 -M 10 -x 5 -c 1024 -w WSH</span>&quot;

WSL
	SRVID=62
	SRVGRP=WSGRP2
	RESTART=Y
	MAXGEN=10
	GRACE=3600
	CLOPT=&quot;<span style="color: #8b0000">-A -- -n //IP2:5000 -m 2 -M 10 -x 5 -c 1024 -w WSH</span>&quot;

JSL SRVGRP=JSLGRP1 SRVID=63 CLOPT=&quot;<span style="color: #8b0000">-A -- -n //IP1:6000 -M 10 -x 10 -m 2</span>&quot;
JREPSVR SRVGRP=JREPGRP1 SRVID=64	CLOPT=&quot;<span style="color: #8b0000">-A -- -W -P C:\installroot\jrepository</span>&quot;	

JSL SRVGRP=JSLGRP2 SRVID=65 CLOPT=&quot;<span style="color: #8b0000">-A -- -n //IP2:6000 -M 10 -x 10 -m 2</span>&quot;
JREPSVR SRVGRP=JREPGRP2 SRVID=66	CLOPT=&quot;<span style="color: #8b0000">-A -- <strong><font color="#ff0000">这里没有-W参数</font></strong>-P C:\installroot\jrepository</span>&quot;

DMADM	SRVGRP=LDMGRP	SRVID=71 REPLYQ=N
GWADM	SRVGRP=LGWGRP1	SRVID=72 REPLYQ=N
GWTDOMAIN SRVGRP=LGWGRP1 SRVID=73 REPLYQ=Y
GWADM	SRVGRP=LGWGRP2	SRVID=75 REPLYQ=N
GWTDOMAIN SRVGRP=LGWGRP2 SRVID=76 REPLYQ=Y

*SERVICES
serviceProduct</pre>
</div>
<p>要点如红色加粗部分，另外DMADM只能有一个，上面概念里也说了。</p>
<h4>DM config配置</h4>
<p>要域间调用，还需要DM配置</p>
<div>
<pre>*DM_LOCAL
#####一般建议将ACCESSPOINTID配置成与前面的名字相同,不是必须的
#####另外,主动连接端建议开启onstartup连接策略
#####为了让两个DOMAIN之间通讯，DOMAIN名字必须一一对应，所以配置时，名字需要全局考虑，避免重名
DOM1	GWGRP=LGWGRP1	TYPE=TDOMAIN	ACCESSPOINTID=&quot;<span style="color: #8b0000">DOM1</span>&quot; BLOCKTIME=30	CONNECTION_POLICY=ON_STARTUP
DOM2	GWGRP=LGWGRP2	TYPE=TDOMAIN	ACCESSPOINTID=&quot;<span style="color: #8b0000">DOM2</span>&quot; BLOCKTIME=30	CONNECTION_POLICY=ON_STARTUP
#############################################################################################

*DM_REMOTE
WZYKT	TYPE=TDOMAIN	DOMAINID=&quot;<span style="color: #8b0000">WZYKT</span>&quot;

*DM_TDOMAIN
YKTDOM73	NWADDR=&quot;<span style="color: #8b0000">//IP1:9990</span>&quot;
YKTDOM74	NWADDR=&quot;<span style="color: #8b0000">//IP2:9990</span>&quot;
WZYKT	NWADDR=&quot;<span style="color: #8b0000">//IP REMOTE:9990</span>&quot; CONNECTION_POLICY=ON_STARTUP

*DM_EXPORT
serviceProduct 	LDOM=DOM1	RNAME=&quot;<span style="color: #8b0000">自定义名称，如abc123</span>&quot;
#####  以下信息必须添加,否则WZYKT只能通过DOM1访问abc123服务  ######
serviceProduct	LDOM=DOM2	RNAME=&quot;<span style="color: #8b0000">abc123</span>&quot;
#########################################################################

*DM_IMPORT
YSCENTER	RDOM=WZYKT LDOM=DOM1 RNAME=&quot;<span style="color: #8b0000">YSCENTER</span>&quot;
#####  以下信息必须添加,否则只有DOM1才能访问到WZYKT上的YSCENTER服务  ######
YSCENTER	RDOM=WZYKT LDOM=DOM2 RNAME=&quot;<span style="color: #8b0000">YSCENTER</span>&quot;
###############################################################################</pre>
</div>
<p></p>
<h4>编译文件，启动操作</h4>
<p>在SITE1上执行tmloadcf ubbconfig命令</p>
<p>在SITE1和2上执行dmloadcf dmconfig命令</p>
<p>确定SITE1、2上tlisten已经监听9999端口，否则tlisten –l //NLSADDR：port</p>
<p>确定两个config目录下tlisten.pw里密码相同，否则用tlistenpw命令添加一条</p>
<h4>最后</h4>
<p>其它深入部分以后遇到了再写</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2011/12/tuxedo_mp_configuration.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>理智与情感（一）</title>
		<link>http://www.hashei.me/2011/11/sense_and_sensibility_one.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sense_and_sensibility_one</link>
		<comments>http://www.hashei.me/2011/11/sense_and_sensibility_one.html#comments</comments>
		<pubDate>Mon, 14 Nov 2011 15:37:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[生活感想]]></category>
		<category><![CDATA[理智与情感]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2011/11/sense_and_sensibility_one.html</guid>
		<description><![CDATA[这个月更新的文章还不少，不过第一篇是10年，这两篇是11年，希望下一篇不要是在方舟上更新的。
我标题写《理智与情感》，当然不是要向Jane Austen叫板，而是最近几年的人生经历让我感悟到：我们人生所有的烦恼乃至痛苦，都来自于一种矛盾——在需要理智的时候感性，而在需要情感的时候却理性过度。
首先澄清一点，本人85年生，写人生感悟并不是因为老气横秋，而是因为直到暮年才有自己的心得或许对得起子孙，却断然对不住自己。而他人只能给一些客套的赞美与廉价的鼓励，与大多数困难障碍相比，它们都更加凶险。所以我要在年轻的时候给自己定一个准则，哪怕选了一条充满荆棘的路，也好过原地兜圈子。
在做一些影响久远的决策前，我们总是显得轻率。我在之前的一篇博客里提到过，我们选择专业、选择职业，很大程度上受当时社会潮流的影响，为了“从这5年后，当你看到你的朋友买车买房时不会诅咒自己。”。可是拉长到几十年来看，一时的潮流犹如昙花一现。上世纪六七十年代工人最光荣，哪想九十年代成了需要哪里跌倒哪里站起的一批人。八十年代改革春风带起的个体户、乡镇经济，九十年代在港商台商和私营经济的冲击之下，每况愈下，纷纷破产。而那时风光的私营企业，如今不得不面对日益沉重的税收和垄断国企的咄咄逼进。现在毕业生挤破头都想进去的公务员，我小时候看的《故事会》里，总要面对工资打白条的窘境。如果说之前的时代是因为缺乏选择，所以一辈人不得不荣辱与共，那么现在这个选择多元化的日子里，选择一个适合自己的工作就很必要了。而这个需要理智思考的过程，却退位让给了感性选择。
当今年轻人，除了工作，关心的话题之一必然有房产。无房不成家也好，有房只不过是七十年的租期也罢，你不想关心这个话题，父母、朋友、新闻会把你硬拽进来，最近因为房价下跌而砸开发商售楼部的报道可谓一场悲喜剧。不过这个问题，经历过大风大浪的美国人早就总结给你了——房产买好了是资产，买遭了是负债。就近的香港市场来说，也已历经三次大起大落。所以除非你富二代，除非你是颜回能居陋巷而不改其乐，用房产让自己财富增长是个跨越不过去的难题。可是有多少姻缘因为房产的原因而拆散，又有多少夫妻在坚硬的钢筋水泥的城市里扎不下根来？这是理性让位感性的第二个例子。
第三个例子，是父母一辈时常叮嘱的“莫谈国事”，可是梁漱溟老生前曾说“中国人是公事没人管，私事人人都来管。只有不知自己自由的人，才会不知道尊重别人的自由；只有不知自己的自由也不知别人自由的人，才会完全冷漠于公干，热衷于私涉。大多数人都懂得并珍视自己的自由时，一个社会才会有宪政制度，有民主政治，有自由与共和精神。”现在网上种种恶性事件，你不去关心，将来总会落到你身边，丧钟是为你我而鸣。但是如何关心又是个大问题，是像《乌合之众》里描写的大众的非理性幻想和群众性癫狂那样，还是独立于大众之外，基于批判性思维来理解和分析？“思想因浅薄而确定，确定导致了专制；思想因深刻而怀疑，怀疑导致了民主”，可惜我也时常因为冲动而放弃了怀疑精神，以致事后看来像个大傻瓜。
说到冲动，那我时常又嫌自己做的不够，总是差一点不反顾的勇气，让我始终做不成想做的那个自己。面对生活和感情，总是用过于理智的声音来为自己的不作为而开脱。诚然感情不是一帆风顺的，但是担心未曾发生的事不得不令人怀疑是性格悲观还是缺乏自信了。这是感性让位理性的例子。
如上种种的左右大脑错位，导致了生活中的迷茫、困惑，又进而衍生出了不安全感。所谓不安全感，在我看来就是缺乏确定性。我们在一个陌生的地点，不知道这是哪里、举目无亲、不知道怎么回到自己熟悉的地方，会十分害怕。同理在人生的道路上，不知道过去的日子是怎么过去的，不知道现在在做什么，不清楚将来会怎么样，就产生了极大的不安全感。
以上唠叨了那么多是为什么要写《理智与情感》，对这些问题的解答其实很简单，要找到自己的准则，也就是形成自己的人生观、价值观。你肯定想这不是说了等于没说么？我们成长过程中确实是会灌很多心灵鸡汤，学校、家庭也灌输了很多，但是这些都没有经过自己的思考，有些还是互相矛盾的，有些知道不错但做起来十分痛苦。所以唯有坦然的面对自己，和心灵对话，找到适合自己的，逻辑自洽的三观。
这个话题会是一个长篇，接下来几篇会详细写写我总结的思考。这篇的最后附上雨果的一段话，也是我所希望达到的境界：生活，就是理解。生活，就是面对现实微笑，就是越过障碍注视将来。生活，就是自身有一架天平，在那上面衡量善恶。生活，就是有正义感，有真理，有理智，就是忠矢不渝、诚实不欺、表里如一、心智纯正、并对权利义务同等重视。生活，就是知道自己的价值、自己所能做到的与自己应该做到的。
  Copyright &#169; 2008 This feed is for personal, non-commercial use only
聚沙成塔-小哈的记事薄 by hashei 
如果喜欢，欢迎订阅feed.hashei.com
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949]]></description>
			<content:encoded><![CDATA[<p>这个月更新的文章还不少，不过第一篇是10年，这两篇是11年，希望下一篇不要是在方舟上更新的。</p>
<p>我标题写《理智与情感》，当然不是要向Jane Austen叫板，而是最近几年的人生经历让我感悟到：我们人生所有的烦恼乃至痛苦，都来自于一种矛盾——在需要理智的时候感性，而在需要情感的时候却理性过度。</p>
<p>首先澄清一点，本人85年生，写人生感悟并不是因为老气横秋，而是因为直到暮年才有自己的心得或许对得起子孙，却断然对不住自己。而他人只能给一些客套的赞美与廉价的鼓励，与大多数困难障碍相比，它们都更加凶险。所以我要在年轻的时候给自己定一个准则，哪怕选了一条充满荆棘的路，也好过原地兜圈子。</p>
<p>在做一些影响久远的决策前，我们总是显得轻率。我在之前的一篇博客里提到过，我们选择专业、选择职业，很大程度上受当时社会潮流的影响，为了“<a href="http://www.hashei.me/2010/08/three_idiots.html" target="_blank">从这5年后，当你看到你的朋友买车买房时不会诅咒自己</a>。”。可是拉长到几十年来看，一时的潮流犹如昙花一现。上世纪六七十年代工人最光荣，哪想九十年代成了需要哪里跌倒哪里站起的一批人。八十年代改革春风带起的个体户、乡镇经济，九十年代在港商台商和私营经济的冲击之下，每况愈下，纷纷破产。而那时风光的私营企业，如今不得不面对日益沉重的税收和垄断国企的咄咄逼进。现在毕业生挤破头都想进去的公务员，我小时候看的《故事会》里，总要面对工资打白条的窘境。如果说之前的时代是因为缺乏选择，所以一辈人不得不荣辱与共，那么现在这个选择多元化的日子里，选择一个适合自己的工作就很必要了。而这个需要理智思考的过程，却退位让给了感性选择。</p>
<p>当今年轻人，除了工作，关心的话题之一必然有房产。无房不成家也好，有房只不过是七十年的租期也罢，你不想关心这个话题，父母、朋友、新闻会把你硬拽进来，最近因为房价下跌而砸开发商售楼部的报道可谓一场悲喜剧。不过这个问题，经历过大风大浪的美国人早就总结给你了——房产买好了是资产，买遭了是负债。就近的香港市场来说，也已历经三次大起大落。所以除非你富二代，除非你是颜回能居陋巷而不改其乐，用房产让自己财富增长是个跨越不过去的难题。可是有多少姻缘因为房产的原因而拆散，又有多少夫妻在坚硬的钢筋水泥的城市里扎不下根来？这是理性让位感性的第二个例子。</p>
<p>第三个例子，是父母一辈时常叮嘱的“莫谈国事”，可是梁漱溟老生前曾说“中国人是公事没人管，私事人人都来管。只有不知自己自由的人，才会不知道尊重别人的自由；只有不知自己的自由也不知别人自由的人，才会完全冷漠于公干，热衷于私涉。大多数人都懂得并珍视自己的自由时，一个社会才会有宪政制度，有民主政治，有自由与共和精神。”现在网上种种恶性事件，你不去关心，将来总会落到你身边，丧钟是为你我而鸣。但是如何关心又是个大问题，是像《乌合之众》里描写的大众的非理性幻想和群众性癫狂那样，还是独立于大众之外，基于批判性思维来理解和分析？“思想因浅薄而确定，确定导致了专制；思想因深刻而怀疑，怀疑导致了民主”，可惜我也时常因为冲动而放弃了怀疑精神，以致事后看来像个大傻瓜。</p>
<p>说到冲动，那我时常又嫌自己做的不够，总是差一点不反顾的勇气，让我始终做不成想做的那个自己。面对生活和感情，总是用过于理智的声音来为自己的不作为而开脱。诚然感情不是一帆风顺的，但是担心未曾发生的事不得不令人怀疑是性格悲观还是缺乏自信了。这是感性让位理性的例子。</p>
<p>如上种种的左右大脑错位，导致了生活中的迷茫、困惑，又进而衍生出了不安全感。所谓不安全感，在我看来就是缺乏确定性。我们在一个陌生的地点，不知道这是哪里、举目无亲、不知道怎么回到自己熟悉的地方，会十分害怕。同理在人生的道路上，不知道过去的日子是怎么过去的，不知道现在在做什么，不清楚将来会怎么样，就产生了极大的不安全感。</p>
<p>以上唠叨了那么多是为什么要写《理智与情感》，对这些问题的解答其实很简单，要找到自己的准则，也就是形成自己的人生观、价值观。你肯定想这不是说了等于没说么？我们成长过程中确实是会灌很多心灵鸡汤，学校、家庭也灌输了很多，但是这些都没有经过自己的思考，有些还是互相矛盾的，有些知道不错但做起来十分痛苦。所以唯有坦然的面对自己，和心灵对话，找到适合自己的，逻辑自洽的三观。</p>
<p>这个话题会是一个长篇，接下来几篇会详细写写我总结的思考。这篇的最后附上雨果的一段话，也是我所希望达到的境界：生活，就是理解。生活，就是面对现实微笑，就是越过障碍注视将来。生活，就是自身有一架天平，在那上面衡量善恶。生活，就是有正义感，有真理，有理智，就是忠矢不渝、诚实不欺、表里如一、心智纯正、并对权利义务同等重视。生活，就是知道自己的价值、自己所能做到的与自己应该做到的。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2011/11/sense_and_sensibility_one.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CICS7.1安装与配置步骤</title>
		<link>http://www.hashei.me/2011/11/install-cics7-1-on-aix61.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=install-cics7-1-on-aix61</link>
		<comments>http://www.hashei.me/2011/11/install-cics7-1-on-aix61.html#comments</comments>
		<pubDate>Sun, 13 Nov 2011 11:19:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[CICS]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2011/11/install-cics7-1-on-aix61.html</guid>
		<description><![CDATA[今年国庆扬州之行在AIX6上安装CICS7.1，耗费一周精力仍旧错误百出，最后依靠这篇步骤完成成功。贴出来让有需要的人也少走弯路吧
1. 安装环境
主机：
操作系统：AIX6100-06-01-1043，使用异步IO(无需设定，系统自动)
数据库：Oracle11.2.0.2（单机版本），安装constant client 32bit（复制为lib32目录）
编译器：XLC10.1
2. 创建cics、cicsterm和cicssm组，创建cics用户和cicssm用户添加至cics（primary group）、cicsterm和cicssm组，采用本地认证，Soft FILE size核soft CORE file size的参数值设置-1（unlimited）。
3. 如果数据库是Oracle10.2.0.1，则执行这个步骤：将root用户和cics用户添加到dba组。Oracle10.2.0.1安装完成后安装目录下的子目录的属性大都为750，库文件属性为640，导致cics用户无法访问Oracle的库文件。并且这些目录文件的属性和用户的umask设置没有关系。
4. 创建/var/cics_servers、/var/cics_regions文件系统并且mount，修改属性为cics:cics。
5. 将root添加至cics与cicsterm组并且是组的管理员，并将环境变量加入其profile文件（程序安装时自动添加到/etc/profile文件）。
export LANG=en_US
export PATH=$PATH:/usr/lpp/cics/bin:/usr/lpp/cicssm/bin
export LIBPATH=$LIBPATH:/usr/lpp/cics/lib:/usr/lpp/cicssm/lib
export NLSPATH=/usr/lpp/cics/msg/%L/%N:/usr/lpp/cics/msg/C/%N:/usr/lpp/cicssm/msg/en_US/%N:/usr/lib/nls/msg/%L/%N
6. 安装gsk（在CICS光盘的/gskit/gskta.rte）
7. 安装CICS，执行./TXSeriesV71-AIX.bin -i console
ü 选择安装时的语言环境
ü “产品简介”
ü 如果已经安装了6.X版本，确认升级到7.1版本
ü 接受软件协议，开始安装。确认/usr文件系统有足够的空间
ü 安装完成后可以选择察看“安装选择摘要”，确认安装
ü 安装完成后，可以选择察看readme文件以及安装日志（install_location/logs）。如果安装失败，在/tmp中创建日志文件
ü 不创建缺省的CICS region以及SFS server
8. 安装CICS7.1.0.2升级补丁，方法和安装CICS7.1类似。
9. 创建SFS_SERV用户，并添加至cics、cicsterm和cicssm组。这个用户名称是系统保留的SFS服务器的short name，SFS服务器根据short name名称定位使用的SFS存储。
10. 创建sfs_SFS_SERV与log_SFS_SERV逻辑卷（注：SFS服务器数据卷与日志卷名的格式为sfs_sfsUserName、log_ sfsUserName，其中sfsUserName为前面步骤创建的用户名），并输入chown SFS_SERV:cics /dev/*sfs_SFS_SERV /dev/*log_SFS_SERV命令更改其属主。sfs_sfsUserName和log_ sfsUserName大小为1G。
11. 输入/usr/lpp/cics/bin/cicsdefaultservers命令自动创建缺省的SFS服务器资源定义文件。
12. 输入cicssfscreate -v /.:/cics/sfs/sfsServerName，并将前面步骤创建的SFS_SERV用户的Home目录更改为/var/cics_servers/SSD/cics/sfs/sfsServerName，其中sfsServerName为本步中所创建的SFS服务器名。
13. 输入/usr/lpp/cics/bin/cicssfs –v /.:/cics/sfs/sfsServerName StartType=cold命令冷启动SFS Server，并输入/usr/lpp/cics/bin/sfsadmin list lvols -server /.:/cics/sfs/sfsServerName命令来验证SFS Server是否已正确启动。如果SFS [...]]]></description>
			<content:encoded><![CDATA[<p>今年国庆扬州之行在AIX6上安装CICS7.1，耗费一周精力仍旧错误百出，最后依靠这篇步骤完成成功。贴出来让有需要的人也少走弯路吧</p>
<p>1. 安装环境</p>
<p>主机：</p>
<p>操作系统：AIX6100-06-01-1043，使用异步IO(无需设定，系统自动)</p>
<p>数据库：Oracle11.2.0.2（单机版本），安装constant client 32bit（复制为lib32目录）</p>
<p>编译器：XLC10.1</p>
<p>2. 创建cics、cicsterm和cicssm组，创建cics用户和cicssm用户添加至cics（primary group）、cicsterm和cicssm组，采用本地认证，Soft FILE size核soft CORE file size的参数值设置-1（unlimited）。</p>
<p>3. 如果数据库是Oracle10.2.0.1，则执行这个步骤：将root用户和cics用户添加到dba组。Oracle10.2.0.1安装完成后安装目录下的子目录的属性大都为750，库文件属性为640，导致cics用户无法访问Oracle的库文件。并且这些目录文件的属性和用户的umask设置没有关系。</p>
<p>4. 创建/var/cics_servers、/var/cics_regions文件系统并且mount，修改属性为cics:cics。</p>
<p>5. 将root添加至cics与cicsterm组并且是组的管理员，并将环境变量加入其profile文件（程序安装时自动添加到/etc/profile文件）。</p>
<p>export LANG=en_US</p>
<p>export PATH=$PATH:/usr/lpp/cics/bin:/usr/lpp/cicssm/bin</p>
<p>export LIBPATH=$LIBPATH:/usr/lpp/cics/lib:/usr/lpp/cicssm/lib</p>
<p>export NLSPATH=/usr/lpp/cics/msg/%L/%N:/usr/lpp/cics/msg/C/%N:/usr/lpp/cicssm/msg/en_US/%N:/usr/lib/nls/msg/%L/%N</p>
<p>6. 安装gsk（在CICS光盘的/gskit/gskta.rte）</p>
<p>7. 安装CICS，执行./TXSeriesV71-AIX.bin -i console</p>
<p>ü 选择安装时的语言环境</p>
<p>ü “产品简介”</p>
<p>ü 如果已经安装了6.X版本，确认升级到7.1版本</p>
<p>ü 接受软件协议，开始安装。确认/usr文件系统有足够的空间</p>
<p>ü 安装完成后可以选择察看“安装选择摘要”，确认安装</p>
<p>ü 安装完成后，可以选择察看readme文件以及安装日志（install_location/logs）。如果安装失败，在/tmp中创建日志文件</p>
<p>ü 不创建缺省的CICS region以及SFS server</p>
<p>8. 安装CICS7.1.0.2升级补丁，方法和安装CICS7.1类似。</p>
<p>9. 创建SFS_SERV用户，并添加至cics、cicsterm和cicssm组。这个用户名称是系统保留的SFS服务器的short name，SFS服务器根据short name名称定位使用的SFS存储。</p>
<p>10. 创建sfs_SFS_SERV与log_SFS_SERV逻辑卷（注：SFS服务器数据卷与日志卷名的格式为sfs_<i>sfsUserName</i>、log_<i> sfsUserName</i>，其中sfsUserName为前面步骤创建的用户名），并输入<b>chown </b>SFS_SERV<b>:cics /dev/*sfs_</b>SFS_SERV<b> /dev/*log_</b>SFS_SERV命令更改其属主。sfs_<i>sfsUserName</i>和log_<i> sfsUserName</i>大小为1G。</p>
<p>11. 输入<b>/usr/lpp/cics/bin/cicsdefaultservers</b>命令自动创建缺省的SFS服务器资源定义文件。</p>
<p>12. 输入<b>cicssfscreate -v /.:/cics/sfs/<i>sfsServerName</i></b>，并将前面步骤创建的SFS_SERV用户的Home目录更改为/var/cics_servers/SSD/cics/sfs/<i>sfsServerName</i>，其中sfsServerName为本步中所创建的SFS服务器名。</p>
<p>13. 输入<b>/usr/lpp/cics/bin/cicssfs –v /.:/cics/sfs/<i>sfsServerName</i> StartType=cold</b>命令冷启动SFS Server，并输入<b>/usr/lpp/cics/bin/sfsadmin list lvols -server /.:/cics/sfs/<i>sfsServerName</i></b>命令来验证SFS Server是否已正确启动。如果SFS Server正常运行，那么命令输出将显示为SFS创建的数据卷的名称。如果要重建SFS Server，先停止原来的服务再删除。冷启动SFS会消除在SFS数据逻辑卷上的文件。</p>
<p>14. 通过<b>cicsdefault -r <i>cicsRegionName</i></b>命令创建CICS Region。如果是重建的话，首先通过ps –ef | grep cics找到所有的遗留进程，杀死这些遗留进程后再执行。</p>
<p>15. 输入<b>/usr/lpp/cics/bin/cicsupdate -c rd -r <i>cicsRegionName</i> DefaultFileServer=/.:/cics/sfs/<i>sfsServerName</i></b>命令，将CICS Region的 DefaultFileServer 属性更改为 SFS Server的全限定名。</p>
<p>16. 输入<b>cicsadd –c ld –r <i>cicsRegionName</i> <i>LDName</i> TCPService=’<i>serviceNa</i>’</b>命令添加配置一个新的LD，并在/etc/services文件中增加相应servieName的设置，只要增加TCP端口，缺省为1435。</p>
<p>17. 创建Switch Load File，配置XAD，连接数据库。</p>
<p>ü 保证已安装支持版本的C编译器</p>
<p>ü 保证已安装Oracle客户端与proc编译器</p>
<p>ü 保证操作系统中已设置ORACLE_HOME（对应于本地客户端软件）环境变量的值，并已完成TNS的配置，可通过sqlplus连接至Oracle数据库；</p>
<p>ü 将/usr/lpp/cics/examples/RM_support/Oracle下的oracle1pc.pc与oracle1pc.mk文件复制至/var/cics_regions/<i>cicsRegionName</i>/bin目录下；</p>
<p>ü 在该目录下根据Oracle版本通过<b>make –f oracle1pc.mk <i>oracleversion</i></b>命令生成和数据库的链接程序（Swith Load File）——oracle1pc。</p>
<p>ü 输入<b>cicsadd –c xad –r <i>cicsRegionName</i> <i>XADName</i> SwitchLoadFile=’<i>fileName</i>’ XAOpen=’Oracle_XA+Acc=P/<i>oracleUserName</i>/<i>oracleUserPassword</i>+SqlNet=<i>oracleTNSName</i>+SesTm=35+LogDir=/tmp+DbgFl=1’</b>命令添加配置一个新的XAD。</p>
<p>ü 赋予用户权限，grant select on dba_pending_transactions to <i>oracleUserName</i>;</p>
<p>18. 在/var/cics_regions/<i>cicsRegionName</i><b>/</b>environment文件中，根据数据库的配置情况设置ORACLE_SID（对应于目标数据库）、ORACLE_HOME（对应于本地客户端软件）、NLS_LANG环境变量的值，也可以设置CICS_XP_RECV_TIMEOUT的值。</p>
<p>19. 通过<b>/usr/lpp/cics/bin/cicscp –v start region <i>cicsRegionName</i> StartType=cold</b>命令冷启动Region，并通过<b>/usr/lpp/cics/bin/cicstail –r <i>cicsRegionName</i></b>命令来验证CICS是否已成功启动。</p>
<p>20. 一些命令</p>
<p>mkgroup -&#8217;A&#8217; id=&#8217;400&#8242; cics</p>
<p>mkgroup -&#8217;A&#8217; id=&#8217;401&#8242; cicsterm</p>
<p>mkgroup -&#8217;A&#8217; id=&#8217;402&#8242; cicssm</p>
<p>mkuser id=&#8217;400&#8242; pgrp=&#8217;cics&#8217; groups=&#8217;cicsterm,cicssm&#8217; cics</p>
<p>mkuser id=&#8217;401&#8242; pgrp=&#8217;cics&#8217; groups=&#8217;cicsterm,cicssm&#8217; cicssm</p>
<p>chuser fsize=&#8217;-1&#8242; core=&#8217;-1&#8242; cics</p>
<p>chuser fsize=&#8217;-1&#8242; core=&#8217;-1&#8242; cicssm</p>
<p>chgroup users=&#8217;oracle,root,cics&#8217; dba</p>
<p>mklv -t jfs2 -y lvcicssfs -c 2 rootvg 8</p>
<p>mklv -t jfs2 -y lvcicsreg -c 2 rootvg 8</p>
<p>crfs -v jfs2 -d&#8217;lvcicssfs&#8217; -m&#8217;/var/cics_servers&#8217; -A yes -p rw -a agblksize=&#8217;4096&#8242;</p>
<p>crfs -v jfs2 -d&#8217;lvcicsreg&#8217; -m&#8217;/var/cics_regions&#8217; -A yes -p rw -a agblksize=&#8217;4096&#8242;</p>
<p>mount /var/cics_servers</p>
<p>mount /var/cics_regions</p>
<p>df -k </p>
<p>chown cics:cics /var/cics_servers</p>
<p>chown cics:cics /var/cics_regions</p>
<p>chgroup users=&#8217;cics,cicssm,root&#8217; cics </p>
<p>chgroup users=&#8217;cics,cicssm,root&#8217; cicsterm</p>
<p>export LANG=en_US</p>
<p>export PATH=$PATH:/usr/lpp/cics/bin:/usr/lpp/cicssm/bin</p>
<p>export LIBPATH=$LIBPATH:/usr/lpp/cics/lib:/usr/lpp/cicssm/lib</p>
<p>export NLSPATH=/usr/lpp/cics/msg/%L/%N:/usr/lpp/cics/msg/C/%N:/usr/lpp/cicssm/msg/en_US/%N:/usr/lib/nls/msg/%L/%N</p>
<p>export PATH=$PATH:/usr/vac/bin:/usr/vacpp/bin</p>
<p>mkuser id=&#8217;402&#8242; pgrp=&#8217;cics&#8217; groups=&#8217;cicsterm,cicssm&#8217; SFS_SERV</p>
<p>mklv -t raw -y sfs_SFS_SERV -c 2 rootvg 8</p>
<p>mklv -t raw -y log_SFS_SERV -c 2 rootvg 8</p>
<p>chown SFS_SERV:cics /dev/*sfs_SFS_SERV /dev/*log_SFS_SERV</p>
<p>/usr/lpp/cics/bin/cicsdefaultservers</p>
<p>cicssfscreate -v /.:/cics/sfs/<i>sfsServerName</i></p>
<p>chuser home=&#8217;/var/cics_servers/SSD/cics/sfs/<i>sfsServerName</i>&#8216; SFS_SERV</p>
<p>chown SFS_SERV:cics /var/cics_servers/SSD/cics/sfs/<i>sfsServerName</i></p>
<p>/usr/lpp/cics/bin/cicssfs -v /.:/cics/sfs/<i>sfsServerName</i> StartType=cold</p>
<p>/usr/lpp/encina/bin/sfsadmin list lvols -server /.:/cics/sfs/<i>sfsServerName</i></p>
<p>cicsdefault -r test</p>
<p>cicsupdate -c rd -r test DefaultFileServer=/.:/cics/sfs/<i>sfsServerName</i></p>
<p>cicsadd -c ld -r test ldtest TCPService=&#8217;ldtest&#8217;</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://www.hashei.me/2009/04/patch-install-for-was.html" rel="bookmark" title="Permanent Link: Websphere入门篇（二）-为WAS打上补丁">Websphere入门篇（二）-为WAS打上补丁</a></li><li><a href="http://www.hashei.me/2009/08/cr370915_in_weblogic10-3_and_jdk1-6.html" rel="bookmark" title="Permanent Link: Weblogic10.3.0在AIX6.1、JDK1.6下挂起解决方法">Weblogic10.3.0在AIX6.1、JDK1.6下挂起解决方法</a></li><li><a href="http://www.hashei.me/2009/08/install-weblogic-as-service-and-recovery-password.html" rel="bookmark" title="Permanent Link: 注册Weblogic9为Windows服务及外一篇">注册Weblogic9为Windows服务及外一篇</a></li><li><a href="http://www.hashei.me/2009/12/ibm_support_newsletter_for_websphere_application_server_1219.html" rel="bookmark" title="Permanent Link: IBM WebSphere最新技术支持信息">IBM WebSphere最新技术支持信息</a></li><li><a href="http://www.hashei.me/2009/11/install_db2v9-1.html" rel="bookmark" title="Permanent Link: AIX环境下安装DB2 9.1及Inforsphere information integrator">AIX环境下安装DB2 9.1及Inforsphere information integrator</a></li></ul><hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2011/11/install-cics7-1-on-aix61.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Stay hungry，Stay foolish</title>
		<link>http://www.hashei.me/2010/07/stay_hungry_stay_foolish.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=stay_hungry_stay_foolish</link>
		<comments>http://www.hashei.me/2010/07/stay_hungry_stay_foolish.html#comments</comments>
		<pubDate>Sat, 17 Jul 2010 16:07:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[生活感想]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/07/stay_hungry_stay_foolish.html</guid>
		<description><![CDATA[好久没有更新，离上一篇日志已经2月了，头一个月在专注于复习在职研究生的期末考试，后一月则出差外加偷懒。对留言里提问题的、请求帮忙的朋友说声抱歉了，看来人一旦没有了压力，大脑里的懒惰小人就一定会占到上风。就连写这篇文章，也夹杂着看了《海贼王》第十部剧场版、《lie to me》第15级、常去的博客逛了一圈、开心网转了N个帖子。
到7月22日，我工作就将整三年。刚工作的时候，都是和Windows AD域、DNS、Exchange、WSUS打交道，感觉熟悉了MCSE的内容，就能解决工作中80%的问题，所以常常不思长进。后来转而学习中间件，用了大半年的时间知道了安装、部署、调优和troubleshooting，每天不紧不慢的看看红皮书、逛逛论坛、做做实验，日子也没什么紧迫感。直到在google reader上订阅了许多牛人的博客，才知道日子混的太多了。
比如回忆未来——张宴，和我同龄，经济与贸易专业，却已是金山的系统架构师技术——支持部平台组组长，并出了一本《实战Nginx：取代Apache的高性能Web服务器》，一篇Nginx+ PHP（FastCGI）搭建胜过Apache十倍的Web服务器成为各大linux论坛都转载的文章。
天分高？未必，《我是一只IT小小鸟》里没有一个天才的故事，都是我们可以“复制”的经历。唯一的区别，就是他们做到了。豆瓣上的这篇书评我深表赞同。
&#160;&#160;&#160;&#160;&#160; 这些优秀的人的一些共同特质：
1) &#60;读书&#62; 他们都是在学生时代读了很多优秀的书，不管是囫囵吞枣型，还是精读的，大量的读书才有了后来质的飞跃。      2) &#60;兴趣&#62; 兴趣是最好的老师，这句话深有体会，真是兴趣的驱使，才能发挥一个人最大的潜能。       3) &#60;专注&#62; 有了兴趣这一强大的推动力，在加上专注这颗金刚钻，再难的瓷器活都可以做到至善至美。       4) &#60;思考&#62; 他们不论是思考技术问题，还是在人生的方向的把握的思考，都独具深度。       5) &#60;积累&#62; 他们注重知识很经验的积累，量变导致质变。       6) &#60;交流&#62; 如果说读书是自我学习实现腾飞的一只翅膀，那么与优秀的人的交流是提升自我的另外一只翅膀。   [...]]]></description>
			<content:encoded><![CDATA[<p>好久没有更新，离上一篇日志已经2月了，头一个月在专注于复习在职研究生的期末考试，后一月则出差外加偷懒。对留言里提问题的、请求帮忙的朋友说声抱歉了，看来人一旦没有了压力，大脑里的懒惰小人就一定会占到上风。就连写这篇文章，也夹杂着看了《海贼王》第十部剧场版、《lie to me》第15级、常去的博客逛了一圈、开心网转了N个帖子。</p>
<p>到7月22日，我工作就将整三年。刚工作的时候，都是和Windows AD域、DNS、Exchange、WSUS打交道，感觉熟悉了MCSE的内容，就能解决工作中80%的问题，所以常常不思长进。后来转而学习中间件，用了大半年的时间知道了安装、部署、调优和troubleshooting，每天不紧不慢的看看红皮书、逛逛论坛、做做实验，日子也没什么紧迫感。直到在google reader上订阅了许多牛人的博客，才知道日子混的太多了。</p>
<p>比如<a href="http://blog.s135.com/index.php" target="_blank">回忆未来——张宴</a>，和我同龄，经济与贸易专业，却已是金山的系统架构师技术——支持部平台组组长，并出了一本<a href="http://blog.s135.com/nginx_book/">《实战Nginx：取代Apache的高性能Web服务器》</a>，一篇<a href="http://blog.s135.com/nginx_php_v6/">Nginx+ PHP（FastCGI）搭建胜过Apache十倍的Web服务器</a>成为各大linux论坛都转载的文章。</p>
<p>天分高？未必，<a href="http://book.douban.com/subject/4006425/" target="_blank">《我是一只IT小小鸟》</a>里没有一个天才的故事，都是我们可以“复制”的经历。唯一的区别，就是他们做到了。豆瓣上的这篇书评我深表赞同。</p>
<blockquote><p>&#160;&#160;&#160;&#160;&#160; 这些优秀的人的一些共同特质：</p>
<p>1) &lt;读书&gt; 他们都是在学生时代读了很多优秀的书，不管是囫囵吞枣型，还是精读的，大量的读书才有了后来质的飞跃。      <br />2) &lt;兴趣&gt; 兴趣是最好的老师，这句话深有体会，真是兴趣的驱使，才能发挥一个人最大的潜能。       <br />3) &lt;专注&gt; 有了兴趣这一强大的推动力，在加上专注这颗金刚钻，再难的瓷器活都可以做到至善至美。       <br />4) &lt;思考&gt; 他们不论是思考技术问题，还是在人生的方向的把握的思考，都独具深度。       <br />5) &lt;积累&gt; 他们注重知识很经验的积累，量变导致质变。       <br />6) &lt;交流&gt; 如果说读书是自我学习实现腾飞的一只翅膀，那么与优秀的人的交流是提升自我的另外一只翅膀。       <br />7) &lt;分享&gt; 分享是一种突破，没有有效的积淀，就不容易产生有价值的分享。当在前期从周围的环境、资源中不断获取之后提升了自己，这时候就是你该分享你的经验，回报这个环境的时候了。</p>
</blockquote>
<p>于是接下来的日子一直在慢慢督促自己学习这些人。其实我是很幸运的，从事的工作一是适合自己，二也是充满挑战性的，学习的空间很大，而不会是可悲的“虽说有5年工作经验，其实是1年的工作经验然后重复5次”。</p>
<p>自从接触中间件，然后又做系统验收前的压力测试，不得不学习linux/unix下性能监控和调优的技术，于是看了《linux服务器性能调整》。压力测试结果不满意，于是看了<a href="http://book.douban.com/subject/3924175/" target="_blank">《构建高性能Web站点》</a>，通过动静分离，至少从前端的角度，尽可能的提升页面展示速度。公网上部署应用，也就有了安全的需求，selinux的原理与配置、log日志的审查，渗透与反渗透的技术也就不得不掌握。运营之后的报告，也提出了监控服务器、分析应用日志的要求，shell编程、sed和awk也不得不提上学习日程。</p>
<p>做售后工作之余，有时还会接触一些售前上的问题，比如设备的选型，那就牵涉到容量规划，《web容量规划的艺术》使我受益良多，《大话存储－网络存储系统原理精解与最佳实践》是我下一本要看的书，虽然一本书离精通存储产品还很遥远，但至少要从整体上避免整个系统中的短板。</p>
<p>如此种种衍生出去的学习，正好也印证了about me中的那段话“一点服务器技术、一点操作系统知识、一点数据库概念、一点中间件结构、一点编程能力、一点网络基础、一点存储原理，还要一点IT素质和经验积累。”这些是对系统工程师的要求，但没有人来教你这么多“一点”。如果自己不要求自己，将来面试工作的时候被告知lack of sth的时候一定不好受。</p>
<p>上面提到的成功特质中，1、2、3、6如果还算基本的话，4、5、7对我来说是难点，也应该是很多人的难点，因为网络上多的是零零碎碎的、重复的知识，系统的全面的极少。而那些写的深入的人，无一不是那个领域的专家。其实现在成为一个专家也并非难事，只要“<a href="http://book.douban.com/subject/4726323/" target="_blank">一万个小时</a>”就可以了，但事实是我们往往都知道自己的弱点和需要改进的地方，可当没有旁人督促的时候，总是缺乏动力去行动。</p>
<p>所以如果你看到这篇文章，并且赞同我的内容，又有写博客的习惯，不如交换一下友情链接，互相支持一下，既交个朋友、又多个读者。</p>
<p>最后用那句著名的“Stay hungry, Stay foolish“自勉。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/07/stay_hungry_stay_foolish.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>为JVM启用大页面支持</title>
		<link>http://www.hashei.me/2010/05/enable-lagepages-for-jvm.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=enable-lagepages-for-jvm</link>
		<comments>http://www.hashei.me/2010/05/enable-lagepages-for-jvm.html#comments</comments>
		<pubDate>Sat, 22 May 2010 15:22:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[LargePage]]></category>
		<category><![CDATA[大页面]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/05/enable-lagepages-for-jvm.html</guid>
		<description><![CDATA[最近在看《Linux服务器性能调整》，书中第九章-Linux虚存的性能问题中提到了当代计算机体系结构都支持多种页面大小。大型页面可以改善高性能计算及内存密集型应用的性能。回想起之前看IBM developmentworks上介绍websphere调优和oracle weblogic中tuning都提到了这一点，于是想记下一笔，不过网上正好看到ken Wu已经就此总结过了，于是转贴在此。红色部分为我添加的。
转自 Ken Wu`s Blog
原文链接 JVM优化之调整大内存分页(LargePage)
本文将从内存分页的原理，如何调整分页大小两节内容，向你阐述LargePage对JVM的性能有何提升作用，并在文末点明了大内分页的副作用。OK，让我们开始吧！
内存分页大小对性能的提升原理
首先，我们需要回顾一小部分计算机组成原理，这对理解大内存分页至于JVM性能的提升是有好处的。
什么是内存分页？    我们知道，CPU是通过寻址来访问内存的。32位CPU的寻址宽度是 0~0xFFFFFFFF ，计算后得到的大小是4G，也就是说可支持的物理内存最大是4G。
但在实践过程中，碰到了这样的问题，程序需要使用4G内存，而可用物理内存小于4G，导致程序不得不降低内存占用。   为了解决此类问题，现代CPU引入了 MMU（Memory Management Unit 内存管理单元）。
MMU 的核心思想是利用虚拟地址替代物理地址，即CPU寻址时使用虚址，由 MMU 负责将虚址映射为物理地址。   MMU的引入，解决了对物理内存的限制，对程序来说，就像自己在使用4G内存一样。
内存分页(Paging)是在使用MMU的基础上，提出的一种内存管理机制。它将虚拟地址和物理地址按固定大小（4K）分割成页(page)和页帧(page frame)，并保证页与页帧的大小相同。
这种机制，从数据结构上，保证了访问内存的高效，并使OS能支持非连续性的内存分配。   在程序内存不够用时，还可以将不常用的物理内存页转移到其他存储设备上，比如磁盘，这就是大家耳熟能详的虚拟内存。
在上文中提到，虚拟地址与物理地址需要通过映射，才能使CPU正常工作。   而映射就需要存储映射表。在现代CPU架构中，映射关系通常被存储在物理内存上一个被称之为页表(page table)的地方。    如下图：

从这张图中，可以清晰地看到CPU与页表，物理内存之间的交互关系。
图中的page table在现代操作系统中由全局目录（PGD）-中间目录（PMD）-页表项（PTE）三层树构成，有时候不同书上图不一样但意思一样，只是画多画少。
进一步优化，引入TLB（Translation lookaside buffer，页表寄存器缓冲）     由上一节可知，页表是被存储在内存中的。我们知道CPU通过总线访问内存，肯定慢于直接访问寄存器的。    为了进一步优化性能，现代CPU架构引入了TLB，用来缓存一部分经常访问的页表内容。    如下图：

对比 [...]]]></description>
			<content:encoded><![CDATA[<p>最近在看《Linux服务器性能调整》，书中第九章-Linux虚存的性能问题中提到了当代计算机体系结构都支持多种页面大小。大型页面可以改善高性能计算及内存密集型应用的性能。回想起之前看IBM developmentworks上介绍websphere调优和oracle weblogic中tuning都提到了这一点，于是想记下一笔，不过网上正好看到ken Wu已经就此总结过了，于是转贴在此。红色部分为我添加的。</p>
<p>转自 <a href="http://kenwublog.com/">Ken Wu`s Blog</a></p>
<p>原文链接 <a href="http://kenwublog.com/tune-large-page-for-jvm-optimization" target="_blank">JVM优化之调整大内存分页(LargePage)</a></p>
<p>本文将从内存分页的原理，如何调整分页大小两节内容，向你阐述LargePage对JVM的性能有何提升作用，并在文末点明了大内分页的副作用。OK，让我们开始吧！</p>
<h4>内存分页大小对性能的提升原理</h4>
<p>首先，我们需要回顾一小部分计算机组成原理，这对理解大内存分页至于JVM性能的提升是有好处的。</p>
<p><strong>什么是内存分页？</strong>    <br />我们知道，CPU是通过寻址来访问内存的。32位CPU的寻址宽度是 0~0xFFFFFFFF ，计算后得到的大小是4G，也就是说可支持的物理内存最大是4G。</p>
<p>但在实践过程中，碰到了这样的问题，程序需要使用4G内存，而可用物理内存小于4G，导致程序不得不降低内存占用。   <br />为了解决此类问题，现代CPU引入了 <a href="http://baike.baidu.com/view/969924.htm">MMU</a>（Memory Management Unit 内存管理单元）。</p>
<p>MMU 的核心思想是利用虚拟地址替代物理地址，即CPU寻址时使用虚址，由 MMU 负责将虚址映射为物理地址。   <br />MMU的引入，解决了对物理内存的限制，对程序来说，就像自己在使用4G内存一样。</p>
<p>内存分页(Paging)是在使用MMU的基础上，提出的一种内存管理机制。它将虚拟地址和物理地址按固定大小（4K）分割成页(page)和页帧(page frame)，并保证页与页帧的大小相同。</p>
<p>这种机制，从数据结构上，保证了访问内存的高效，并使OS能支持非连续性的内存分配。   <br />在程序内存不够用时，还可以将不常用的物理内存页转移到其他存储设备上，比如磁盘，这就是大家耳熟能详的虚拟内存。</p>
<p>在上文中提到，虚拟地址与物理地址需要通过映射，才能使CPU正常工作。   <br />而映射就需要存储映射表。在现代CPU架构中，映射关系通常被存储在物理内存上一个被称之为页表(page table)的地方。    <br />如下图：</p>
<p><a href="http://hashei.me/wp-content/uploads/2010/05/28728a1e693e4790ac6098d883472ec3.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="28728a1e-693e-4790-ac60-98d883472ec3" border="0" alt="28728a1e-693e-4790-ac60-98d883472ec3" src="http://hashei.me/wp-content/uploads/2010/05/28728a1e693e4790ac6098d883472ec3_thumb.jpg" width="531" height="440" /></a></p>
<p>从这张图中，可以清晰地看到CPU与页表，物理内存之间的交互关系。</p>
<p><font color="#ff0000">图中的page table在现代操作系统中由全局目录（PGD）-中间目录（PMD）-页表项（PTE）三层树构成，有时候不同书上图不一样但意思一样，只是画多画少。</font></p>
<p><strong>进一步优化，引入TLB（Translation lookaside buffer，页表寄存器缓冲）     <br /></strong>由上一节可知，页表是被存储在内存中的。我们知道CPU通过总线访问内存，肯定慢于直接访问寄存器的。    <br />为了进一步优化性能，现代CPU架构引入了<a href="http://baike.baidu.com/view/129737.html?fromTaglist">TLB</a>，用来缓存一部分经常访问的页表内容。    <br />如下图：</p>
<p><a href="http://hashei.me/wp-content/uploads/2010/05/1381be323fea460ca31004fcb15f99e3.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="1381be32-3fea-460c-a310-04fcb15f99e3" border="0" alt="1381be32-3fea-460c-a310-04fcb15f99e3" src="http://hashei.me/wp-content/uploads/2010/05/1381be323fea460ca31004fcb15f99e3_thumb.jpg" width="559" height="444" /></a></p>
<p>对比 9.6 那张图，在中间加入了TLB。</p>
<p><strong>为什么要支持大内存分页？</strong>    <br />TLB是有限的，这点毫无疑问。当超出TLB的存储极限时，就会发生 TLB miss，之后，OS就会命令CPU去访问内存上的页表。如果频繁的出现TLB miss，程序的性能会下降地很快。</p>
<p>为了让TLB可以存储更多的页地址映射关系，我们的做法是调大内存分页大小。</p>
<p>如果一个页4M，对比一个页4K，前者可以让TLB多存储1000个页地址映射关系，性能的提升是比较可观的。</p>
<h4>调整OS和JVM内存分页</h4>
<p>在Linux和windows下要启用大内存页，有一些限制和设置步骤。</p>
<p><strong>Linux：</strong>    <br />限制：需要2.6内核以上或2.4内核已打大内存页补丁。    <br />确认是否支持，请在终端敲如下命令：</p>
<p># cat /proc/meminfo | grep Huge   <br />HugePages_Total: 0    <br />HugePages_Free: 0    <br />Hugepagesize: 2048 kB</p>
<p>如果有HugePage字样的输出内容，说明你的OS是支持大内存分页的。Hugepagesize就是默认的大内存页size。   <br />接下来，为了让JVM可以调整大内存页size，需要设置下OS 共享内存段最大值 和 大内存页数量。</p>
<p><strong>共享内存段最大值</strong>    <br />建议这个值大于Java Heap size，这个例子里设置了4G内存。</p>
<p># echo 4294967295 &gt; /proc/sys/kernel/shmmax</p>
<p><font color="#ff0000">注意在32位操作系统上这个值不能超过4GB</font></p>
<p><strong>大内存页数量</strong></p>
<p># echo 154 &gt; /proc/sys/vm/nr_hugepages</p>
<p>这个值一般是 Java进程占用最大内存/单个页的大小 ，比如java设置 1.5G，单个页 10M，那么数量为&#160; 1536/10 = 154。   <br />注意：因为proc是内存FS，为了不让你的设置在重启后被冲掉，建议写个脚本放到 init 阶段(rc.local)。</p>
<p><font color="#ff0000">更简便的方法是</font> </p>
<pre><font color="#ff0000">echo &quot;vm.nr_hugepages=154&quot; &gt;&gt; /etc/sysctl.conf</font></pre>
<p><font color="#ff0000">通过下述命令来验证设置是否生效</font></p>
<pre><font color="#ff0000">grep HugePages_Total /proc/meminfo</font></pre>
<p><font color="#ff0000">结果应该是你之前设置的数值154</font></p>
<p>&#160;</p>
<p><strong>Windows:</strong></p>
<p>限制：仅支持 windows server 2003 以上server版本</p>
<p>操作步骤:</p>
<ol>
<li>Control Panel -&gt; Administrative Tools -&gt; Local Security Policy</li>
<li>Local Policies -&gt; User Rights Assignment</li>
<li>双击 “Lock pages in memory”, 添加用户和组</li>
<li>重启电脑</li>
</ol>
<p>注意: 需要管理员操作。</p>
<p><strong>单个页大小调整</strong></p>
<p>JVM启用时加参数 -XX:LargePageSizeInBytes=10m</p>
<p>如果JDK是在1.5 update5以前的，还需要手动加 -XX:+UseLargePages，作用是启用大内存页支持。</p>
<p>——————————————————————</p>
<p>其实除了JVM可以使用大页面提高性能，还有一种应用更符合内存密集型的场景，那就是数据库。数据库的调优中很早就有了这部分的建议。详见</p>
<h4><a href="http://www.puschitz.com/TuningLinuxForOracle.shtml#ConfiguringHugePagesInRHEL4" target="_blank">Tuning and Optimizing Red Hat Enterprise Linux for Oracle 9i and 10g Databases</a></h4>
<p>当中提到</p>
<p>In order that an Oracle database can use Huge Pages in RHEL 4, you also need to increase the ulimit parameter &quot;<tt>memlock</tt>&quot; for the <tt>oracle</tt> user in<tt>/etc/security/limits.conf</tt> if &quot;max locked memory&quot; is not unlimited or too small, see <tt>ulimit -a</tt> or <tt>ulimit -l</tt>. For example:</p>
<pre>oracle           soft    memlock         1048576
oracle           hard    memlock         1048576</pre>
<p>The <tt>memlock</tt> parameter specifies how much memory the <tt>oracle</tt> user can lock into its address space. Note that Huge Pages are locked in physical memory. The <tt>memlock</tt> setting is specified in KB and must match the memory size of the number of Huge Pages that Oracle should be able to allocate. So if the Oracle database should be able to use 512 Huge Pages, then <tt>memlock</tt> must be set to at least <tt>512 * Hugepagesize</tt>, which is on my system 1048576 KB (512*1024*2). If <tt>memlock</tt> is too small, then no single Huge Page will be allocated when the Oracle database starts.</p>
<p>如果limits文件中有相应设置的话，需要检查一下，避免系统没有留出足够的内存（被cache、buffer占用了）</p>
<p>不过作者也提到了</p>
<blockquote>
<p>我们生产环境大部分java应用都没调过large page。性能瓶颈也不是在jvm上。<br />
    <br />文章里提到的优化，仅仅是实验性质的。</p>
<p>优化对我们来说，是一个循序渐进的过程。我们追求的是效果明显的优化方案，而不是什么都调优一把。</p>
</blockquote>
<p>按我的经验，这些一般只是锦上添花而已</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://www.hashei.me/2009/07/enable-ssl-for-ihs.html" rel="bookmark" title="Permanent Link: WAS启用IHS的SSL">WAS启用IHS的SSL</a></li><li><a href="http://www.hashei.me/2009/11/websphere_was_ssl_config.html" rel="bookmark" title="Permanent Link: WebSphere为应用程序设置访问认证">WebSphere为应用程序设置访问认证</a></li><li><a href="http://www.hashei.me/2010/04/%e6%ac%b2%e9%80%9f%e5%88%99%e4%b8%8d%e8%be%be.html" rel="bookmark" title="Permanent Link: 欲速则不达">欲速则不达</a></li><li><a href="http://www.hashei.me/2009/08/jdbc_causes_server_hang.html" rel="bookmark" title="Permanent Link: JDBC引发的服务器hang解决思路">JDBC引发的服务器hang解决思路</a></li></ul><hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/05/enable-lagepages-for-jvm.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WebLogic如何更换64位JDK</title>
		<link>http://www.hashei.me/2010/05/weblogic%e5%a6%82%e4%bd%95%e6%9b%b4%e6%8d%a264%e4%bd%8djdk.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=weblogic%25e5%25a6%2582%25e4%25bd%2595%25e6%259b%25b4%25e6%258d%25a264%25e4%25bd%258djdk</link>
		<comments>http://www.hashei.me/2010/05/weblogic%e5%a6%82%e4%bd%95%e6%9b%b4%e6%8d%a264%e4%bd%8djdk.html#comments</comments>
		<pubDate>Tue, 18 May 2010 08:08:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[weblogic]]></category>
		<category><![CDATA[BEA-000402]]></category>
		<category><![CDATA[BEA-000438]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/05/weblogic%e5%a6%82%e4%bd%95%e6%9b%b4%e6%8d%a264%e4%bd%8djdk.html</guid>
		<description><![CDATA[How_to_use_64bit_jdk_with_weblogic]]></description>
			<content:encoded><![CDATA[<p>使用32位JDK时，JVM一般设置最大设置为1.7G，而现在服务器普遍内存都很大，当然可以通过多个server建立垂直集群来更好的利用资源，但不妨使用64位JDK。虽然WebLogic可以直接在setDomainEnv里指定JAVA_HOME来更改JDK，但肯定会遇到BEA-000438的错，原因在于缺少对应64位JDK的native io libaray（位于weblogic/server/native）。一种方式是从别处拷贝一份过来，还有一种是下载wls_generic.jar形式的安装文件，而不是已经带有JDK的。然后下载64位JDK安装（<a href="http://www.oracle.com/technology/software/products/jrockit/index.html" target="_blank">Jrockit下载</a>），用java –jar wls_generic.jar来安装就可以了。</p>
<p>————————————————————————————</p>
<p>附一个错误分析，和native libaray相关，但并不是由于64位的关系，而是没有执行权限。</p>
<p>启动过程中发现 </p>
<p>&lt;Apr 28, 2010 6:27:15 PM GMT+08:00&gt; &lt;Error&gt; &lt;Socket&gt; &lt;<strong>BEA-000438</strong>&gt; &lt;<strong>Unable to loa     <br />d performance pack. Using Java I/O instead</strong>. Please ensure that a native performa    <br />nce library is in: &#8216;/opt/java1.5/jre/lib/IA64N:/opt/java1.5/jre/lib/IA64N/server    <br />:/opt/java1.5/jre/../lib/IA64N::/opt/weblogic/bea/weblogic90/server/native/hpux1    <br />1/IPF64:/opt/weblogic/bea/weblogic90/server/native/hpux11/PA_RISC:/opt/weblogic/    <br />bea/weblogic90/server/native/hpux11/PA_RISC/oci920_8:/usr/lib&#8217; </p>
<p>没有启动native io，导致系统性能低下（这里要注意HP-UX里IA64N下的是32位JDK，IA64W下的才是64位JDK），而且java io配置的值较小，产生如下报错 </p>
<p>&lt;Apr 28, 2010 6:15:03 PM GMT+08:00&gt; &lt;Warning&gt; &lt;Socket&gt; &lt;<strong>BEA-000402</strong>&gt; &lt;There are:    <br />5 active sockets, but the maximum number of socket reader threads allowed by the    <br /> configuration is: 4. You may want to alter your configuration.&gt; </p>
<p>在应用使用过程中从而出现 </p>
<p>&lt;Apr 28, 2010 6:14:10 PM GMT+08:00&gt; &lt;Error&gt; &lt;Console&gt; &lt;BEA-240003&gt; &lt;Console enco   <br />untered the following error javax.servlet.jsp.JspException: Broken pipe (errno:3    <br />2)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; at com.bea.console.taglib.html.tree.TreeTag.print(TreeTag.java:231)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; at com.bea.console.taglib.html.tree.TreeTag.doEndTag(TreeTag.java:192)</p>
<p>观察控制台的thread信息</p>
<p>Self-Tuning Thread Pool&#160;&#160;&#160;&#160; <br />Active Execute Threads&#160;&#160;&#160; Execute Thread Total Count&#160;&#160;&#160; Execute Thread Idle Count&#160;&#160;&#160; Queue Length&#160;&#160;&#160; Pending User Request Count&#160;&#160;&#160; Completed Request Count&#160;&#160;&#160; Hogging Thread Count&#160;&#160;&#160; Standby Thread Count&#160;&#160;&#160; Throughput&#160;&#160;&#160; Health    <br />16&#160;&#160;&#160; 58&#160;&#160;&#160; 15&#160;&#160;&#160; 6048&#160;&#160;&#160; 0&#160;&#160;&#160; 144840&#160;&#160;&#160; 4&#160;&#160;&#160; 38&#160;&#160;&#160; 4.577865205875421&#160;&#160;&#160; OK </p>
<p>排队的请求数多达6000个，导致了OutOfMemory，在JAVA堆还很空的情况下 </p>
<p>观察发现/opt/weblogic/bea/weblogic90/server/native/hpux11/IPF32下面和native io相关的libmuxer.so没有执行权限，chmod +x 后再次启动错误信息不再出现 </p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://www.hashei.me/2009/08/install-weblogic-as-service-and-recovery-password.html" rel="bookmark" title="Permanent Link: 注册Weblogic9为Windows服务及外一篇">注册Weblogic9为Windows服务及外一篇</a></li><li><a href="http://www.hashei.me/2009/09/weblogic-cluster-step-by-step.html" rel="bookmark" title="Permanent Link: WebLogic9和10集群安装配置过程">WebLogic9和10集群安装配置过程</a></li><li><a href="http://www.hashei.me/2009/08/cr370915_in_weblogic10-3_and_jdk1-6.html" rel="bookmark" title="Permanent Link: Weblogic10.3.0在AIX6.1、JDK1.6下挂起解决方法">Weblogic10.3.0在AIX6.1、JDK1.6下挂起解决方法</a></li><li><a href="http://www.hashei.me/2009/11/websphere_was_ssl_config.html" rel="bookmark" title="Permanent Link: WebSphere为应用程序设置访问认证">WebSphere为应用程序设置访问认证</a></li><li><a href="http://www.hashei.me/2009/08/serverhang_application_deadlock.html" rel="bookmark" title="Permanent Link: 应用程序死锁导致服务器挂起的介绍">应用程序死锁导致服务器挂起的介绍</a></li></ul><hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/05/weblogic%e5%a6%82%e4%bd%95%e6%9b%b4%e6%8d%a264%e4%bd%8djdk.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>欲速则不达</title>
		<link>http://www.hashei.me/2010/04/%e6%ac%b2%e9%80%9f%e5%88%99%e4%b8%8d%e8%be%be.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e6%25ac%25b2%25e9%2580%259f%25e5%2588%2599%25e4%25b8%258d%25e8%25be%25be</link>
		<comments>http://www.hashei.me/2010/04/%e6%ac%b2%e9%80%9f%e5%88%99%e4%b8%8d%e8%be%be.html#comments</comments>
		<pubDate>Mon, 12 Apr 2010 15:23:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[每周精华]]></category>
		<category><![CDATA[Linux安装]]></category>
		<category><![CDATA[was7]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/04/%e6%ac%b2%e9%80%9f%e5%88%99%e4%b8%8d%e8%be%be.html</guid>
		<description><![CDATA[在遇到一些新工作的时候，我们往往因为原有的经验、脑袋里模糊的印象、自作聪明的“触类旁通”而在没有准备的情况下直接放手去做，最终往往欲速而不达。本文就总结了近期工作中的两个弯路，希望能以此提醒自己。]]></description>
			<content:encoded><![CDATA[<p>离上次更新已经有一个半月了，这段时间在机房待的比较多，弄的我耳鸣不止，双休日又读书，所以一直懒得动笔，难得的空闲时间又在沉迷《火炬之光》（Torch Light)。博这种东西，一旦有了惰性就完了啊，今天总算打起精神，记下最近走过的几个弯路。</p>
<h2>在Linux上安装WAS7，图形界面无法启动的问题</h2>
<p>$ ../JDK/jre.pak/repository/package.java.jre/java/jre/bin/java setup.jar The installer is unable to run in graphical mode. Try running the installer with the -console or -silent flag.</p>
<p>这个问题其实是freebsdjlu做实验的时候发现的，因为我之前安装都是没问题，所以一开始觉得是安装软件的问题，没下完整或者ftp没用二进制，后来发现是缺少compat-libstdc++-33这个包。</p>
<p>后来去查了安装环境要求，原来需要的包很多</p>
<p><a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.installation.express.doc/info/exp/ae/tins_linuxsetup_rhel5.html" target="_blank">Preparing Red Hat Enterprise Linux 5 for installation</a></p>
<p>Platforms that support both 32-bit and 64-bit applications require both the 32-bit and 64-bit versions of the following packages: </p>
<ul>
<li><strong>compat-libstdc++-33-3.2.3-61</strong></li>
<li><strong>compat-db-4.2.52-5.1</strong></li>
<li><strong>libXp-1.0.0-8</strong></li>
<li><strong>libXmu-1.0.2-5</strong></li>
<li><strong>libXtst-1.0.1-3.1</strong></li>
<li><strong>pam-0.99.6.2-3.26.el5</strong></li>
<li>&#160;<strong>libXft-2.1.10-1.1</strong> </li>
<p> 可以参考 <a href="http://publib.boulder.ibm.com/tins_rhel_packages.html">Installing and verifying Linux packages</a>来安装需要的包</ul>
<ul>而且SELinux也是需要考虑的</ul>
<p>You should consider the following points if you have enabled Security-Enhanced Linux (SELinux) on your Red Hat Enterprise Linux Version 5 operating system. </p>
<ul>
<li>If SELinux is enabled and enforced while you are installing the product from the CD, then you must mount the CD with the following option:
<pre> -o context=system_u:object_r:textrel_shlib_t</pre>
</li>
<li>If you enable SELinux after installing the product while SELinux was disabled, then the file labels will be reset when the system is rebooted. In this case, you must run the relabel_was.sh script located in <a href="http://publib.boulder.ibm.com/rins_dircon.html"><var>app_server_root</var></a> /properties/version/nif/config/script to relabel the product runtime files. Note that running the relabel_was.sh command is not necessary if you made security mode changes with the commandsetenforce, which does not required a system reboot.</li>
</ul>
<ul>后来在一篇博客上看到这么一段</ul>
<blockquote>
<ul>
<p><a href="http://www.dbform.com/html/2008/478.html">My little poor server</a></p>
<p>为什么一开始决定要在Windows Server 2003 64bit上安装Oracle9i呢？于是给服务器安装了Windows Server 2003 64bit操作系统。</p>
<p>可是为什么硬件架构是AMD64和Intel 64呢？Oracle9i没有这两个架构的64bit版本。于是格式化了重新安装Redhat Enterprise Linux 5。</p>
<p>可是又为什么不是正版的Redhat Enterprise Linux 5呢？于是格式化安装了Redhat Enterprise Linux 4 Update 2。</p>
<p>可是为什么RHEL4 Update 2不能在阵列上设置MPIO呢？于是格式化安装了Redhat Enterprise Linux 4 Update 4。 </ul>
<ul>时间就这样在一遍一遍地折磨服务器和折磨群众的过程中悄然溜走，转眼就到了下班的时候，Yeah，明天再说了。</ul>
</blockquote>
<ul>博主在评论里的一句话道出了真理：<strong>都是在出现问题以后才去检查软硬件兼容表的</strong>，呵呵。</ul>
<h2>在IBM刀片机上安装RHEL报错</h2>
<p>在一台IBM的刀片机（JS21，PowerPC芯片）上直接安装redhat5.5——rhel-server-5.5-ppc-dvd。安装过程中报错：</p>
<blockquote>
<p>md: Autodetecting RAID arrays.</p>
<p>md: autorun &#8230;</p>
<p>md: &#8230; autorun DONE.</p>
<p>RAMDISK: Compressed image found at block 0</p>
<p>RAMDISK: ran out of compressed data</p>
<p>invalid compressed format (err=1)</p>
<p>Kernel panic &#8211; not syncing: VFS: Unable to mount root fs on unknown-block(1,0)</p>
</blockquote>
<p>机器上原先有操作系统AIX5.3</p>
<p>用上面这串错误去Google的话，会得到很多不同的解释，就是说造成这个问题的原因有多种。一次次的尝试很耗费时间，最后找到了这篇文章，<a href="http://www.ibm.com/developerworks/cn/linux/l-power-installation-toolkit/index.html" target="_blank">《IBM Installation Toolkit：在 POWER 上加载 Linux》</a>，用文中提到的工具<a href="http://www14.software.ibm.com/webapp/set2/sas/f/lopdiags/installtools/">IBM Installation Toolkit for Linux on POWER</a>一次就安装成功了。（因为RHEL 5.5本月头上刚发布，所以工具介绍里没有写明支持，但是安装没有问题，5.3以上都用能用这个来安装）</p>
<p>这个问题其实和先前那个一样，被原有的知识所误导——X86平台上IBM的ServerGuide是为安装Windows操作系统准备的，安装Linux直接用安装盘即可，上手就去做，欲速则不达。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/04/%e6%ac%b2%e9%80%9f%e5%88%99%e4%b8%8d%e8%be%be.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java 类加载器的又一篇文章</title>
		<link>http://www.hashei.me/2010/03/inside_java_classloader.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=inside_java_classloader</link>
		<comments>http://www.hashei.me/2010/03/inside_java_classloader.html#comments</comments>
		<pubDate>Wed, 03 Mar 2010 15:30:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[Websphere系列]]></category>
		<category><![CDATA[排错]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[类加载]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/inside_java_classloader.html</guid>
		<description><![CDATA[之前写过两篇关于java类加载的文章，分别是：《WebSphere的类加载机制和故障排查》，《再谈WebSphere的类加载和故障排查》。今天在IBM网站上看到一篇《深入探讨 Java 类加载器》，分享出来炒炒冷饭。以后遇到问题的时候也能有点方向。
Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。不过如果遇到了需要与类加载器进行交互的情况，而对类加载器的机制又不是很了解的话，就很容易花大量的时间去调试 ClassNotFoundException 和 NoClassDefFoundError 等异常。本文将详细介绍 Java 的类加载器，帮助读者深刻理解 Java 语言中的这个重要概念。

  Copyright &#169; 2008 This feed is for personal, non-commercial use only
聚沙成塔-小哈的记事薄 by hashei 
如果喜欢，欢迎订阅feed.hashei.com
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949]]></description>
			<content:encoded><![CDATA[<p>之前写过两篇关于java类加载的文章，分别是：<a title="JAVA类加载原理和故障排查" href="http://www.hashei.me/2009/05/websphere-class-loader-troubshooting.html" target="_blank">《WebSphere的类加载机制和故障排查》</a>，《<a title="java类加载问题故障排查" href="http://www.hashei.me/2009/06/troubshoot-classloader-problems.html" target="_blank">再谈WebSphere的类加载和故障排查</a>》。今天在IBM网站上看到一篇《<a href="http://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html?ca=drs-cn-0301" target="_blank">深入探讨 Java 类加载器</a>》，分享出来炒炒冷饭。以后遇到问题的时候也能有点方向。</p>
<blockquote><p>Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。不过如果遇到了需要与类加载器进行交互的情况，而对类加载器的机制又不是很了解的话，就很容易花大量的时间去调试 <code>ClassNotFoundException</code> 和 <code>NoClassDefFoundError</code> 等异常。本文将详细介绍 Java 的类加载器，帮助读者深刻理解 Java 语言中的这个重要概念。</p>
</blockquote>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/03/inside_java_classloader.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>互联网网站的反爬虫策略浅析（转）</title>
		<link>http://www.hashei.me/2010/02/%e4%ba%92%e8%81%94%e7%bd%91%e7%bd%91%e7%ab%99%e7%9a%84%e5%8f%8d%e7%88%ac%e8%99%ab%e7%ad%96%e7%95%a5%e6%b5%85%e6%9e%90%ef%bc%88%e8%bd%ac%ef%bc%89.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e4%25ba%2592%25e8%2581%2594%25e7%25bd%2591%25e7%25bd%2591%25e7%25ab%2599%25e7%259a%2584%25e5%258f%258d%25e7%2588%25ac%25e8%2599%25ab%25e7%25ad%2596%25e7%2595%25a5%25e6%25b5%2585%25e6%259e%2590%25ef%25bc%2588%25e8%25bd%25ac%25ef%25bc%2589</link>
		<comments>http://www.hashei.me/2010/02/%e4%ba%92%e8%81%94%e7%bd%91%e7%bd%91%e7%ab%99%e7%9a%84%e5%8f%8d%e7%88%ac%e8%99%ab%e7%ad%96%e7%95%a5%e6%b5%85%e6%9e%90%ef%bc%88%e8%bd%ac%ef%bc%89.html#comments</comments>
		<pubDate>Sun, 28 Feb 2010 05:11:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[每周精华]]></category>
		<category><![CDATA[网络爬虫]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/%e4%ba%92%e8%81%94%e7%bd%91%e7%bd%91%e7%ab%99%e7%9a%84%e5%8f%8d%e7%88%ac%e8%99%ab%e7%ad%96%e7%95%a5%e6%b5%85%e6%9e%90%ef%bc%88%e8%bd%ac%ef%bc%89.html</guid>
		<description><![CDATA[因为搜索引擎的流行，网络爬虫已经成了很普及网络技术，除了专门做搜索的Google，Yahoo，微软，百度以外，几乎每个大型门户网站都有自己的搜索引擎，大大小小叫得出来名字得就几十种，还有各种不知名的几千几万种，对于一个内容型驱动的网站来说，受到网络爬虫的光顾是不可避免的。本文讲述了如何控制爬虫对于网络的资源消耗]]></description>
			<content:encoded><![CDATA[<p>很早就看过，不过那时候没网站，也就没上心，自从开了<a title="JQ公会-日饭的勾搭网" href="http://www.jqclub.net" target="_blank">JQ公会</a>，头两月还好，第三个月搜狗的爬虫每天就占了几G的流量，不过那时候是虚拟主机，可配置性不大。现在转到VPS，也要开始注意了。</p>
<p><a href="http://robbin.javaeye.com/blog/451014">http://robbin.javaeye.com/</a></p>
<h5><a href="http://robbin.javaeye.com/blog/451014">互联网网站的反爬虫策略浅析</a></h5>
<p>因为搜索引擎的流行，网络爬虫已经成了很普及网络技术，除了专门做搜索的Google，Yahoo，微软，百度以外，几乎每个大型门户网站都有自己的搜索引擎，大大小小叫得出来名字得就几十种，还有各种不知名的几千几万种，对于一个内容型驱动的网站来说，受到网络爬虫的光顾是不可避免的。</p>
<p>一些智能的搜索引擎爬虫的爬取频率比较合理，对网站资源消耗比较少，但是很多糟糕的网络爬虫，对网页爬取能力很差，经常并发几十上百个请求循环重复抓取，这种爬虫对中小型网站往往是毁灭性打击，特别是一些缺乏爬虫编写经验的程序员写出来的爬虫破坏力极强。曾经有一次我在<a href="http://www.javaeye.com">JavaEye</a>的日志里面发现一个User-Agent是Java的爬虫一天之内爬取了将近100万次动态请求。这是一个用JDK标准类库编写的简单爬取网页程序，由于JavaEye网站内部链接构成了回环导致程序陷入了死循环。对于JavaEye这种百万PV级别的网站来说，这种爬虫造成的访问压力会非常大，会导致网站访问速度缓慢，甚至无法访问。</p>
<p>此外，相当数量的的网页爬虫目的是盗取目标网站的内容。比方说JavaEye网站就曾经被两个竞争对手网站爬取论坛帖子，然后在自己的论坛里面用机器人发帖，因此这种爬虫不仅仅影响网站访问速度，而且侵犯了网站的版权。</p>
<p>对于一个原创内容丰富，URL结构合理易于爬取的网站来说，简直就是各种爬虫的盘中大餐，很多网站的访问流量构成当中，爬虫带来的流量要远远超过真实用户访问流量，甚至爬虫流量要高出真实流量一个数量级。像JavaEye网站虽然设置了相当严格的反爬虫策略，但是网站处理的动态请求数量仍然是真实用户访问流量的2倍。可以肯定的说，当今互联网的网络流量至少有2/3的流量爬虫带来的。因此反爬虫是一个值得网站长期探索和解决的问题。</p>
<p> <span id="more-1140"></span>
<p>&#160;</p>
<h2>一、手工识别和拒绝爬虫的访问</h2>
<p>有相当多的爬虫对网站会造成非常高的负载，因此识别爬虫的来源IP是很容易的事情。最简单的办法就是用netstat检查80端口的连接：</p>
<p>C代码</p>
<ol>
<li>netstat -nt | grep youhostip:80 | awk &#8216;{print $5}&#8217; | awk -F&quot;:&quot; &#8216;{print $1}&#8217;| sort | uniq -c | sort -r -n&#160;&#160; </li>
</ol>
<p>这行shell可以按照80端口连接数量对来源IP进行排序，这样可以直观的判断出来网页爬虫。一般来说爬虫的并发连接非常高。   <br />如果使用lighttpd做Web Server，那么就更简单了。lighttpd的mod_status提供了非常直观的并发连接的信息，包括每个连接的来源IP，访问的URL，连接状态和连接时间等信息，只要检查那些处于handle-request状态的高并发IP就可以很快确定爬虫的来源IP了。    <br />拒绝爬虫请求既可以通过内核防火墙来拒绝，也可以在web server拒绝，比方说用iptables拒绝：</p>
<p>C代码</p>
<ol>
<li>iptables -A INPUT -i eth0 -j DROP -p tcp &#8211;dport 80 -s 84.80.46.0/24&#160;&#160;&#160; </li>
</ol>
<p>直接封锁爬虫所在的C网段地址。这是因为一般爬虫都是运行在托管机房里面，可能在一个C段里面的多台服务器上面都有爬虫，而这个C段不可能是用户宽带上网，封锁C段可以很大程度上解决问题。   <br />有些人提出一种脑残的观点，说我要惩罚这些爬虫。我专门在网页里面设计动态循环链接页面，让爬虫掉进陷阱，死循环爬不出来，其实根本用不着设置陷阱，弱智爬虫对正常网页自己就爬不出来，这样做多此一举不说，而且会让真正的搜索引擎降低你的网页排名。而且运行一个爬虫根本不消耗什么机器资源，相反，真正宝贵的是你的服务器CPU资源和服务器带宽，简单的拒绝掉爬虫的请求是反爬虫最有效的策略。</p>
<h2>二、通过识别爬虫的User-Agent信息来拒绝爬虫</h2>
<p>有很多爬虫并不会以很高的并发连接爬取，一般不容易暴露自己；有些爬虫的来源IP分布很广，很难简单的通过封锁IP段地址来解决问题；另外还有很多各种各样的小爬虫，它们在尝试Google以外创新的搜索方式，每个爬虫每天爬取几万的网页，几十个爬虫加起来每天就能消耗掉上百万动态请求的资源，由于每个小爬虫单独的爬取量都很低，所以你很难把它从每天海量的访问IP地址当中把它准确的挖出来。    <br />这种情况下我们可以通过爬虫的User-Agent信息来识别。每个爬虫在爬取网页的时候，会声明自己的User-Agent信息，因此我们就可以通过记录和分析User-Agent信息来挖掘和封锁爬虫。我们需要记录每个请求的User-Agent信息，对于Rails来说我们可以简单的在app/controllers/application.rb里面添加一个全局的before_filter，来记录每个请求的User-Agent信息：</p>
<p>Ruby代码</p>
<ol>
<li>logger.info &quot;HTTP_USER_AGENT #{request.env[&quot;HTTP_USER_AGENT&quot;]}&quot;</li>
</ol>
<p>然后统计每天的production.log，抽取User-Agent信息，找出访问量最大的那些User-Agent。要注意的是我们只关注那些爬虫的User-Agent信息，而不是真正浏览器User-Agent，所以还要排除掉浏览器User-Agent，要做到这一点仅仅需要一行shell：</p>
<p>Ruby代码</p>
<ol>
<li>grep HTTP_USER_AGENT production.log | grep -v -E &#8216;MSIE|Firefox|Chrome|Opera|Safari|Gecko&#8217; | sort | uniq -c | sort -r -n | head -n 100 &gt; bot.log&#160;&#160;&#160; </li>
</ol>
<p>统计结果类似这样：</p>
<p>C代码</p>
<ol>
<li>57335 HTTP_USER_AGENT Baiduspider+(+http://www.baidu.com/search/spider.htm)</li>
<li>56639 HTTP_USER_AGENT Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)</li>
<li>42610 HTTP_USER_AGENT Mediapartners-Google&#160; </li>
<li>19131 HTTP_USER_AGENT msnbot/2.0b (+http://search.msn.com/msnbot.htm)</li>
</ol>
<p>从日志就可以直观的看出每个爬虫的请求次数。要根据User-Agent信息来封锁爬虫是件很容易的事情，lighttpd配置如下：</p>
<p>C代码</p>
<ol>
<li>$HTTP[&quot;useragent&quot;] =~ &quot;qihoobot|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python&quot; {&#160; </li>
<li>&#160; url.rewrite = ( &quot;^/(.*)&quot; =&gt; &quot;/crawler.html&quot; )&#160; </li>
<li>}&#160; </li>
</ol>
<p>使用这种方式来封锁爬虫虽然简单但是非常有效，除了封锁特定的爬虫，还可以封锁常用的编程语言和HTTP类库的User-Agent信息，这样就可以避免很多无谓的程序员用来练手的爬虫程序对网站的骚扰。   <br />还有一种比较常见的情况，就是某个搜索引擎的爬虫对网站爬取频率过高，但是搜索引擎给网站带来了很多流量，我们并不希望简单的封锁爬虫，仅仅是<a href="http://blog.lighttpd.net/articles/2008/08/22/delay-request-handling-for-stupid-crawlers">希望降低爬虫的请求频率，减轻爬虫对网站造成的负载</a>，那么我们可以这样做：</p>
<p>C代码</p>
<ol>
<li>$HTTP[&quot;user-agent&quot;] =~ &quot;Baiduspider+&quot; {&#160; </li>
<li>&#160;&#160;&#160; connection.delay-seconds = 10&#160; </li>
<li>}&#160; </li>
</ol>
<p>对百度的爬虫请求延迟10秒钟再进行处理，这样就可以有效降低爬虫对网站的负载了。   </p>
<h2>三、通过网站流量统计系统和日志分析来识别爬虫</h2>
<p>有些爬虫喜欢修改User-Agent信息来伪装自己，把自己伪装成一个真实浏览器的User-Agent信息，让你无法有效的识别。这种情况下我们可以通过网站流量系统记录的真实用户访问IP来进行识别。    <br />主流的网站流量统计系统不外乎两种实现策略：一种策略是在网页里面嵌入一段js，这段js会向特定的统计服务器发送请求的方式记录访问量；另一种策略是直接分析服务器日志，来统计网站访问量。在理想的情况下，嵌入js的方式统计的网站流量应该高于分析服务器日志，这是因为用户浏览器会有缓存，不一定每次真实用户访问都会触发服务器的处理。但实际情况是，分析服务器日志得到的网站访问量远远高于嵌入js方式，极端情况下，甚至要高出10倍以上。    <br />现在很多网站喜欢采用awstats来分析服务器日志，来计算网站的访问量，但是当他们一旦采用Google Analytics来统计网站流量的时候，却发现GA统计的流量远远低于awstats，为什么GA和awstats统计会有这么大差异呢？罪魁祸首就是把自己伪装成浏览器的网络爬虫。这种情况下awstats无法有效的识别了，所以awstats的统计数据会虚高。    <br />其实作为一个网站来说，如果希望了解自己的网站真实访问量，希望精确了解网站每个频道的访问量和访问用户，应该用页面里面嵌入js的方式来开发自己的网站流量统计系统。自己做一个网站流量统计系统是件很简单的事情，写段服务器程序响应客户段js的请求，分析和识别请求然后写日志的同时做后台的异步统计就搞定了。    <br />通过流量统计系统得到的用户IP基本是真实的用户访问，因为一般情况下爬虫是无法执行网页里面的js代码片段的。所以我们可以拿流量统计系统记录的IP和服务器程序日志记录的IP地址进行比较，如果服务器日志里面某个IP发起了大量的请求，在流量统计系统里面却根本找不到，或者即使找得到，可访问量却只有寥寥几个，那么无疑就是一个网络爬虫。    <br />分析服务器日志统计访问最多的IP地址段一行shell就可以了：</p>
<p>C代码</p>
<ol>
<li>grep Processing production.log | awk &#8216;{print $4}&#8217; | awk -F&#8217;.&#8217; &#8216;{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.0&quot;}&#8217; | sort | uniq -c | sort -r -n | head -n 200 &gt; stat_ip.log&#160;&#160;&#160; </li>
</ol>
<p>然后把统计结果和流量统计系统记录的IP地址进行对比，排除真实用户访问IP，再排除我们希望放行的网页爬虫，比方Google，百度，微软msn爬虫等等。最后的分析结果就就得到了爬虫的IP地址了。以下代码段是个简单的实现示意：</p>
<p>Ruby代码</p>
<ol>
<li>whitelist = []&#160; </li>
<li>IO.foreach(&quot;#{RAILS_ROOT}/lib/whitelist.txt&quot;) { |line| whitelist &lt;&lt; line.split[0].strip if line }&#160; </li>
<li></li>
<li>realiplist = []&#160; </li>
<li>IO.foreach(&quot;#{RAILS_ROOT}/log/visit_ip.log&quot;) { |line|&#160; realiplist &lt;&lt; line.strip if line }&#160; </li>
<li></li>
<li>iplist = []&#160; </li>
<li>IO.foreach(&quot;#{RAILS_ROOT}/log/stat_ip.log&quot;) do |line|&#160; </li>
<li>&#160; ip = line.split[1].strip&#160; </li>
<li>&#160; iplist &lt;&lt; ip if line.split[0].to_i &gt; 3000 &amp;&amp; !whitelist.include?(ip) &amp;&amp; !realiplist.include?(ip)&#160; </li>
<li>end</li>
<li></li>
<li>Report.deliver_crawler(iplist)&#160; </li>
</ol>
<p>分析服务器日志里面请求次数超过3000次的IP地址段，排除白名单地址和真实访问IP地址，最后得到的就是爬虫IP了，然后可以发送邮件通知管理员进行相应的处理。</p>
<p>&#160;</p>
<h2>四、网站的实时反爬虫防火墙实现策略</h2>
<p>通过分析日志的方式来识别网页爬虫不是一个实时的反爬虫策略。如果一个爬虫非要针对你的网站进行处心积虑的爬取，那么他可能会采用分布式爬取策略，比方说寻找几百上千个国外的代理服务器疯狂的爬取你的网站，从而导致网站无法访问，那么你再分析日志是不可能及时解决问题的。所以必须采取实时反爬虫策略，要能够动态的实时识别和封锁爬虫的访问。    <br />要自己编写一个这样的实时反爬虫系统其实也很简单。比方说我们可以用memcached来做访问计数器，记录每个IP的访问频度，在单位时间之内，如果访问频率超过一个阀值，我们就认为这个IP很可能有问题，那么我们就可以返回一个验证码页面，要求用户填写验证码。如果是爬虫的话，当然不可能填写验证码，所以就被拒掉了，这样很简单就解决了爬虫问题。    <br />用memcache记录每个IP访问计数，单位时间内超过阀值就让用户填写验证码，用Rails编写的示例代码如下：</p>
<p>Ruby代码</p>
<ol>
<li>ip_counter = Rails.cache.increment(request.remote_ip)&#160; </li>
<li>if !ip_counter&#160; </li>
<li>&#160; Rails.cache.write(request.remote_ip, 1, :expires_in =&gt; 30.minutes)&#160; </li>
<li>elsif ip_counter &gt; 2000&#160; </li>
<li>&#160; render :template =&gt; &#8216;test&#8217;, :status =&gt; 401 and return false</li>
<li>end</li>
</ol>
<p>这段程序只是最简单的示例，实际的代码实现我们还会添加很多判断，比方说我们可能要排除白名单IP地址段，要允许特定的User-Agent通过，要针对登录用户和非登录用户，针对有无referer地址采取不同的阀值和计数加速器等等。   <br />此外如果分布式爬虫爬取频率过高的话，过期就允许爬虫再次访问还是会对服务器造成很大的压力，因此我们可以添加一条策略：针对要求用户填写验证码的IP地址，如果该IP地址短时间内继续不停的请求，则判断为爬虫，加入黑名单，后续请求全部拒绝掉。为此，示例代码可以改进一下：</p>
<p>Ruby代码</p>
<ol>
<li>before_filter :ip_firewall, :except =&gt; :test</li>
<li>def ip_firewall&#160; </li>
<li>&#160; render :file =&gt; &quot;#{RAILS_ROOT}/public/403.html&quot;, :status =&gt; 403 if BlackList.include?(ip_sec)&#160; </li>
<li>end</li>
</ol>
<p>我们可以定义一个全局的过滤器，对所有请求进行过滤，出现在黑名单的IP地址一律拒绝。对非黑名单的IP地址再进行计数和统计：</p>
<p>Ruby代码</p>
<ol>
<li>ip_counter = Rails.cache.increment(request.remote_ip)&#160; </li>
<li>if !ip_counter&#160; </li>
<li>&#160; Rails.cache.write(request.remote_ip, 1, :expires_in =&gt; 30.minutes)&#160; </li>
<li>elsif ip_counter &gt; 2000&#160; </li>
<li>&#160; crawler_counter = Rails.cache.increment(&quot;crawler/#{request.remote_ip}&quot;)&#160; </li>
<li>if !crawler_counter&#160; </li>
<li>&#160;&#160;&#160; Rails.cache.write(&quot;crawler/#{request.remote_ip}&quot;, 1, :expires_in =&gt; 10.minutes)&#160; </li>
<li>elsif crawler_counter &gt; 50&#160; </li>
<li>&#160;&#160;&#160; BlackList.add(ip_sec)&#160; </li>
<li>&#160;&#160;&#160; render :file =&gt; &quot;#{RAILS_ROOT}/public/403.html&quot;, :status =&gt; 403 and return false</li>
<li>end</li>
<li>&#160; render :template =&gt; &#8216;test&#8217;, :status =&gt; 401 and return false</li>
<li>end</li>
</ol>
<p>如果某个IP地址单位时间内访问频率超过阀值，再增加一个计数器，跟踪他会不会立刻填写验证码，如果他不填写验证码，在短时间内还是高频率访问，就把这个IP地址段加入黑名单，除非用户填写验证码激活，否则所有请求全部拒绝。这样我们就可以通过在程序里面维护黑名单的方式来动态的跟踪爬虫的情况，甚至我们可以自己写个后台来手工管理黑名单列表，了解网站爬虫的情况。</p>
<p>这个策略已经比较智能了，但是还不够好！我们还可以继续改进：    </p>
<h3>1、用网站流量统计系统来改进实时反爬虫系统</h3>
<p>还记得吗？网站流量统计系统记录的IP地址是真实用户访问IP，所以我们在网站流量统计系统里面也去操作memcached，但是这次不是增加计数值，而是减少计数值。在网站流量统计系统里面每接收到一个IP请求，就相应的cache.decrement(key)。所以对于真实用户的IP来说，它的计数值总是加1然后就减1，不可能很高。这样我们就可以大大降低判断爬虫的阀值，可以更加快速准确的识别和拒绝掉爬虫。    </p>
<h3>2、用时间窗口来改进实时反爬虫系统</h3>
<p>爬虫爬取网页的频率都是比较固定的，不像人去访问网页，中间的间隔时间比较无规则，所以我们可以给每个IP地址建立一个时间窗口，记录IP地址最近12次访问时间，每记录一次就滑动一次窗口，比较最近访问时间和当前时间，如果间隔时间很长判断不是爬虫，清除时间窗口，如果间隔不长，就回溯计算指定时间段的访问频率，如果访问频率超过阀值，就转向验证码页面让用户填写验证码。</p>
<p>最终这个实时反爬虫系统就相当完善了，它可以很快的识别并且自动封锁爬虫的访问，保护网站的正常访问。不过有些爬虫可能相当狡猾，它也许会通过大量的爬虫测试来试探出来你的访问阀值，以低于阀值的爬取速度抓取你的网页，因此我们还需要辅助第3种办法，用日志来做后期的分析和识别，就算爬虫爬的再慢，它累计一天的爬取量也会超过你的阀值被你日志分析程序识别出来。</p>
<p>总之我们综合运用上面的四种反爬虫策略，可以很大程度上缓解爬虫对网站造成的负面影响，保证网站的正常访问。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/%e4%ba%92%e8%81%94%e7%bd%91%e7%bd%91%e7%ab%99%e7%9a%84%e5%8f%8d%e7%88%ac%e8%99%ab%e7%ad%96%e7%95%a5%e6%b5%85%e6%9e%90%ef%bc%88%e8%bd%ac%ef%bc%89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>软硬兼施 优化 WebSphere Application Server</title>
		<link>http://www.hashei.me/2010/02/tunning-websphere-application-server-was.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tunning-websphere-application-server-was</link>
		<comments>http://www.hashei.me/2010/02/tunning-websphere-application-server-was.html#comments</comments>
		<pubDate>Sun, 21 Feb 2010 15:46:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[Websphere系列]]></category>
		<category><![CDATA[每周精华]]></category>
		<category><![CDATA[lpar]]></category>
		<category><![CDATA[websphere]]></category>
		<category><![CDATA[性能优化]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/tunning-websphere-application-server-was.html</guid>
		<description><![CDATA[之前看的很多was优化案例，包括自己实施过程中都只从WebSphere的角度来考虑问题，虽然WAS的优化中包括了操作系统层面的优化，比如对AIX、HPUX的系统参数做出调整，对于网络tcp的参数做出改动，但并没有更进一步，在进行LPAR分区前就做出完整的规划。
WebSphere管理员和硬件与操作系统管理员往往交流不多，且是串行的实施顺序。虽说也就那么做下来了，但是是否充分发挥了硬件的资源，是否达到了最好的性能，最稳定的运行，还是可以有改进的余地？都值得探讨。IBM网站上这三篇文章可谓打通了两种管理员之间的任督二脉，看懂了总有好处。
本书提供了整体系统观点，重点关注在 Power System 和 AIX 上运行 WebSphere Application Server 负载的环境的端到端系统部署、调优和管理方法。因而，本书为两类截然不同的技术读者架起了一座桥梁，也就是硬件和操作系统管理员与 WebSphere Application Server 应用软件工程师。我们都了解，在典型的企业环境中，这两类技术读者需要密切合作，但仍然有着不同的视角和职责。然而，对于企业来说，在度量 Power System 和 AIX 上运行的 WebSphere Application Server 投资的成败时，最终要取决于所有系统架构师能否很好地理解如何同心协力地利用每种产品的特有优势。因而，我们首先要做的是澄清各种观点。

在 Power System 上优化 WebSphere Application Server，第 1 部分: 入门以及优化策略
在 Power System 上优化 WebSphere Application Server，第 2 部分: 设置 Power System 硬件和分区（上）
在 Power System 上优化 WebSphere Application Server，第 3 部分: 设置 Power System [...]]]></description>
			<content:encoded><![CDATA[<p>之前看的很多was优化案例，包括自己实施过程中都只从WebSphere的角度来考虑问题，虽然WAS的优化中包括了操作系统层面的优化，比如对AIX、HPUX的系统参数做出调整，对于网络tcp的参数做出改动，但并没有更进一步，在进行LPAR分区前就做出完整的规划。</p>
<p>WebSphere管理员和硬件与操作系统管理员往往交流不多，且是串行的实施顺序。虽说也就那么做下来了，但是是否充分发挥了硬件的资源，是否达到了最好的性能，最稳定的运行，还是可以有改进的余地？都值得探讨。IBM网站上这三篇文章可谓打通了两种管理员之间的任督二脉，看懂了总有好处。</p>
<blockquote><p>本书提供了整体系统观点，重点关注在 Power System 和 AIX 上运行 WebSphere Application Server 负载的环境的端到端系统部署、调优和管理方法。因而，本书为两类截然不同的技术读者架起了一座桥梁，也就是硬件和操作系统管理员与 WebSphere Application Server 应用软件工程师。我们都了解，在典型的企业环境中，这两类技术读者需要密切合作，但仍然有着不同的视角和职责。然而，对于企业来说，在度量 Power System 和 AIX 上运行的 WebSphere Application Server 投资的成败时，最终要取决于所有系统架构师能否很好地理解如何同心协力地利用每种产品的特有优势。因而，我们首先要做的是澄清各种观点。</p>
</blockquote>
<p><a href="http://www.ibm.com/developerworks/cn/aix/redbooks/wasonpower/1/?ca=drs-tp4608" target="_blank">在 Power System 上优化 WebSphere Application Server，第 1 部分: 入门以及优化策略</a></p>
<p><a href="http://www.ibm.com/developerworks/cn/aix/redbooks/wasonpower/2/index.html?ca=drs-cn-0928" target="_blank">在 Power System 上优化 WebSphere Application Server，第 2 部分: 设置 Power System 硬件和分区（上）</a></p>
<p><a href="http://www.ibm.com/developerworks/cn/aix/redbooks/wasonpower/3/index.html?ca=drs-cn-0928" target="_blank">在 Power System 上优化 WebSphere Application Server，第 3 部分: 设置 Power System 硬件和分区（下）</a></p>
<p>有空么可以再看看《WebSphere Application Server V6.1 Planning and Design WebSphere Handbook Series》</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://www.hashei.me/2009/05/websphere-topology-terminology.html" rel="bookmark" title="Permanent Link: Server Node Cell Cluster&mdash;Websphere拓扑结构及术语介绍上">Server Node Cell Cluster&mdash;Websphere拓扑结构及术语介绍上</a></li><li><a href="http://www.hashei.me/2009/11/%ef%bc%88%e8%bd%ac%ef%bc%89websphere-application-server-6-0%e9%85%8d%e7%bd%ae%e4%b8%8e%e7%ae%a1%e7%90%86.html" rel="bookmark" title="Permanent Link: （转）Websphere Application Server 6.0配置与管理">（转）Websphere Application Server 6.0配置与管理</a></li><li><a href="http://www.hashei.me/2009/05/websphere-cluster.html" rel="bookmark" title="Permanent Link: WebSphere入门篇（四）-安装集群">WebSphere入门篇（四）-安装集群</a></li><li><a href="http://www.hashei.me/2009/09/ibm_websphere_support_tips1.html" rel="bookmark" title="Permanent Link: IBM WebSphere Recent Supports">IBM WebSphere Recent Supports</a></li><li><a href="http://www.hashei.me/2009/05/introduce-was-community-edition.html" rel="bookmark" title="Permanent Link: 应用服务器WAS CE21介绍">应用服务器WAS CE21介绍</a></li></ul><hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/tunning-websphere-application-server-was.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH的一些知识</title>
		<link>http://www.hashei.me/2010/02/ssh%e7%9a%84%e4%b8%80%e4%ba%9b%e7%9f%a5%e8%af%86.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssh%25e7%259a%2584%25e4%25b8%2580%25e4%25ba%259b%25e7%259f%25a5%25e8%25af%2586</link>
		<comments>http://www.hashei.me/2010/02/ssh%e7%9a%84%e4%b8%80%e4%ba%9b%e7%9f%a5%e8%af%86.html#comments</comments>
		<pubDate>Sun, 14 Feb 2010 14:14:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[信息安全]]></category>
		<category><![CDATA[每周精华]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/ssh%e7%9a%84%e4%b8%80%e4%ba%9b%e7%9f%a5%e8%af%86.html</guid>
		<description><![CDATA[最近的几个项目里都用到Linux，于是不能像UNIX下有同事帮忙配置好一切那样轻松，要自力更生了。首先记录一下每次都会用到却还没深深记录在我的艾宾浩斯记忆曲线中的SSH相关知识。
SSH的全称为Secure Shell Protocol，是一种在互联网上提供安全远程登录（取代telnet)及其它安全网络服务（取代FTP）的协议，只要在客户端连接时选择SSH协议即可。对于服务器端的配置，Red Hat Enterprise Linux默认开启了SSH服务，对于配置文件的详细解释，可以参考下面两篇文章。
sshd_config配置 详解
sshd_config 中文手册
由于SSH的传输加密特性，还可以用来做安全隧道
SSH tunnel tips&#160;
IBM developworks上的这一篇 实战 SSH 端口转发 介绍的更为详细，而且有“X 协议转发实例分析”，在维护UNIX/LINUX时可以更方便。
安全隧道的实际用途之一么，当然是用来翻墙。
Firefox + Autoproxy + Tor 使用详解（转载）
MyEnTunnel+FireFox+FoxyProxy 通过SSH帐号翻墙教程
如何使用代理服务器
当然用PPTP建个VPN也是可以的
利用低端VPS开设VPN翻墙
科学松鼠会的一篇公钥安全机制与宫爆鸡丁的故事不错
扯远了，最后付一篇
Unix/Linux 系统自动化管理: 远程登录篇
  Copyright &#169; 2008 This feed is for personal, non-commercial use only
聚沙成塔-小哈的记事薄 by hashei 
如果喜欢，欢迎订阅feed.hashei.com
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949]]></description>
			<content:encoded><![CDATA[<p>最近的几个项目里都用到Linux，于是不能像UNIX下有同事帮忙配置好一切那样轻松，要自力更生了。首先记录一下每次都会用到却还没深深记录在我的艾宾浩斯记忆曲线中的SSH相关知识。</p>
<p>SSH的全称为Secure Shell Protocol，是一种在互联网上提供安全远程登录（取代telnet)及其它安全网络服务（取代FTP）的协议，只要在客户端连接时选择SSH协议即可。对于服务器端的配置，Red Hat Enterprise Linux默认开启了SSH服务，对于配置文件的详细解释，可以参考下面两篇文章。</p>
<p><a href="http://blog.licess.org/sshd_config/">sshd_config配置 详解</a></p>
<p><a href="http://doc.licess.org/openssh/sshd_config.html">sshd_config 中文手册</a></p>
<p>由于SSH的传输加密特性，还可以用来做安全隧道</p>
<p><b><a href="http://blog.pluskid.org/?p=369">SSH tunnel tips</a>&#160;</b></p>
<p>IBM developworks上的这一篇 <a href="https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/" target="_blank">实战 SSH 端口转发</a> 介绍的更为详细，而且有“X 协议转发实例分析”，在维护UNIX/LINUX时可以更方便。</p>
<p>安全隧道的实际用途之一么，当然是用来翻墙。</p>
<p><a href="https://docs.google.com/View?docid=ajh9rxdbc326_32dpkgtkf5#" target="_blank">Firefox + Autoproxy + Tor 使用详解（转载）</a></p>
<p><a href="http://blog.licess.org/myentunnel-firefox-foxyproxy-ssh/">MyEnTunnel+FireFox+FoxyProxy 通过SSH帐号翻墙教程</a></p>
<p><a href="http://www.hashei.me/2010/01/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8.html" target="_blank">如何使用代理服务器</a></p>
<p>当然用PPTP建个VPN也是可以的</p>
<p><a href="http://obmem.com/?p=256" target="_blank">利用低端VPS开设VPN翻墙</a></p>
<p><a href="http://songshuhui.net" target="_blank">科学松鼠会</a>的一篇<a href="http://songshuhui.net/archives/12755.html" target="_blank">公钥安全机制与宫爆鸡丁的故事</a>不错</p>
<p>扯远了，最后付一篇</p>
<p><a href="http://www.ibm.com/developerworks/cn/aix/library/0909_jinjh_unixlogin/?ca=drs-tp4608" target="_blank">Unix/Linux 系统自动化管理: 远程登录篇</a></p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/ssh%e7%9a%84%e4%b8%80%e4%ba%9b%e7%9f%a5%e8%af%86.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>十年 虎年快乐</title>
		<link>http://www.hashei.me/2010/02/%e5%8d%81%e5%b9%b4-%e8%99%8e%e5%b9%b4%e5%bf%ab%e4%b9%90.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%258d%2581%25e5%25b9%25b4-%25e8%2599%258e%25e5%25b9%25b4%25e5%25bf%25ab%25e4%25b9%2590</link>
		<comments>http://www.hashei.me/2010/02/%e5%8d%81%e5%b9%b4-%e8%99%8e%e5%b9%b4%e5%bf%ab%e4%b9%90.html#comments</comments>
		<pubDate>Sat, 13 Feb 2010 12:52:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[生活感想]]></category>
		<category><![CDATA[南方周末]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/%e5%8d%81%e5%b9%b4-%e8%99%8e%e5%b9%b4%e5%bf%ab%e4%b9%90.html</guid>
		<description><![CDATA[爆竹声中一岁除，春风送暖入屠苏。
现在一年年过的是越来越快，还没做什么就又到了除夕，看看现在和一年前的自己，除了年岁增长，别的都停滞不前。
于是安慰自己，把时间放到十年的跨度，希望十年后，能面对一个更理性的社会，更自信的自己。
最后奉上《南方周末》的《十年》。

  Copyright &#169; 2008 This feed is for personal, non-commercial use only
聚沙成塔-小哈的记事薄 by hashei 
如果喜欢，欢迎订阅feed.hashei.com
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949]]></description>
			<content:encoded><![CDATA[<p>爆竹声中一岁除，春风送暖入屠苏。</p>
<p>现在一年年过的是越来越快，还没做什么就又到了除夕，看看现在和一年前的自己，除了年岁增长，别的都停滞不前。</p>
<p>于是安慰自己，把时间放到十年的跨度，希望十年后，能面对一个更理性的社会，更自信的自己。</p>
<p>最后奉上《南方周末》的《十年》。</p>
<p><object style="width: 2349px; height: 367px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="2349" height="367" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://images.infzm.com/medias/2010/0209/34304.swf" /><embed style="width: 2349px; height: 367px;" type="application/x-shockwave-flash" width="2349" height="367" src="http://images.infzm.com/medias/2010/0209/34304.swf"></embed></object></p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/%e5%8d%81%e5%b9%b4-%e8%99%8e%e5%b9%b4%e5%bf%ab%e4%b9%90.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>男足是中国的骄傲</title>
		<link>http://www.hashei.me/2010/02/%e7%94%b7%e8%b6%b3%e6%98%af%e4%b8%ad%e5%9b%bd%e7%9a%84%e9%aa%84%e5%82%b2.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e7%2594%25b7%25e8%25b6%25b3%25e6%2598%25af%25e4%25b8%25ad%25e5%259b%25bd%25e7%259a%2584%25e9%25aa%2584%25e5%2582%25b2</link>
		<comments>http://www.hashei.me/2010/02/%e7%94%b7%e8%b6%b3%e6%98%af%e4%b8%ad%e5%9b%bd%e7%9a%84%e9%aa%84%e5%82%b2.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 15:00:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[生活感想]]></category>
		<category><![CDATA[男足]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/%e7%94%b7%e8%b6%b3%e6%98%af%e4%b8%ad%e5%9b%bd%e7%9a%84%e9%aa%84%e5%82%b2.html</guid>
		<description><![CDATA[强文共赏，原文在这里，作者是推倒柏林墙。
男足这次3：0胜了韩国，举国上下全翻腾了，网上各种油菜花的评论妙语连珠，极尽调侃之能事。不过相比这篇文章，还是逊色不少。原来被国人臭骂了十来年的男足，才是俺们的骄傲。想想也是，国足不就是那日本热血动画片里一直失败却又不曾放弃的小强么？只是没有外挂罩着罢了。
借一句作者文中的话：每当看社会新闻气到吐血的时候，只有国家队的比赛，才能弭平我心灵的创伤。
  Copyright &#169; 2008 This feed is for personal, non-commercial use only
聚沙成塔-小哈的记事薄 by hashei 
如果喜欢，欢迎订阅feed.hashei.com
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949]]></description>
			<content:encoded><![CDATA[<p>强文共赏，原文在<a href="http://www.bullock.cn/blogs/tdtw1/archives/95026.aspx">这里</a>，作者是推倒柏林墙。</p>
<p>男足这次3：0胜了韩国，举国上下全翻腾了，网上各种油菜花的评论妙语连珠，极尽调侃之能事。不过相比这篇文章，还是逊色不少。原来被国人臭骂了十来年的男足，才是俺们的骄傲。想想也是，国足不就是那日本热血动画片里一直失败却又不曾放弃的小强么？只是没有外挂罩着罢了。</p>
<p>借一句作者文中的话：每当看社会新闻气到吐血的时候，只有国家队的比赛，才能弭平我心灵的创伤。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/%e7%94%b7%e8%b6%b3%e6%98%af%e4%b8%ad%e5%9b%bd%e7%9a%84%e9%aa%84%e5%82%b2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安全：该做什么和不该做什么（转载）</title>
		<link>http://www.hashei.me/2010/02/%e5%ae%89%e5%85%a8%ef%bc%9a%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%e5%92%8c%e4%b8%8d%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%88%e8%bd%ac%e8%bd%bd%ef%bc%89.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%25ae%2589%25e5%2585%25a8%25ef%25bc%259a%25e8%25af%25a5%25e5%2581%259a%25e4%25bb%2580%25e4%25b9%2588%25e5%2592%258c%25e4%25b8%258d%25e8%25af%25a5%25e5%2581%259a%25e4%25bb%2580%25e4%25b9%2588%25ef%25bc%2588%25e8%25bd%25ac%25e8%25bd%25bd%25ef%25bc%2589</link>
		<comments>http://www.hashei.me/2010/02/%e5%ae%89%e5%85%a8%ef%bc%9a%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%e5%92%8c%e4%b8%8d%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%88%e8%bd%ac%e8%bd%bd%ef%bc%89.html#comments</comments>
		<pubDate>Fri, 05 Feb 2010 14:01:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[信息安全]]></category>
		<category><![CDATA[每周精华]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[系统设计]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/%e5%ae%89%e5%85%a8%ef%bc%9a%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%e5%92%8c%e4%b8%8d%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%88%e8%bd%ac%e8%bd%bd%ef%bc%89.html</guid>
		<description><![CDATA[ 安全是当今IT系统越来越重视的内容，特别在系统集成方面，需要我们尽可能构造一个安全可靠的环境。虽然按照传统的经验，一个系统对于不同的业务进行了网络拓扑上的划分，在关键位置部署了防火墙、入侵检测系统、审计系统等安全设备。但是“在你花费时间去加强系统中最坚固的部分的时候，你的对手则正在靠近这个系统中最薄弱的环节”，就要求我们“避免过度设计，优先改进最薄弱的环节”，而这点，往往用钱和设备是堆积不出来的，特别是一些安全设备对于管理人员来说比较陌生，操作上的疏忽反而会造成反作用。
本文版权所有 © 2010 Xin LI &#60;delphij@FreeBSD.org&#62; 保留所有权利
原文链接 《安全：该做什么和不该做什么》
非商业转载请注明出处http://blog.delphij.net/， 谢绝商业转载。
安全不能建立在&#34;别人不知道&#34;的基础上
&#34;别人不知道&#34;是一种非常常见的安全假象，举例来说，一种自己设计的山寨加密算法、一个系统中一般人不知道的位置等等，都属于这一类。
将安全建立在&#34;别人不知道&#34;的基础上是非常危险的。首先它会给设计者和用户带来&#34;安全&#34;的幻像，这会直接导致与系统交互的人放松警惕；其次，这样的设计往往留有&#34;后门&#34;，甚至是设计者不知道的后门（因为往往他们并不对这类设计进行充分的、专业的审计），容易被攻击者利用；最后，这种做法存在第三方泄密问题，即，使用这种系统的人，需要提防设计系统的人被其他人买通并泄漏一些秘密的情况。
延缓攻击的手段不能用来阻挡攻击
有许多延缓攻击的手段，例如改变服务的端口（比较常见的如将 ssh 改为 tcp/22 以外的端口），或禁止服务程序显示自己的版本等等，或仅仅简单地启用防火墙，这些手段起到的作用只是延缓攻击，而不应作为一种安全屏障。对于多层次式的安全设计来说，采取这些措施有助于提高检测到入侵的机会，但是它们本身并不会提高安全性。
与前一种情况类似，这种做法也只是让管理员放松警惕。例如以 ssh 为例，有人认为将端口改为一个非知名端口可以避免相关的攻击，但事实是，攻击者依然可以利用 ssh 实现或协议设计中存在的一些漏洞来攻破系统。拥有特定资源的攻击者甚至不需要直接对目标系统实施攻击。在较复杂的攻击手段中，包括简单的 port knocking 一类的保护手法，都可以使用类似分组重放这样的方法来逐步攻破。
 

采用层次式的安全设计
所谓层次式的安全设计，说的是在一套安全系统中包含不同层次的、存在层次式监控关系的安全结构。例如，将本地包含执行文件的那些文件系统通过一定的方式导出给监控网段的机器，就可以让那些机器在攻击者不知情，或至少不太容易注意到的情况下对入侵进行检测；通过将一些重要日志发到以不同的访问控制机制，甚至不同网络协议的记录设备上，则可以有效地检测入侵者的入侵行为，并为日后的分析留下更多的有用信息。
层次式安全在现实中也有应用。例如产品的质检，除了制造商自己进行的质量控制之外，有时分销商或政府也会进行一些抽样的检查。我们注意到，这些设计中的一个重要的特点是在不同的系统中使用不同的访问控制逻辑。例如，日志服务器必须从特定的客户端，甚至只能从某些隔离的内网登录。此时，延缓攻击的手段可以作为它的一项辅助设施，即其目的并不是阻止攻击，而是吸引攻击者在攻击目标上花费更多的时间，从而帮助入侵检测机制更容易地检测这些攻击。
不要轻信任何东西，包括X.509证书
安全系统的设计者必须对安全有全面的理解和认知。有一句很著名的话叫做 In God we trust, all others must submit an X.509 Certificate，需要注意的是，这里说的是 must submit，并没有说 submit 了就可以 trust 了。
和前面所说的层次式安全设计类似，我们的一个基本假定应该是，一个安全系统中的任何参与者，无论是用户还是计算机或程序，都是可能存在弱点的。安全系统，或用户，都不应轻信任何东西，例如，在特权隔离 (Privilege Separation) 这样一种设计中，特权进程除了完成那个非特权的子进程的请求之外，还有一个任务是维护一个&#34;理性状态机&#34;（Sanity DFA），这个状态机的作用是检测非特权进程的异常状况，如果发生这样的情况，则特权进程有拒绝提供服务，并杀掉非特权进程的责任。作为用户，对于系统给出的响应，除了验证对方的证书之外，也应有常识性的了解和适当的判断。
不要把安全建立在不靠谱的基础设施上
举个现实生活中的例子，修一座桥，结果水泥标号不够；修一座楼，结果钢筋用竹签代替，有可能稳当吗？
然而在安全系统的设计中，很多人却往往忽视这样显而易见的问题。比较典型的就是许多网站所采用的所谓&#34;安全控件&#34;的技术。每一个这样的新设施，都意味着新增的攻击面和一组可能可以利用的新漏洞。
在一个安全系统中，防守的一方一定是弱势群体，因为他们必须按照一定的规矩去设计系统；而攻击者则可以采用最便宜的攻击方式。时刻牢记，在你花费时间去加强系统中最坚固的部分的时候，你的对手则正在靠近这个系统中最薄弱的环节，甚至可能是在你不知道的情况下！
下面是一些典型的不靠谱安全设施：

自己设计的算法。（公开的算法经过了更多的专业人士的验证；而自己设计的算法则没有，每个人的知识面都会有些局限，即使第一流的密码学设计者也可能设计出糟糕的算法，因此同行的验证很重要） 
监控键盘的驱动程序。（这类做法不仅不能对安全产生助益，反而会给其他木马带来监控用户键盘，从而攫取其他机密信息的便利）。 
基于明文的通讯协议。（当数据需要经过不受控制的网络节点的时候，端对端加密是非常重要的）。 

操作复杂不等于安全
一些安全措施在实施了之后，用户可能会发觉与之前相比会带来一些不便。有些不便可能是无法避免的，但这并不意味着，使用的时候给用户带来不适的安全设施就一定会提高安全性。
举例来说，一些银行在登录时，会在用户输入用户名之后，先显示一张用户自己定义的图片，然后再让用户输入密码。这种设施本身并没有改善任何安全性，因为中间人攻击仍然可以获得那个图片，更糟糕的是，由于看到了希望看到的那张图片，用户反而会对这个网站产生安全幻觉。
而另一种做法则是给用户一个小的token，这个token能够根据网站和token之间共享的信息和用户自己的密码来计算出一个登录用的一次性密码。拿到这个一次性密码的攻击者，并没有很好的办法再次使用这个密码来做别的事情。
代码开放和安全是不是一回事
许多人认为，开放源代码的东西更安全一些。这种说法并不完全正确。还有一些人认为，因为代码大家都可以看到，因此开放源代码的东西更安全，事实上，后面这种看法完全是逻辑混乱。
举个例子，面对来要求审计账目的税务局，一个CEO的回答是，我的账目绝对没有问题，因为我这家公司上上下下200多人都可以随时去看。毫不意外地，这个审计师决定自己再看一遍，因为这是一家广告公司，而&#34;能看&#34;和&#34;看过的人都是内行&#34;以及&#34;有多少内行看过&#34;也是完全不同的概念。
在选择一个解决方案的时候，如果一定要参考其他人的意见的时候，一定要看这个意见是来自什么人。开放源代码的产品一样有可能会存在漏洞，看它代码的人很可能并不是很有安全方面知识和经验的人，有这些经验的人可能在看其他的开放源代码，甚至不开放源代码的产品，等等。真正重要的是，找一个值得信任的专业人士去做这样的评估，而不是仅仅看一个和安全与否关系不大的指标就匆忙决定。
使用公开的、经过验证的安全算法和协议
算法和协议是实际应用中的安全系统中最关键的两个部件。经过验证的、公开的算法和协议有这样一些无法替代的好处：

设计它们的坏人有足够的专业知识。 
试图攻击它们，并且也有足够专业知识的坏人已经证明，攻破它们需要的代价大到不值得从这个方面去突破它们。 
坏人之间为了证明自己做了充分的对抗性的同僚复审。 
它们被破解的时候，你可能不是最先知道这件事的，但是也不会是最需要担心这件事的人。 
最重要的一点：设计一个自己破解不了的东西很容易，而设计一个 别人 破解不了的东西很难。我要提醒读者的是，你需要的是别人破解不了你的系统，而不仅仅是你自己破解不了。 

避免同一类型的弱点
攻击者在攻击的时候，往往会采用最&#34;便宜&#34;的方法去进行。例如，在发现一个由于程序设计问题而导致的安全漏洞时，除了修正这个问题本身之外，还应对系统中可能存在类似问题的其他环节进行类似的代码审计。对于开源项目来说这一点尤其重要。
例如，如果OS允许在地址0附近映射内存页，则由于欠锁一类原因导致的竞态条件所导致的可能就不仅仅是崩溃了。这类问题的典型用例是先将自己的代码映射到地址0附近，然后设法触发内核的一个可能导致空指针引用的函数指针调用，这样系统将会在内核的上下文运行那些代码（说明：出于性能考虑，一般来说内核并不会切换到一个完全不同的地址空间去运行）。尽管修正竞态条件本身很重要（例如FreeBSD SA 09:13.pipe），但通过禁止在地址0附近映射内存页，可以将这一类型的潜在漏洞全部由特权提升降级为崩溃或死锁，因此也就有了 [...]]]></description>
			<content:encoded><![CDATA[<p> 安全是当今IT系统越来越重视的内容，特别在系统集成方面，需要我们尽可能构造一个安全可靠的环境。虽然按照传统的经验，一个系统对于不同的业务进行了网络拓扑上的划分，在关键位置部署了防火墙、入侵检测系统、审计系统等安全设备。但是“在你花费时间去加强系统中最坚固的部分的时候，你的对手则正在靠近这个系统中最薄弱的环节”，就要求我们“<b>避免过度设计，优先改进最薄弱的环节</b>”，而这点，往往用钱和设备是堆积不出来的，特别是一些安全设备对于管理人员来说比较陌生，操作上的疏忽反而会造成反作用。</p>
<p>本文版权所有 © 2010 Xin LI &lt;delphij@FreeBSD.org&gt; 保留所有权利</p>
<p>原文链接 《<a href="http://blog.delphij.net/archives/2010/02/post-591.html">安全：该做什么和不该做什么</a>》</p>
<p>非商业转载请注明出处<a href="http://blog.delphij.net/">http://blog.delphij.net/</a>， 谢绝商业转载。</p>
<p><b>安全不能建立在&quot;别人不知道&quot;的基础上</b></p>
<p>&quot;别人不知道&quot;是一种非常常见的安全<b>假象</b>，举例来说，一种自己设计的山寨加密算法、一个系统中一般人不知道的位置等等，都属于这一类。</p>
<p>将安全建立在&quot;别人不知道&quot;的基础上是非常危险的。首先它会给设计者和用户带来&quot;安全&quot;的幻像，这会直接导致与系统交互的人放松警惕；其次，这样的设计往往留有&quot;后门&quot;，甚至是设计者不知道的后门（因为往往他们并不对这类设计进行充分的、专业的审计），容易被攻击者利用；最后，这种做法存在第三方泄密问题，即，使用这种系统的人，需要提防设计系统的人被其他人买通并泄漏一些秘密的情况。</p>
<p><b>延缓攻击的手段不能用来阻挡攻击</b></p>
<p>有许多延缓攻击的手段，例如改变服务的端口（比较常见的如将 ssh 改为 tcp/22 以外的端口），或禁止服务程序显示自己的版本等等，或仅仅简单地启用防火墙，这些手段起到的作用只是延缓攻击，而不应作为一种安全屏障。对于多层次式的安全设计来说，采取这些措施有助于提高检测到入侵的机会，但是它们本身并不会提高安全性。</p>
<p>与前一种情况类似，这种做法也只是让管理员放松警惕。例如以 ssh 为例，有人认为将端口改为一个非知名端口可以避免相关的攻击，但事实是，攻击者依然可以利用 ssh 实现或协议设计中存在的一些漏洞来攻破系统。拥有特定资源的攻击者甚至不需要直接对目标系统实施攻击。在较复杂的攻击手段中，包括简单的 port knocking 一类的保护手法，都可以使用类似分组重放这样的方法来逐步攻破。</p>
<p> <span id="more-1132"></span>
</p>
<p><b>采用层次式的安全设计</b></p>
<p>所谓层次式的安全设计，说的是在一套安全系统中包含不同层次的、存在层次式监控关系的安全结构。例如，将本地包含执行文件的那些文件系统通过一定的方式导出给监控网段的机器，就可以让那些机器在攻击者不知情，或至少不太容易注意到的情况下对入侵进行检测；通过将一些重要日志发到以不同的访问控制机制，甚至不同网络协议的记录设备上，则可以有效地检测入侵者的入侵行为，并为日后的分析留下更多的有用信息。</p>
<p>层次式安全在现实中也有应用。例如产品的质检，除了制造商自己进行的质量控制之外，有时分销商或政府也会进行一些抽样的检查。我们注意到，这些设计中的一个重要的特点是在不同的系统中使用不同的访问控制逻辑。例如，日志服务器必须从特定的客户端，甚至只能从某些隔离的内网登录。此时，延缓攻击的手段可以作为它的一项辅助设施，即其目的并不是阻止攻击，而是吸引攻击者在攻击目标上花费更多的时间，从而帮助入侵检测机制更容易地检测这些攻击。</p>
<p><b>不要轻信任何东西，包括X.509证书</b></p>
<p>安全系统的设计者必须对安全有全面的理解和认知。有一句很著名的话叫做 In God we trust, all others must submit an X.509 Certificate，需要注意的是，这里说的是 must submit，并没有说 submit 了就可以 trust 了。</p>
<p>和前面所说的层次式安全设计类似，我们的一个基本假定应该是，一个安全系统中的任何参与者，无论是用户还是计算机或程序，都是可能存在弱点的。安全系统，或用户，都不应轻信任何东西，例如，在特权隔离 (Privilege Separation) 这样一种设计中，特权进程除了完成那个非特权的子进程的请求之外，还有一个任务是维护一个&quot;理性状态机&quot;（Sanity DFA），这个状态机的作用是检测非特权进程的异常状况，如果发生这样的情况，则特权进程有拒绝提供服务，并杀掉非特权进程的责任。作为用户，对于系统给出的响应，除了验证对方的证书之外，也应有常识性的了解和适当的判断。</p>
<p><b>不要把安全建立在不靠谱的基础设施上</b></p>
<p>举个现实生活中的例子，修一座桥，结果水泥标号不够；修一座楼，结果钢筋用竹签代替，有可能稳当吗？</p>
<p>然而在安全系统的设计中，很多人却往往忽视这样显而易见的问题。比较典型的就是许多网站所采用的所谓&quot;安全控件&quot;的技术。每一个这样的新设施，都意味着新增的攻击面和一组可能可以利用的新漏洞。</p>
<p>在一个安全系统中，防守的一方一定是弱势群体，因为他们必须按照一定的规矩去设计系统；而攻击者则可以采用最便宜的攻击方式。时刻牢记，在你花费时间去加强系统中最坚固的部分的时候，你的对手则正在靠近这个系统中最薄弱的环节，甚至可能是在你不知道的情况下！</p>
<p>下面是一些典型的不靠谱安全设施：</p>
<ul>
<li>自己设计的算法。（公开的算法经过了更多的专业人士的验证；而自己设计的算法则没有，每个人的知识面都会有些局限，即使第一流的密码学设计者也可能设计出糟糕的算法，因此同行的验证很重要） </li>
<li>监控键盘的驱动程序。（这类做法不仅不能对安全产生助益，反而会给其他木马带来监控用户键盘，从而攫取其他机密信息的便利）。 </li>
<li>基于明文的通讯协议。（当数据需要经过不受控制的网络节点的时候，端对端加密是非常重要的）。 </li>
</ul>
<p><b>操作复杂不等于安全</b></p>
<p>一些安全措施在实施了之后，用户可能会发觉与之前相比会带来一些不便。有些不便可能是无法避免的，但这并不意味着，使用的时候给用户带来不适的安全设施就一定会提高安全性。</p>
<p>举例来说，一些银行在登录时，会在用户输入用户名之后，先显示一张用户自己定义的图片，然后再让用户输入密码。这种设施本身并没有改善任何安全性，因为中间人攻击仍然可以获得那个图片，更糟糕的是，由于看到了希望看到的那张图片，用户反而会对这个网站产生安全幻觉。</p>
<p>而另一种做法则是给用户一个小的token，这个token能够根据网站和token之间共享的信息和用户自己的密码来计算出一个登录用的一次性密码。拿到这个一次性密码的攻击者，并没有很好的办法再次使用这个密码来做别的事情。</p>
<p><b>代码开放和安全是不是一回事</b></p>
<p>许多人认为，开放源代码的东西更安全一些。这种说法并不完全正确。还有一些人认为，因为代码大家都可以看到，因此开放源代码的东西更安全，事实上，后面这种看法完全是逻辑混乱。</p>
<p>举个例子，面对来要求审计账目的税务局，一个CEO的回答是，我的账目绝对没有问题，因为我这家公司上上下下200多人都可以随时去看。毫不意外地，这个审计师决定自己再看一遍，因为这是一家广告公司，而&quot;能看&quot;和&quot;看过的人都是内行&quot;以及&quot;有多少内行看过&quot;也是完全不同的概念。</p>
<p>在选择一个解决方案的时候，如果一定要参考其他人的意见的时候，一定要看这个意见是来自什么人。开放源代码的产品一样有可能会存在漏洞，看它代码的人很可能并不是很有安全方面知识和经验的人，有这些经验的人可能在看其他的开放源代码，甚至不开放源代码的产品，等等。真正重要的是，找一个值得信任的专业人士去做这样的评估，而不是仅仅看一个和安全与否关系不大的指标就匆忙决定。</p>
<p><b>使用公开的、经过验证的安全算法和协议</b></p>
<p>算法和协议是实际应用中的安全系统中最关键的两个部件。经过验证的、公开的算法和协议有这样一些无法替代的好处：</p>
<ul>
<li>设计它们的坏人有足够的专业知识。 </li>
<li>试图攻击它们，并且也有足够专业知识的坏人已经证明，攻破它们需要的代价大到不值得从这个方面去突破它们。 </li>
<li>坏人之间为了证明自己做了充分的对抗性的同僚复审。 </li>
<li>它们被破解的时候，你可能不是最先知道这件事的，但是也不会是最需要担心这件事的人。 </li>
<li>最重要的一点：设计一个自己破解不了的东西很容易，而设计一个 <b>别人</b> 破解不了的东西很难。我要提醒读者的是，你需要的是别人破解不了你的系统，而不仅仅是你自己破解不了。 </li>
</ul>
<p><b>避免同一类型的弱点</b></p>
<p>攻击者在攻击的时候，往往会采用最&quot;便宜&quot;的方法去进行。例如，在发现一个由于程序设计问题而导致的安全漏洞时，除了修正这个问题本身之外，还应对系统中可能存在类似问题的其他环节进行类似的代码审计。对于开源项目来说这一点尤其重要。</p>
<p>例如，如果OS允许在地址0附近映射内存页，则由于欠锁一类原因导致的竞态条件所导致的可能就不仅仅是崩溃了。这类问题的典型用例是先将自己的代码映射到地址0附近，然后设法触发内核的一个可能导致空指针引用的函数指针调用，这样系统将会在内核的上下文运行那些代码（说明：出于性能考虑，一般来说内核并不会切换到一个完全不同的地址空间去运行）。尽管修正竞态条件本身很重要（例如FreeBSD SA 09:13.pipe），但通过禁止在地址0附近映射内存页，可以将这一类型的潜在漏洞全部由特权提升降级为崩溃或死锁，因此也就有了 FreeBSD EN 09:05.null 所做的改动。</p>
<p><b>避免过度设计，优先改进最薄弱的环节</b></p>
<p>过度设计是许多工程师会遇到的问题。例如，在内网交换机上传输加密数据，在多数情况下都是不必要的（听不到发到其他节点的包，而听包本身所需要的权限已经足够做其他事情）。</p>
<p>攻击者不需要遵循任何规则，而防守者则必须遵守一定的标准。因此，作为原则，防守的一方应假定攻击者会找到系统中最薄弱的环节，或者说，站在攻击者的角度去思考从什么地方去攻陷系统，并加强系统中最薄弱的那些环节。</p>
<p>不过，想要避免这些设计问题，必须拥有许多相关的知识和经验。</p>
<p>今天先写到这里，改天继续总结。</p>
<hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/%e5%ae%89%e5%85%a8%ef%bc%9a%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%e5%92%8c%e4%b8%8d%e8%af%a5%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%88%e8%bd%ac%e8%bd%bd%ef%bc%89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

