<?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>服务器运维与网站架构&#124;Linux运维&#124;互联网研究</title>
	<atom:link href="http://www.ha97.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ha97.com</link>
	<description>记录我的思想轨迹、工作学习、生活和关注的领域</description>
	<lastBuildDate>Fri, 03 Feb 2012 10:05:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>移动游戏的架构艺术</title>
		<link>http://www.ha97.com/4431.html</link>
		<comments>http://www.ha97.com/4431.html#comments</comments>
		<pubDate>Fri, 03 Feb 2012 10:05:11 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[架构]]></category>
		<category><![CDATA[移动游戏]]></category>
		<category><![CDATA[艺术]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4431</guid>
		<description><![CDATA[游戏是一门综合的艺术，作者以铸剑为喻，形象地展示了移动游戏架构的艺术之美。 艺术是人的知识、情感、理想、意念综合心理活动的有机产物，是人们现实生活和精神世界的形象表现。文学可以是艺术，雕塑可以是艺术，音乐可以是艺术，电影可以是艺术……那么游戏呢？ 游戏是一门综合的艺术 无论是单机游戏还是网络游戏、PC游戏还是手机游戏，都需经过如图1所示的逐步进化的过程。 图1  游戏研发的流程 任何一款游戏，都有故事情节、人物、场景、音乐和音效等内容，因此其中每一部分内容都需要追求以艺术化的手段，将游戏的意象情景更生动地展现给用户。作为程序员的我们，之前可能只是以为只有策划人员需要通过艺术来表达游戏的内容、测试人员需要带着艺术去欣赏并完善游戏的体验，那么程序员对游戏的架构和艺术之间又是怎么挂上钩的呢？ 用程序语言铸造艺术之剑 从古至今，有不少人热衷于铸剑，而铸出的剑是否称得上艺术作品，关键就在于它是否能表达出铸剑人的情感和用心所在。那么对于游戏程序的架构来说，也需要能体现出架构师对游戏的整体架构和每一个模块的把握，以及赋予它们的“神力”；同时，好的架构还将贯穿于游戏开发的整个过程。简单的测试一下，你是否也会遇到以下这些问题呢？ 感觉游戏框架非常混乱，毫无条理？ 开发完成后出现大量Bug，并且不知从何下手去解决？ 出现很多难以重现的致命Bug？ 添加某个功能或模块非常困难？ 经过频繁的修改之后， 出现大量冗余代码？ 如果出现上述问题，那么说明我们所使用的这把架构之剑并不锋利，可能没有将“力”用在剑刃上吧。这也从另一方面体现出铸剑过程（也就是游戏的架构）的重要性。如果带着这些问题继续锤炼，那么终将铸成一把绝世宝剑。 架构是一个看不到也摸不着的虚幻东西，因此，我们还是结合具体的实例来分析如何将架构艺术化，通过代码来表达架构思想。假设现在有一套策划案，并且美术人员能够为我们准备所需要的资源。 “采矿”是铸剑之根本 有了铸剑的意念，就需要去选择各种高品质的玄铁矿石。同样，对于游戏的架构来说，就需要对游戏的各个功能模块进行分析，针对每个模块需要实现的功能和特殊属性进行抽象，概括出各个模块所需要定义的数据结构和接口以及各模块之间的关系。然后，再根据策划文档整理出适合编写程序的流程图、关系图、结构图等。最后，根据这些文档资料配合游戏的运行环境（比如游戏运行的平台）对实现技术进行需求分析，该分析主要针对功能和性能进行。下面我们以Android和iPhone两大平台为例进行分析。 在Android平台上，从效率的角度考虑，可以选择C/C++作为开发语言、OpenGL&#124;ES作为图形库；从简单方便的角度考虑，可以选择Java作为开发语言、Skia作为图形库。 而在iPhone平台上，从跨平台的角度考虑，可以选择C/C++作为开发语言、OpenGL&#124;ES作为图形库；从开发的难易程度考虑，可以选择Objective-C作为开发语言、Quartz2D作为图形库。这里我们没有考虑3D的特殊问题，如果进行3D游戏开发，必然会选择OpenGL&#124;ES。另外，在iPhone平台上使用Quartz2D作为图形库开发游戏的比较少。 如果要做的是一个跨平台的游戏，我们还需要分析各平台的跨平台能力和特性（包括开发语言、渲染库、资源管理、内存管理等），例如iPhone中内存管理采用了引用计数的机制，那么可以考虑通过C++来实现一个类似的机制，这样就可以保证其他平台也都可以通用该机制。 这里我们也没有刻意地对某个语言和库进行比较，因为它们通常都有各自的优势，需要根据具体的游戏需求进行选择。准备好铸剑的玄铁之后，下一步我们开始铸剑（编写代码）了吗？ “剑范”决定“剑气” “剑范”即铸剑所用的模型，“剑气”即剑品的气势，因此，铸剑所用的模型将最终决定宝剑的“主题”。 “剑范”的打造对应于游戏架构中负责全局范围的核心框架，该框架是否合理，将决定整个架构的成败。说到框架，不得不说说大家可能都比较熟悉的MVC框架，作为程序员，应该没有谁不知道MVC的定义，但是关键在于如何从更深层次去学习它，理解它，运行它。曾经一位朋友问我：“你们通常采用什么框架？什么框架会比较好呢？”我回答：“MVC框架啊！”看着他一脸吃惊的表情和一句“也很普通的框架！”的回答，我真不知道说什么好！MVC框架的确很普通，也很简单，而如何让它发挥出其本身的功效却是关键！例如，在iPhone开发中，苹果公司就推荐采用该框架，具体描述如下： 视图（V）：由UIView类的子类及其相关的UIView-Controller类来提供； 控制器（C）：控制器行为通过主要由委托、目标操作、通知来实现； 模型（M）：通过数据库和数据含义等协议提供逻辑模型，由控制器进行管理。 另外，就连目前红遍整个互联网的Android系统来说，Google官方也同样推荐使用MVC框架来开发和维护应用程序，具体描述如下： 视图（V）：由View和SurfaceView（或者自定义的视图）提供用户的界面，采用XML格式进行布局； 控制器（C）：由Activity来管理视图和逻辑模型； 模型（M）：向视图提供逻辑模型，由控制器来触发，比如各种Adapter接口。 根据切身的经历，我得出了下面的观点： “如果不能保证将其他的设计模式运用好，就不如选择类似于MVC这类的简约而不简单的框架来完成，可能结果会更精彩！” 由此可见游戏架构中框架的重要性。如果你还觉得不够，那么我建议应该向众多的Android和iPhone开发者询问答案，苹果和 Google的文档将是你最好的学习资料！相信你已经跟着我们的脚步，打造出了适合你自己的 “剑范”了，现在是时候开始铸剑了！ 真金不怕火炼 宝剑品质的好坏在于使用的原材料，如何检验矿石的材质？还得看准备的火力是否强劲。现在让我们回到游戏架构的话题。 首先，尽管通常游戏中可能会存在多个视图、多个模型甚至多个控制器，我们还是将一款游戏分为三个大的模块，即MVC的控制器、视图、逻辑模型。图2为我当前正在开发的一款Android游戏的框架。 由图2可以看出，程序从入口Activity进入，通过setContentView()函数设置显示一个视图类MainView时，游戏的主线程已经开始Loop了；而游戏要显示的具体场景则由控制器Control类根据游戏状态等信息通过getCurScene()函数得到，得到的场景实际上是抽象场景SceneInterface类的子类（如SceneA）；在SceneInterface中包括各个场景的公共接口，以便在Control.control()中能直接控制当前显示的场景，需要注意的是，在控制器中一般需要先通过SceneInterface.reCycle()来对上一个界面产生的垃圾进行回收，同时对逻辑模型类Model中的数据进行处理。 图2  MVC游戏框架 由于图片大小的原因，我没有列出全部类结构，这些类包括在SceneInterface中定义一个界面事件的公共接口或者对Model采用“实体—对象—类”的方式进行扩展以及所需的工具类。 铸剑的最高境界—指导练剑之人 好的宝剑通常可以提高用剑之人的剑术！Google和苹果所铸造的Android、iPhone这两把宝剑，指导了无数的开发者。我们又何不学习学习Google和苹果这两位铸剑人的技艺呢？ 下面继续分析Android可能会如何指导“练剑人”。在做Android应用开发时，Google推荐通过XML文件来布局界面，从而让UI界面和程序逻辑分离，方便维护；实际上Google对XML文件以及其他资源都进行了优化，这样做可以提高程序的运行效率。下面我们也将学习这一招，通过XML文件来布局游戏场景。 首先，将一个游戏场景（SceneA）中需要显示的内容分为UI界面（如按钮、菜单等）和游戏对象（如精灵）两部分；其次，UI界面和游戏对象可能都需要动画；最后，既然要使用XML文件来布局，就需要一个专门的解析器。稍作整理，现在我们所需要的模块如图3所示。 图3  游戏场景架构 图3描述了一个场景的元素架构与解析，其中UI界面、游戏对象、动画模块都将使用一个或多个XML文件来完成，通过XML的解析，最终将XML文件的内容输出到SceneA中。整个过程首先需要构建一个XML解析器，然后根据游戏的需要构建各种UI控件、游戏对象、动画等类。目前工程中用到的类包括： UI控件：UIText、UIProgress、UITexture、UIList、UIClick、UICheckBox 游戏对象：GameObj、EffectObj、Bullet、Enemy 游戏动画：PosAnimation、ColorAnima-tion、FrameAnimation [...]]]></description>
			<content:encoded><![CDATA[<p><strong>游戏是一门综合的艺术，作者以铸剑为喻，形象地展示了移动游戏架构的艺术之美。</strong></p>
<p>艺术是人的知识、情感、理想、意念综合心理活动的有机产物，是人们现实生活和精神世界的形象表现。文学可以是艺术，雕塑可以是艺术，音乐可以是艺术，电影可以是艺术……那么游戏呢？</p>
<p><strong>游戏是一门综合的艺术</strong></p>
<p>无论是单机游戏还是网络游戏、PC游戏还是手机游戏，都需经过如图1所示的逐步进化的过程。<a href="http://www.ha97.com/wp-content/uploads/image/2012/02/1005224YZ.gif"><img title="pic1" src="http://www.ha97.com/wp-content/uploads/image/2012/02/1005224YZ.gif" alt="pic1" width="428" height="222" /></a></p>
<p>图1  游戏研发的流程</p>
<p><span id="more-4431"></span></p>
<p>任何一款游戏，都有故事情节、人物、场景、音乐和音效等内容，因此其中每一部分内容都需要追求以艺术化的手段，将游戏的意象情景更生动地展现给用户。作为程序员的我们，之前可能只是以为只有策划人员需要通过艺术来表达游戏的内容、测试人员需要带着艺术去欣赏并完善游戏的体验，那么程序员对游戏的架构和艺术之间又是怎么挂上钩的呢？</p>
<p><strong>用程序语言铸造艺术之剑</strong></p>
<p>从古至今，有不少人热衷于铸剑，而铸出的剑是否称得上艺术作品，关键就在于它是否能表达出铸剑人的情感和用心所在。那么对于游戏程序的架构来说，也需要能体现出架构师对游戏的整体架构和每一个模块的把握，以及赋予它们的“神力”；同时，好的架构还将贯穿于游戏开发的整个过程。简单的测试一下，你是否也会遇到以下这些问题呢？</p>
<ul>
<li>感觉游戏框架非常混乱，毫无条理？</li>
<li>开发完成后出现大量Bug，并且不知从何下手去解决？</li>
<li>出现很多难以重现的致命Bug？</li>
<li>添加某个功能或模块非常困难？</li>
<li>经过频繁的修改之后， 出现大量冗余代码？</li>
</ul>
<p>如果出现上述问题，那么说明我们所使用的这把架构之剑并不锋利，可能没有将“力”用在剑刃上吧。这也从另一方面体现出铸剑过程（也就是游戏的架构）的重要性。如果带着这些问题继续锤炼，那么终将铸成一把绝世宝剑。</p>
<p>架构是一个看不到也摸不着的虚幻东西，因此，我们还是结合具体的实例来分析如何将架构艺术化，通过代码来表达架构思想。假设现在有一套策划案，并且美术人员能够为我们准备所需要的资源。</p>
<p><strong>“采矿”是铸剑之根本</strong></p>
<p>有了铸剑的意念，就需要去选择各种高品质的玄铁矿石。同样，对于游戏的架构来说，就需要对游戏的各个功能模块进行分析，针对每个模块需要实现的功能和特殊属性进行抽象，概括出各个模块所需要定义的数据结构和接口以及各模块之间的关系。然后，再根据策划文档整理出适合编写程序的流程图、关系图、结构图等。最后，根据这些文档资料配合游戏的运行环境（比如游戏运行的平台）对实现技术进行需求分析，该分析主要针对功能和性能进行。下面我们以Android和iPhone两大平台为例进行分析。</p>
<p>在Android平台上，从效率的角度考虑，可以选择C/C++作为开发语言、OpenGL|ES作为图形库；从简单方便的角度考虑，可以选择Java作为开发语言、Skia作为图形库。</p>
<p>而在iPhone平台上，从跨平台的角度考虑，可以选择C/C++作为开发语言、OpenGL|ES作为图形库；从开发的难易程度考虑，可以选择Objective-C作为开发语言、Quartz2D作为图形库。这里我们没有考虑3D的特殊问题，如果进行3D游戏开发，必然会选择OpenGL|ES。另外，在iPhone平台上使用Quartz2D作为图形库开发游戏的比较少。</p>
<p>如果要做的是一个跨平台的游戏，我们还需要分析各平台的跨平台能力和特性（包括开发语言、渲染库、资源管理、内存管理等），例如iPhone中内存管理采用了引用计数的机制，那么可以考虑通过C++来实现一个类似的机制，这样就可以保证其他平台也都可以通用该机制。</p>
<p>这里我们也没有刻意地对某个语言和库进行比较，因为它们通常都有各自的优势，需要根据具体的游戏需求进行选择。准备好铸剑的玄铁之后，下一步我们开始铸剑（编写代码）了吗？</p>
<p><strong>“剑范”决定“剑气”</strong></p>
<p>“剑范”即铸剑所用的模型，“剑气”即剑品的气势，因此，铸剑所用的模型将最终决定宝剑的“主题”。</p>
<p>“剑范”的打造对应于游戏架构中负责全局范围的核心框架，该框架是否合理，将决定整个架构的成败。说到框架，不得不说说大家可能都比较熟悉的MVC框架，作为程序员，应该没有谁不知道MVC的定义，但是关键在于如何从更深层次去学习它，理解它，运行它。曾经一位朋友问我：“你们通常采用什么框架？什么框架会比较好呢？”我回答：“MVC框架啊！”看着他一脸吃惊的表情和一句“也很普通的框架！”的回答，我真不知道说什么好！MVC框架的确很普通，也很简单，而如何让它发挥出其本身的功效却是关键！例如，在iPhone开发中，苹果公司就推荐采用该框架，具体描述如下：</p>
<ul>
<li>视图（V）：由UIView类的子类及其相关的UIView-Controller类来提供；</li>
<li>控制器（C）：控制器行为通过主要由委托、目标操作、通知来实现；</li>
<li>模型（M）：通过数据库和数据含义等协议提供逻辑模型，由控制器进行管理。</li>
</ul>
<p>另外，就连目前红遍整个互联网的Android系统来说，Google官方也同样推荐使用MVC框架来开发和维护应用程序，具体描述如下：</p>
<ul>
<li>视图（V）：由View和SurfaceView（或者自定义的视图）提供用户的界面，采用XML格式进行布局；</li>
<li>控制器（C）：由Activity来管理视图和逻辑模型；</li>
<li>模型（M）：向视图提供逻辑模型，由控制器来触发，比如各种Adapter接口。</li>
</ul>
<p>根据切身的经历，我得出了下面的观点： “如果不能保证将其他的设计模式运用好，就不如选择类似于MVC这类的简约而不简单的框架来完成，可能结果会更精彩！”</p>
<p>由此可见游戏架构中框架的重要性。如果你还觉得不够，那么我建议应该向众多的Android和iPhone开发者询问答案，苹果和 Google的文档将是你最好的学习资料！相信你已经跟着我们的脚步，打造出了适合你自己的 “剑范”了，现在是时候开始铸剑了！</p>
<p><strong>真金不怕火炼</strong></p>
<p>宝剑品质的好坏在于使用的原材料，如何检验矿石的材质？还得看准备的火力是否强劲。现在让我们回到游戏架构的话题。</p>
<p>首先，尽管通常游戏中可能会存在多个视图、多个模型甚至多个控制器，我们还是将一款游戏分为三个大的模块，即MVC的控制器、视图、逻辑模型。图2为我当前正在开发的一款Android游戏的框架。</p>
<p>由图2可以看出，程序从入口Activity进入，通过setContentView()函数设置显示一个视图类MainView时，游戏的主线程已经开始Loop了；而游戏要显示的具体场景则由控制器Control类根据游戏状态等信息通过getCurScene()函数得到，得到的场景实际上是抽象场景SceneInterface类的子类（如SceneA）；在SceneInterface中包括各个场景的公共接口，以便在Control.control()中能直接控制当前显示的场景，需要注意的是，在控制器中一般需要先通过SceneInterface.reCycle()来对上一个界面产生的垃圾进行回收，同时对逻辑模型类Model中的数据进行处理。</p>
<p><a href="http://www.ha97.com/wp-content/uploads/image/2012/02/100525ngZ.gif"><img title="pic2" src="http://www.ha97.com/wp-content/uploads/image/2012/02/100525ngZ.gif" alt="pic2" width="554" height="287" /></a></p>
<p>图2  MVC游戏框架</p>
<p>由于图片大小的原因，我没有列出全部类结构，这些类包括在SceneInterface中定义一个界面事件的公共接口或者对Model采用“实体—对象—类”的方式进行扩展以及所需的工具类。</p>
<p><strong>铸剑的最高境界—指导练剑之人</strong></p>
<p>好的宝剑通常可以提高用剑之人的剑术！Google和苹果所铸造的Android、iPhone这两把宝剑，指导了无数的开发者。我们又何不学习学习Google和苹果这两位铸剑人的技艺呢？</p>
<p>下面继续分析Android可能会如何指导“练剑人”。在做Android应用开发时，Google推荐通过XML文件来布局界面，从而让UI界面和程序逻辑分离，方便维护；实际上Google对XML文件以及其他资源都进行了优化，这样做可以提高程序的运行效率。下面我们也将学习这一招，通过XML文件来布局游戏场景。</p>
<p>首先，将一个游戏场景（SceneA）中需要显示的内容分为UI界面（如按钮、菜单等）和游戏对象（如精灵）两部分；其次，UI界面和游戏对象可能都需要动画；最后，既然要使用XML文件来布局，就需要一个专门的解析器。稍作整理，现在我们所需要的模块如图3所示。</p>
<p><a href="http://www.ha97.com/wp-content/uploads/image/2012/02/100527GRf.gif"><img title="pic3" src="http://www.ha97.com/wp-content/uploads/image/2012/02/100527GRf.gif" alt="pic3" width="347" height="330" /></a>图3  游戏场景架构</p>
<p>图3描述了一个场景的元素架构与解析，其中UI界面、游戏对象、动画模块都将使用一个或多个XML文件来完成，通过XML的解析，最终将XML文件的内容输出到SceneA中。整个过程首先需要构建一个XML解析器，然后根据游戏的需要构建各种UI控件、游戏对象、动画等类。目前工程中用到的类包括：</p>
<ul>
<li>UI控件：UIText、UIProgress、UITexture、UIList、UIClick、UICheckBox</li>
<li>游戏对象：GameObj、EffectObj、Bullet、Enemy</li>
<li>游戏动画：PosAnimation、ColorAnima-tion、FrameAnimation</li>
</ul>
<p>每一个类中都有其所需要的成员变量，下面我们可以根据解析器的实现来使用XML文件布局游戏场景了。根据游戏的需要，可以将XML文件扩展到支持多级子节点，然后在游戏中获取XML中定义的元素，进行操作即可。同样需要将界面和程序进行分析，方便修改和维护。整个过程的完整流程如图4所示。</p>
<p><a href="http://www.ha97.com/wp-content/uploads/image/2012/02/100529Jhz.gif"><img title="pic4" src="http://www.ha97.com/wp-content/uploads/image/2012/02/100529Jhz.gif" alt="pic4" width="395" height="419" /></a>图4  XML布局流程</p>
<p>实际上我正在进行的项目除封装了上面所说的三个模块外，还将整个游戏架构都进行了封装，包括图2中所展示的控制器、主线程、模型，整个框架都能通过XML文件直接编写。到这里，你所铸造的宝剑也应该出世了，带上宝剑，冲向游戏世界吧。</p>
<p><strong>作者：</strong><strong>杨丰盛</strong>，轻灵数码研发部经理，精通Java、C/C++等语言及J2ME、BREW、MTK、Android、iPhone等平台。曾领导和参与《三国群英传》、《大航海传奇》等游戏的开发。著有《Android应用开发揭秘》。</p>
<p>（本文来自《程序员》杂志11年01期，转自：http://www.programmer.com.cn/5223/）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4431.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>中国互联网创业的葵花宝典</title>
		<link>http://www.ha97.com/4424.html</link>
		<comments>http://www.ha97.com/4424.html#comments</comments>
		<pubDate>Fri, 06 Jan 2012 08:38:41 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[IT精英]]></category>
		<category><![CDATA[个人日记]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[创业投资]]></category>
		<category><![CDATA[旧文存档]]></category>
		<category><![CDATA[中国]]></category>
		<category><![CDATA[互联网创业]]></category>
		<category><![CDATA[葵花宝典]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4424</guid>
		<description><![CDATA[一个朋友，在一家软件的大企业做了十年的软件研发，想出来创业，问我要注意什么。我开玩笑说，要想成功，必须学习互联网创业的“葵花宝典”，第一条就是“挥刀自宫”。 大的软件公司有很多资源，研发能力不错，各种推广资源也非常优越，但很少开发出来优秀的互联网产品。初步看上去，原因很多，比如很难调动个人的积极性、内部管理协调非常困难等。我认为还有一个重要的原因，就是方法不得当。大公司资源多，一个互联网创新项目，投入大量资源后，公司期望值高，考虑的问题自然多了，反而不容易做好。 从大公司离职出来创业，首先要“挥刀自宫”，干掉大公司这套做法，控制成本尽量少花钱，集中精力和资源解决核心的一两个问题就足够了。 不要想太多，不做太长时间的计划，尤其是计划不能太复杂！创业成功需要的是发现机会和快速突破的能力，再加一点运气。大公司的工作经验太多，有时候反而会限制自己的做法。 互联网创业，越简单越单纯，越容易成功！ 1.专注：解决用户一个迫切的需求，解决的问题一句话就可以说清楚。 (1) 一个明确而且用户迫切需要的产品，很容易找到明确的用户群。这样，产品研发出来后，不容易走偏。(2) 选择的用户需求要有一定的普遍性，这点决定这个产品的未来市场前景。(3) 解决的问题少，开发速度快，也容易控制初期的研发成本和风险。(4) 解决明确问题的产品，容易给用户说清楚，推广也会相对简单。 2.极致：要在这个功能点上做到所有同类产品的极致，做到最好才能赢。 (1) 极致是互联网产品的核心，只要极致才能超出用户的口碑，形成口口相传的效应，给后期的推广带来了很大的便利。(2) 专注才能做到极致，做到极致才能击败竞争对手。 3.快：开发周期一定要控制在三到六个月的时间，一定要快。 (1) 互联网时代，用户需求变化比较快，而且竞争也比较激烈。快速的开发，容易适应整个市场的节奏，并且节约成本。(2) 用户试用过程中，如果发现问题，反应速度也要快，尽快改善尽快更新。初期，我认为要保持在一两周的更新速度。 4.口碑：初期市场营销坚持少花钱甚至不花钱，才能看出产品对用户真正的吸引力。 (1) 产品完成后，不要着急，先坚持在一个小规模的用户群中试用，听听用户反馈。(2) 大规模的推广会带来如下的两个问题：一、投入大量市场费用后，用户期望值很高，如果产品不完善，很容易引起负面的口碑，为以后的推广留下了隐患。二、大规模市场推广得到的测试效果不准确。如果产品不完善，甚至需求选择有问题，会被数字掩盖。当推广费用停止后，用户量不增长甚至下滑，再改就来不及了。过去几年成功的互联网创业公司，其实在市场营销上花的钱都非常少，但这些公司在市场营销上花的精力并不少。(3) 刚开始最重要的推广技巧是搜索引擎优化和病毒式营销。 互联网创业的葵花宝典就是“专注”、“极致”、“快”和“口碑”！ 一次完美的互联网创业，最好是技术、产品高手搭配的两三人创业，三到六个月内完成产品，再用半年到一年的时间测试完善产品，达成初步成功的门槛，再寻求融资，摸索成功的商业模式，然后投入大量的市场资源推广，形成规模化业务。 初步成功的标准，不同的业务要求不同。我有一个简单的标准供大家参考，就是产品推出半年到一年时间，网站页面过一百万PV，或者客户端产品日净增安装量1万次，而且用户数还在持续增长。达成这个目标之后，需要琢磨的事情，就是在保持增长速度的同时，如何探索好的商业模式。 作者：雷军 转自：http://blog.sina.com.cn/s/blog_4b0e23c90100c1ok.html]]></description>
			<content:encoded><![CDATA[<p>一个朋友，在一家软件的大企业做了十年的软件研发，想出来创业，问我要注意什么。我开玩笑说，要想成功，必须学习互联网创业的“葵花宝典”，第一条就是“挥刀自宫”。</p>
<p>大的软件公司有很多资源，研发能力不错，各种推广资源也非常优越，但很少开发出来优秀的互联网产品。初步看上去，原因很多，比如很难调动个人的积极性、内部管理协调非常困难等。我认为还有一个重要的原因，就是方法不得当。大公司资源多，一个互联网创新项目，投入大量资源后，公司期望值高，考虑的问题自然多了，反而不容易做好。</p>
<p>从大公司离职出来创业，首先要“挥刀自宫”，干掉大公司这套做法，控制成本尽量少花钱，集中精力和资源解决核心的一两个问题就足够了。</p>
<p>不要想太多，不做太长时间的计划，尤其是计划不能太复杂！创业成功需要的是发现机会和快速突破的能力，再加一点运气。大公司的工作经验太多，有时候反而会限制自己的做法。 互联网创业，越简单越单纯，越容易成功！</p>
<p><strong>1.专注：解决用户一个迫切的需求，解决的问题一句话就可以说清楚。</strong></p>
<p>(1) 一个明确而且用户迫切需要的产品，很容易找到明确的用户群。这样，产品研发出来后，不容易走偏。(2) 选择的用户需求要有一定的普遍性，这点决定这个产品的未来市场前景。(3) 解决的问题少，开发速度快，也容易控制初期的研发成本和风险。(4) 解决明确问题的产品，容易给用户说清楚，推广也会相对简单。</p>
<p><strong>2.极致：要在这个功能点上做到所有同类产品的极致，做到最好才能赢。</strong></p>
<p>(1) 极致是互联网产品的核心，只要极致才能超出用户的口碑，形成口口相传的效应，给后期的推广带来了很大的便利。(2) 专注才能做到极致，做到极致才能击败竞争对手。</p>
<p><strong>3.快：开发周期一定要控制在三到六个月的时间，一定要快。</strong></p>
<p>(1) 互联网时代，用户需求变化比较快，而且竞争也比较激烈。快速的开发，容易适应整个市场的节奏，并且节约成本。(2) 用户试用过程中，如果发现问题，反应速度也要快，尽快改善尽快更新。初期，我认为要保持在一两周的更新速度。<br />
 <span id="more-4424"></span><br />
<strong>4.口碑：初期市场营销坚持少花钱甚至不花钱，才能看出产品对用户真正的吸引力。</strong></p>
<p>(1) 产品完成后，不要着急，先坚持在一个小规模的用户群中试用，听听用户反馈。(2) 大规模的推广会带来如下的两个问题：一、投入大量市场费用后，用户期望值很高，如果产品不完善，很容易引起负面的口碑，为以后的推广留下了隐患。二、大规模市场推广得到的测试效果不准确。如果产品不完善，甚至需求选择有问题，会被数字掩盖。当推广费用停止后，用户量不增长甚至下滑，再改就来不及了。过去几年成功的互联网创业公司，其实在市场营销上花的钱都非常少，但这些公司在市场营销上花的精力并不少。(3) 刚开始最重要的推广技巧是搜索引擎优化和病毒式营销。</p>
<p><strong>互联网创业的葵花宝典就是“专注”、“极致”、“快”和“口碑”！</strong></p>
<p>一次完美的互联网创业，最好是技术、产品高手搭配的两三人创业，三到六个月内完成产品，再用半年到一年的时间测试完善产品，达成初步成功的门槛，再寻求融资，摸索成功的商业模式，然后投入大量的市场资源推广，形成规模化业务。</p>
<p>初步成功的标准，不同的业务要求不同。我有一个简单的标准供大家参考，就是产品推出半年到一年时间，网站页面过一百万PV，或者客户端产品日净增安装量1万次，而且用户数还在持续增长。达成这个目标之后，需要琢磨的事情，就是在保持增长速度的同时，如何探索好的商业模式。</p>
<p>作者：雷军<br />
转自：http://blog.sina.com.cn/s/blog_4b0e23c90100c1ok.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4424.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>企业过冬的生存技能</title>
		<link>http://www.ha97.com/4421.html</link>
		<comments>http://www.ha97.com/4421.html#comments</comments>
		<pubDate>Fri, 06 Jan 2012 08:33:56 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[IT精英]]></category>
		<category><![CDATA[个人日记]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[创业投资]]></category>
		<category><![CDATA[旧文存档]]></category>
		<category><![CDATA[企业过冬]]></category>
		<category><![CDATA[生存技能]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4421</guid>
		<description><![CDATA[【摘要】关于成本控制的几点诀窍 1. 该花的钱一定要花，不该花的钱一分钱都不能花。 2. 省钱不是不花钱，不花钱可能造成更大的浪费。 3. 省钱就是赚钱，每省一块钱至少相当于赚三块钱。 4. (引用）“应付款是一定要付的，应收款是一定收不到的” 5. (引用）“在最贵的地方点最便宜的菜，在便宜的地方点最贵的菜” 第4条、第5条不是本人发明的，但我觉得讲得非常实在。 企业过冬的生存技能 步入2009年后，几乎所有人都领略到这次冬天的寒意。不少人问我，创业公司如何过冬。我的回答和大家一样，没有任何新意：现金为王，持有足够的现金量是生存的关键。我在二十年的职业生涯中，遭遇过多次冬天，甚至在1997年9月管理北京金山的时候差点发不出工资，所以无论压力有多大，我坚持企业安全第一，保持充足的现金量。有了足够的现金，的确可以轻松过冬。但我认为问题的核心不是现金，而是企业的基本生存技能：成本控制。 如何有效控制成本呢？这的确是一个非常复杂的问题，和大家分享一些我的经验。 一、建立全员成本意识 1. 控制成本的能力是任何企业都需要的基本技能。企业任何时候都需要控制成本，每个企业家都应该知道“勤俭治家”的重要性。在冬天的时候，股权融资、银行贷款都非常困难，企业的资金压力陡然增加，很多人束手无策，控制成本的压力立刻凸显出现。 2. 成本意识要从公司创建开始建立。互联网泡沫时期，资金成本比较低，创业公司比较容易融到了钱，开始“豪华型”创业。这些创业者没有过苦日子的经验，以为未来一帆风顺，就开始大把烧钱，租用奢侈的办公室、举办铺张的会议、乱砸市场费用等等。一旦遇到困难，或者市场环境发生剧烈变化，企业很容易倒闭。平时没有成本意识，真正遇到问题的时候再建立非常困难，由奢入俭难！ 3. 成本意识只有要从老板开始，才有可能贯彻全员。如果老板不以身作则，不反复强调，不建立成本控制的体系，整个企业成本管理一定非常混乱，也不容易成功。比如，华人世界的首富李嘉诚，一块普通的电子表一戴就是二十多年，我相信李嘉诚旗下的企业成本控制一定会非常出色。再比如联想，柳传志认为联想的成功在于把毛巾拧干，也就是说联想成本控制做得非常出色。 4. 成本控制体系成功的关键在于建立全员成本意识。没有全员的共识，各项成本是无法管理的，会到处漏水。只有建立了这样的意识，各种方案就才能实施。 5. 控制成本实施的要领是：该花的钱一定要花，不该花的钱一分钱都不能花。 省钱不是不花钱，不花钱可能造成更大的浪费，所以，该花的钱一定要花，这是不能打折的事情。比如，办公室我们可以租用便宜的办公室，但不意味着我们不在办公室非常拥挤混乱，如果办公室非常不舒服，员工的工作可能没有效率，这是更大的浪费。 不该花的钱一分钱不能花，要从每件小事做起，很多创业者觉得一起创业的员工很辛苦，在报销电话费、出租车费和请客吃饭费等非常大方，甚至基本不管。这些钱，创业的时候的确不多，但这种风气一旦养成，很难改善，人一多，再遇到个别不自觉的人，这几项成本就是天文数字了。其实，回报员工的方式很多，比如给与更好的报酬或者更多的股票等，不应该在管理上放松。 6. 省钱就是赚钱，省一块钱就是赚三块钱！ 遇到现金短缺的时刻，所有管理者的方案都是增收节支。我也非常赞同增收和节支两手都要抓，但增收谈何容易，市场竞争如此激烈，短期见效可能性不是太大。而只要自己努力，强化管理控制，成本很容易就降下来了。这里，比较难的是建立全员的成本意识，告诉所有人：“省钱就是赚钱，每省一块钱至少相当于赚三块钱”。原因很简单，一般企业赚来的钱需要支付销售成本、生产成本等，还需要交销售税等，还剩下三分之一非常不错了。 二、把费用分成固定费用和变动费用两块 企业的费用大致分两类，一类是固定费用，每月都必须支付的，比如人员费用、房租、水电费用、带宽、办公设备及服务器折旧等；另外一类是变动费用，比如差旅费、电话费、招待费、市场费用等。 固定费用非常可怕！这些费用一旦开始花，每个月都必须花，很难终止。还有，一旦习惯后，一般不会想到取消。所以，一定要高度重视固定成本，比如租用新的办公室、租用IDC机房、随意增加员工等。如何控制呢？在每年、每季度预算会上的重点就是固定费用的分析。 变动费用每项看上去并不多，一个月总数好象也不大，但累积起来总数并不小。比如对于一两百人的公司来说，每个月多三万电话费，看起来并不多，一年就是三十六万！！！还有很难管理的打车费、招待费等。这项成本是每月财务分析会的重点。如何管理交通费、电话费、招待费三项最难管理的费用呢？各家有各家的高招，以后我详细介绍我用过的一些办法。 这样分类的好处在于，企业必须花的钱相对可控。一旦遇到危机，先停掉所有的变动费用，然后分析固定成本，逐项定计划消减，整个成本就一步一步控制下来了。在2003年，非典前金山费用大约在450万/月，我们发布控制费用的紧急要求后，成本迅速控制在250万/月以内。 三、严管应收款和库存两个基本点 小企业头等大事是关心现金存量可以发几个月的工资；大企业，帐上的现金比较多，首要关心的是现金流，如果当月赚钱但是现金流是负的，一定要认真核查，如果有问题，要及早解决。差距一般在应收、库存、固定资产采购上。固定资产采购一定比较慎重，这里我们就不讨论采购管理的问题。所以，管理现金流就是管理应收款和库存问题。 有个老大非常形象说，“应付款是一定要付的，应收款是一定收不回来的”。一定要严格管理应收款：修改销售政策，尽量现款销售；成立专门小组负责催收应收款，控制应收款的增长。 同时注意好库存管理，所有业务主管定期到库房现场办公，解决库存相关问题，加大库存处 理的力度和速度，保持库存的周转效率。 四、省钱有技巧，要靠群策群力 智冠老总王俊博年过半百，是台湾游戏业泰斗级的人物。我向他请教成本控制的问题，他说很简单，比如请客，要让客人满意还要控制成本，怎么办？“在最贵的地方点最便宜的菜，在便宜的地方点最贵的菜”。一句话把控制成本同时要做好事情的精髓说出来了。 互联网创业企业都要买服务器。很多人第一反应就是要买名牌服务器，稳定，服务品质好，可是这样的服务器一台就是两万多。但创业企业没钱怎么办呢？一个创业者告诉我，他们买的全部是破产网游企业的服务器，几乎全新的服务器，只要两三千块钱。另外一个创业者告诉我，他的服务器全部是电脑城里组装的PC机，用软件办法解决稳定性问题。省钱的招数很多，只要大家愿意琢磨交流，有很多办法。google用的服务器就是组装的PC。 我再举一个例子就是做广告。1999年我们启动了金山词霸“红色正版风暴”的大型市场活动，但我们总共只有四十万的预算，怎么办呢？为了给市场足够的震动，我们想了很多办法。比如投《电脑报》广告，正常情况下应该一期报纸投几个整版，我们在一期中只投了连续四个 1/4页广告，再在其他每一页都投了一个栏花广告，这样，给读者的感觉是几乎每页都有我们的广告，铺天盖地的，实际上只花了一个整版再加几个栏花的钱。 最后，我总结一下如何过冬的主要观点： 现金充沛的企业，在冬天要大胆。别人恐惧的时候，各种运作成本都很低，比如市场费用、员工的雇佣成本等，要大胆扩张，可以用较低成本建立较高的竞争门槛。 现金严重不足的企业，严格控制成本。认真检查固定成本，每项固定成本都要问一下是否可以节约，如每月支出的办公室、带宽等；变动成本尽量取消。还有，尽量只做六个月以内能产生收益的项目。 活下去才是硬道理，这就是创业的生存法则。 作者：雷军 转自：http://blog.sina.com.cn/s/blog_4b0e23c90100bpu5.html]]></description>
			<content:encoded><![CDATA[<p><strong>【摘要】关于成本控制的几点诀窍</strong></p>
<p>1. 该花的钱一定要花，不该花的钱一分钱都不能花。<br />
2. 省钱不是不花钱，不花钱可能造成更大的浪费。<br />
3. 省钱就是赚钱，每省一块钱至少相当于赚三块钱。<br />
4. (引用）“应付款是一定要付的，应收款是一定收不到的”<br />
5. (引用）“在最贵的地方点最便宜的菜，在便宜的地方点最贵的菜”<br />
第4条、第5条不是本人发明的，但我觉得讲得非常实在。</p>
<p><strong>企业过冬的生存技能</strong></p>
<p>步入2009年后，几乎所有人都领略到这次冬天的寒意。不少人问我，创业公司如何过冬。我的回答和大家一样，没有任何新意：现金为王，持有足够的现金量是生存的关键。我在二十年的职业生涯中，遭遇过多次冬天，甚至在1997年9月管理北京金山的时候差点发不出工资，所以无论压力有多大，我坚持企业安全第一，保持充足的现金量。有了足够的现金，的确可以轻松过冬。但我认为问题的核心不是现金，而是企业的基本生存技能：成本控制。</p>
<p>如何有效控制成本呢？这的确是一个非常复杂的问题，和大家分享一些我的经验。</p>
<p><strong>一、建立全员成本意识</strong></p>
<p>1. 控制成本的能力是任何企业都需要的基本技能。企业任何时候都需要控制成本，每个企业家都应该知道“勤俭治家”的重要性。在冬天的时候，股权融资、银行贷款都非常困难，企业的资金压力陡然增加，很多人束手无策，控制成本的压力立刻凸显出现。</p>
<p>2. 成本意识要从公司创建开始建立。互联网泡沫时期，资金成本比较低，创业公司比较容易融到了钱，开始“豪华型”创业。这些创业者没有过苦日子的经验，以为未来一帆风顺，就开始大把烧钱，租用奢侈的办公室、举办铺张的会议、乱砸市场费用等等。一旦遇到困难，或者市场环境发生剧烈变化，企业很容易倒闭。平时没有成本意识，真正遇到问题的时候再建立非常困难，由奢入俭难！</p>
<p>3. 成本意识只有要从老板开始，才有可能贯彻全员。如果老板不以身作则，不反复强调，不建立成本控制的体系，整个企业成本管理一定非常混乱，也不容易成功。比如，华人世界的首富李嘉诚，一块普通的电子表一戴就是二十多年，我相信李嘉诚旗下的企业成本控制一定会非常出色。再比如联想，柳传志认为联想的成功在于把毛巾拧干，也就是说联想成本控制做得非常出色。<br />
 <span id="more-4421"></span><br />
4. 成本控制体系成功的关键在于建立全员成本意识。没有全员的共识，各项成本是无法管理的，会到处漏水。只有建立了这样的意识，各种方案就才能实施。</p>
<p>5. 控制成本实施的要领是：该花的钱一定要花，不该花的钱一分钱都不能花。</p>
<p>省钱不是不花钱，不花钱可能造成更大的浪费，所以，该花的钱一定要花，这是不能打折的事情。比如，办公室我们可以租用便宜的办公室，但不意味着我们不在办公室非常拥挤混乱，如果办公室非常不舒服，员工的工作可能没有效率，这是更大的浪费。</p>
<p>不该花的钱一分钱不能花，要从每件小事做起，很多创业者觉得一起创业的员工很辛苦，在报销电话费、出租车费和请客吃饭费等非常大方，甚至基本不管。这些钱，创业的时候的确不多，但这种风气一旦养成，很难改善，人一多，再遇到个别不自觉的人，这几项成本就是天文数字了。其实，回报员工的方式很多，比如给与更好的报酬或者更多的股票等，不应该在管理上放松。</p>
<p>6. 省钱就是赚钱，省一块钱就是赚三块钱！</p>
<p>遇到现金短缺的时刻，所有管理者的方案都是增收节支。我也非常赞同增收和节支两手都要抓，但增收谈何容易，市场竞争如此激烈，短期见效可能性不是太大。而只要自己努力，强化管理控制，成本很容易就降下来了。这里，比较难的是建立全员的成本意识，告诉所有人：“省钱就是赚钱，每省一块钱至少相当于赚三块钱”。原因很简单，一般企业赚来的钱需要支付销售成本、生产成本等，还需要交销售税等，还剩下三分之一非常不错了。</p>
<p><strong>二、把费用分成固定费用和变动费用两块</strong></p>
<p>企业的费用大致分两类，一类是固定费用，每月都必须支付的，比如人员费用、房租、水电费用、带宽、办公设备及服务器折旧等；另外一类是变动费用，比如差旅费、电话费、招待费、市场费用等。</p>
<p>固定费用非常可怕！这些费用一旦开始花，每个月都必须花，很难终止。还有，一旦习惯后，一般不会想到取消。所以，一定要高度重视固定成本，比如租用新的办公室、租用IDC机房、随意增加员工等。如何控制呢？在每年、每季度预算会上的重点就是固定费用的分析。</p>
<p>变动费用每项看上去并不多，一个月总数好象也不大，但累积起来总数并不小。比如对于一两百人的公司来说，每个月多三万电话费，看起来并不多，一年就是三十六万！！！还有很难管理的打车费、招待费等。这项成本是每月财务分析会的重点。如何管理交通费、电话费、招待费三项最难管理的费用呢？各家有各家的高招，以后我详细介绍我用过的一些办法。</p>
<p>这样分类的好处在于，企业必须花的钱相对可控。一旦遇到危机，先停掉所有的变动费用，然后分析固定成本，逐项定计划消减，整个成本就一步一步控制下来了。在2003年，非典前金山费用大约在450万/月，我们发布控制费用的紧急要求后，成本迅速控制在250万/月以内。</p>
<p><strong>三、严管应收款和库存两个基本点</strong></p>
<p>小企业头等大事是关心现金存量可以发几个月的工资；大企业，帐上的现金比较多，首要关心的是现金流，如果当月赚钱但是现金流是负的，一定要认真核查，如果有问题，要及早解决。差距一般在应收、库存、固定资产采购上。固定资产采购一定比较慎重，这里我们就不讨论采购管理的问题。所以，管理现金流就是管理应收款和库存问题。</p>
<p>有个老大非常形象说，“应付款是一定要付的，应收款是一定收不回来的”。一定要严格管理应收款：修改销售政策，尽量现款销售；成立专门小组负责催收应收款，控制应收款的增长。</p>
<p>同时注意好库存管理，所有业务主管定期到库房现场办公，解决库存相关问题，加大库存处 理的力度和速度，保持库存的周转效率。</p>
<p><strong>四、省钱有技巧，要靠群策群力</strong></p>
<p>智冠老总王俊博年过半百，是台湾游戏业泰斗级的人物。我向他请教成本控制的问题，他说很简单，比如请客，要让客人满意还要控制成本，怎么办？“在最贵的地方点最便宜的菜，在便宜的地方点最贵的菜”。一句话把控制成本同时要做好事情的精髓说出来了。</p>
<p>互联网创业企业都要买服务器。很多人第一反应就是要买名牌服务器，稳定，服务品质好，可是这样的服务器一台就是两万多。但创业企业没钱怎么办呢？一个创业者告诉我，他们买的全部是破产网游企业的服务器，几乎全新的服务器，只要两三千块钱。另外一个创业者告诉我，他的服务器全部是电脑城里组装的PC机，用软件办法解决稳定性问题。省钱的招数很多，只要大家愿意琢磨交流，有很多办法。google用的服务器就是组装的PC。</p>
<p>我再举一个例子就是做广告。1999年我们启动了金山词霸“红色正版风暴”的大型市场活动，但我们总共只有四十万的预算，怎么办呢？为了给市场足够的震动，我们想了很多办法。比如投《电脑报》广告，正常情况下应该一期报纸投几个整版，我们在一期中只投了连续四个 1/4页广告，再在其他每一页都投了一个栏花广告，这样，给读者的感觉是几乎每页都有我们的广告，铺天盖地的，实际上只花了一个整版再加几个栏花的钱。</p>
<p>最后，我总结一下<strong>如何过冬的主要观点</strong>：</p>
<p>现金充沛的企业，在冬天要大胆。别人恐惧的时候，各种运作成本都很低，比如市场费用、员工的雇佣成本等，要大胆扩张，可以用较低成本建立较高的竞争门槛。</p>
<p>现金严重不足的企业，严格控制成本。认真检查固定成本，每项固定成本都要问一下是否可以节约，如每月支出的办公室、带宽等；变动成本尽量取消。还有，尽量只做六个月以内能产生收益的项目。</p>
<p><strong>活下去才是硬道理，这就是创业的生存法则。</strong></p>
<p>作者：雷军<br />
转自：http://blog.sina.com.cn/s/blog_4b0e23c90100bpu5.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4421.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 6.2 官方发布下载</title>
		<link>http://www.ha97.com/4414.html</link>
		<comments>http://www.ha97.com/4414.html#comments</comments>
		<pubDate>Wed, 21 Dec 2011 04:10:08 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[RHEL/CentOS/Fedora]]></category>
		<category><![CDATA[开源世界]]></category>
		<category><![CDATA[6.2]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[下载]]></category>
		<category><![CDATA[发布]]></category>
		<category><![CDATA[官方]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4414</guid>
		<description><![CDATA[今天，官方已经正式发布 CentOS 6.2。6.1 发布仅一个多星期，6.2就发布了，这次的发布更新速度是CentOS历史上最快的一次。现在大多数网站镜像已同步完成。 各大镜像网站下载地址： http://isoredirect.centos.org/centos/6/isos/i386/ http://isoredirect.centos.org/centos/6/isos/x86_64 md5值： 8c976288ed53dc97439f7ab5854f2648 CentOS-6.2-i386-bin-DVD1.iso 9c0d7d967c950ce794dc74f460281a46 CentOS-6.2-i386-bin-DVD2.iso 1b8441b6f4556be61c16d9750da42b3f CentOS-6.2-i386-LiveCD.iso 6e8451df8c80337590dd703c378e8504 CentOS-6.2-i386-LiveDVD.iso cc4fbd16bd305f5bf6731b4b10f8fd18 CentOS-6.2-i386-minimal.iso 8930132831efa890bb2952adafde0475 CentOS-6.2-i386-netinstall.iso 26fdf8c5a787a674f3219a3554b131ca CentOS-6.2-x86_64-bin-DVD1.iso b0b03502875490417c9f8cb9fe8ce6d6 CentOS-6.2-x86_64-bin-DVD2.iso 8e344eb002995ddd5946f47e7397e644 CentOS-6.2-x86_64-LiveCD.iso 0d90d6ec1afca4a469ce9d7dc6c063e1 CentOS-6.2-x86_64-LiveDVD.iso 20dac370a6e08ded2701e4104855bc6e CentOS-6.2-x86_64-minimal.iso 7e7f4161a5c8c49032655e5f4ecd1f07 CentOS-6.2-x86_64-netinstall.iso]]></description>
			<content:encoded><![CDATA[<p>今天，官方已经正式发布 CentOS 6.2。6.1 发布仅一个多星期，6.2就发布了，这次的发布更新速度是CentOS历史上最快的一次。现在大多数网站镜像已同步完成。</p>
<p><a href="http://www.ha97.com/wp-content/uploads/2011/12/centos6.2.jpg"><img class="alignnone size-full wp-image-4417" title="centos6.2" src="http://www.ha97.com/wp-content/uploads/2011/12/centos6.2.jpg" alt="" width="640" height="480" /></a></p>
<p>各大镜像网站下载地址：</p>
<p><span id="more-4414"></span></p>
<p><a rel="nofollow" target="_blank" href="http://isoredirect.centos.org/centos/6/isos/i386/">http://isoredirect.centos.org/centos/6/isos/i386/</a><a rel="nofollow" target="_blank" href="http://isoredirect.centos.org/centos/6/isos/x86_64/"></p>
<p>http://isoredirect.centos.org/centos/6/isos/x86_64</a></p>
<p>md5值：<br />
<code><br />
8c976288ed53dc97439f7ab5854f2648  CentOS-6.2-i386-bin-DVD1.iso<br />
9c0d7d967c950ce794dc74f460281a46  CentOS-6.2-i386-bin-DVD2.iso<br />
1b8441b6f4556be61c16d9750da42b3f  CentOS-6.2-i386-LiveCD.iso<br />
6e8451df8c80337590dd703c378e8504  CentOS-6.2-i386-LiveDVD.iso<br />
cc4fbd16bd305f5bf6731b4b10f8fd18  CentOS-6.2-i386-minimal.iso<br />
8930132831efa890bb2952adafde0475  CentOS-6.2-i386-netinstall.iso<br />
26fdf8c5a787a674f3219a3554b131ca  CentOS-6.2-x86_64-bin-DVD1.iso<br />
b0b03502875490417c9f8cb9fe8ce6d6  CentOS-6.2-x86_64-bin-DVD2.iso<br />
8e344eb002995ddd5946f47e7397e644  CentOS-6.2-x86_64-LiveCD.iso<br />
0d90d6ec1afca4a469ce9d7dc6c063e1  CentOS-6.2-x86_64-LiveDVD.iso<br />
20dac370a6e08ded2701e4104855bc6e  CentOS-6.2-x86_64-minimal.iso<br />
7e7f4161a5c8c49032655e5f4ecd1f07  CentOS-6.2-x86_64-netinstall.iso<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4414.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>淘宝使用的Web服务器Tengine（基于Nginx开发）开源了</title>
		<link>http://www.ha97.com/4400.html</link>
		<comments>http://www.ha97.com/4400.html#comments</comments>
		<pubDate>Mon, 05 Dec 2011 09:09:29 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[开源世界]]></category>
		<category><![CDATA[Tengine]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[淘宝]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4400</guid>
		<description><![CDATA[我们很高兴的宣布由淘宝网核心系统部开发的Tengine服务器终于正式开源了。 淘宝网是亚洲最大的电子商务网站，Alexa全球排名第12位。每天访问淘宝网的PV超过了几十亿。大压力的访问，对淘宝网的Web服务器提出了严苛的要求。经过一系列的对比，我们最终选择了Nginx作为我们的Web服务器，因为它性能高，又非常节省资源（CPU和内存），并且有足够的灵活性。 一开始我们使用Nginx还仅仅用它来处理静态文件、PHP等，接着我们又在Nginx上开发了几十个各种用途的模块。随着对Nginx的越来越了解，我们发现它本身已经不能够完全满足我们的需求了，所以我们就开始对Nginx核心进行定制和开发。考虑到我们开发的功能中的一些对其它的互联网用户也可能有用处，所以我们就想到了把这些公用的功能开源出来。淘宝网是开源软件的用户和受益者，我们也想成为开源软件的贡献者。这就是我们决定开源Tengine的原因。 Tengine基于最新的Nginx稳定版（Nginx-1.0.10），在它的基础上开发了一些功能和做了一些bug修复，比如： 组合多个CSS、JavaScript文件的访问请求变成一个请求； 支持管道和syslog形式的日志和抽样； 自动根据CPU数目设置亲缘性； 监控系统的负载和资源占用从而对系统进行保护； 显示对运维人员更友好的出错信息，便于定位出错机器； 更强大的访问速度限制模块； backtrace模块，程序崩溃的时候可以显示出错的调用栈； 根据文件类型设置过期时间； &#8230; 基本上，Tengine可以被看作一个更好的Nginx，或者是Nginx的超集。可以在这里下载： http://tengine.taobao.org/download/tengine-1.2.0.tar.gz 在这里，我们想向Nginx团队致谢，尤其感谢Nginx的作者Igor Sysoev的伟大工作。我们也很乐意并在接下来的时间里将我们的工作成果捐献给Nginx官方。 坦率的讲，现在Tengine的特性还不够多，但这是我们将我们在Nginx上的工作推向开源的第一步。我们已经围绕Tengine组建了一个团队，而且内部还有一个很长的计划列表。Tengine开源不是项目开发的结束，而是开发的开始。相信接下来大家会看到我们在Tengine上的更多工作进展。 来源：http://tengine.taobao.org/opensource_cn.html 查看了一下淘宝网的服务器标头信息，确实显示是Tengine：]]></description>
			<content:encoded><![CDATA[<p>我们很高兴的宣布由淘宝网核心系统部开发的Tengine服务器终于正式开源了。</p>
<p><a rel="nofollow" target="_blank" href="http://www.taobao.com/" target="_blank">淘宝网</a>是亚洲最大的电子商务网站，Alexa全球排名第12位。每天访问淘宝网的PV超过了几十亿。大压力的访问，对淘宝网的Web服务器提出了严苛的要求。经过一系列的对比，我们最终选择了Nginx作为我们的Web服务器，因为它性能高，又非常节省资源（CPU和内存），并且有足够的灵活性。</p>
<p>一开始我们使用Nginx还仅仅用它来处理静态文件、PHP等，接着我们又在Nginx上开发了几十个各种用途的模块。随着对Nginx的越来越了解，我们发现它本身已经不能够完全满足我们的需求了，所以我们就开始对Nginx核心进行定制和开发。考虑到我们开发的功能中的一些对其它的互联网用户也可能有用处，所以我们就想到了把这些公用的功能开源出来。淘宝网是开源软件的用户和受益者，我们也想成为开源软件的贡献者。这就是我们决定开源Tengine的原因。</p>
<p>Tengine基于最新的Nginx稳定版（Nginx-1.0.10），在它的基础上开发了一些功能和做了一些bug修复，比如：</p>
<ul>
<li>组合多个CSS、JavaScript文件的访问请求变成一个请求；</li>
<li>支持管道和syslog形式的日志和抽样；</li>
<li>自动根据CPU数目设置亲缘性；</li>
<li>监控系统的负载和资源占用从而对系统进行保护；</li>
<li>显示对运维人员更友好的出错信息，便于定位出错机器；</li>
<li>更强大的访问速度限制模块；</li>
<li>backtrace模块，程序崩溃的时候可以显示出错的调用栈；</li>
<li>根据文件类型设置过期时间；</li>
<li>&#8230;</li>
</ul>
<p>基本上，Tengine可以被看作一个更好的Nginx，或者是Nginx的超集。可以在这里下载：</p>
<p><a rel="nofollow" target="_blank" href="http://tengine.taobao.org/download/tengine-1.2.0.tar.gz">http://tengine.taobao.org/download/tengine-1.2.0.tar.gz</a></p>
<p>在这里，我们想向Nginx团队致谢，尤其感谢Nginx的作者Igor Sysoev的伟大工作。我们也很乐意并在接下来的时间里将我们的工作成果捐献给Nginx官方。</p>
<p>坦率的讲，现在Tengine的特性还不够多，但这是我们将我们在Nginx上的工作推向开源的第一步。我们已经围绕Tengine组建了一个团队，而且内部还有一个很长的计划列表。Tengine开源不是项目开发的结束，而是开发的开始。相信接下来大家会看到我们在Tengine上的更多工作进展。</p>
<p>来源：http://tengine.taobao.org/opensource_cn.html</p>
<p>查看了一下淘宝网的服务器标头信息，确实显示是Tengine：</p>
<p><a href="http://www.ha97.com/wp-content/uploads/2011/12/Tengine.jpg"><img class="alignnone size-full wp-image-4404" title="Tengine" src="http://www.ha97.com/wp-content/uploads/2011/12/Tengine.jpg" alt="" width="412" height="178" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4400.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>优化Linux的内核参数来提高服务器并发处理能力</title>
		<link>http://www.ha97.com/4396.html</link>
		<comments>http://www.ha97.com/4396.html#comments</comments>
		<pubDate>Sun, 04 Dec 2011 06:07:56 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[个人日记]]></category>
		<category><![CDATA[运维经验]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[内核参数]]></category>
		<category><![CDATA[并发处理]]></category>
		<category><![CDATA[提高]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4396</guid>
		<description><![CDATA[PS：在服务器硬件资源额定有限的情况下，最大的压榨服务器的性能，提高服务器的并发处理能力，是很多运维技术人员思考的问题。要提高Linux系统下的负载能力，可以使用nginx等原生并发处理能力就很强的web服务器，如果使用Apache的可以启用其Worker模式，来提高其并发处理能力。除此之外，在考虑节省成本的情况下，可以修改Linux的内核相关TCP参数，来最大的提高服务器性能。当然，最基础的提高负载问题，还是升级服务器硬件了，这是最根本的。 Linux系统下，TCP连接断开后，会以TIME_WAIT状态保留一定的时间，然后才会释放端口。当并发请求过多的时候，就会产生大量的TIME_WAIT状态的连接，无法及时断开的话，会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数，来及时将TIME_WAIT状态的端口清理掉。 本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效，如果不是这种情况下，效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态，输入下面的组合命令，查看当前TCP连接的状态和对应的连接数量： #netstat -n &#124; awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 这个命令会输出类似下面的结果： LAST_ACK 16 SYN_RECV 348 ESTABLISHED 70 FIN_WAIT1 229 FIN_WAIT2 30 CLOSING 33 TIME_WAIT 18098 我们只用关心TIME_WAIT的个数，在这里可以看到，有18000多个TIME_WAIT，这样就占用了18000多个端口。要知道端口的数量只有65535个，占用一个少一个，会严重的影响到后继的新连接。这种情况下，我们就有必要调整下Linux的TCP内核参数，让系统更快的释放TIME_WAIT连接。 用vim打开配置文件：#vim /etc/sysctl.conf 在这个文件中，加入下面的几行内容： net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 输入下面的命令，让内核参数生效：#sysctl -p 简单的说明上面的参数的含义： net.ipv4.tcp_syncookies = 1 #表示开启SYN Cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭； [...]]]></description>
			<content:encoded><![CDATA[<p><strong>PS：在服务器硬件资源额定有限的情况下，最大的压榨服务器的性能，提高服务器的并发处理能力，是很多运维技术人员思考的问题。要提高Linux系统下的负载能力，可以使用nginx等原生并发处理能力就很强的web服务器，如果使用Apache的可以启用其Worker模式，来提高其并发处理能力。除此之外，在考虑节省成本的情况下，可以修改Linux的内核相关TCP参数，来最大的提高服务器性能。当然，最基础的提高负载问题，还是升级服务器硬件了，这是最根本的。</strong></p>
<p>Linux系统下，TCP连接断开后，会以TIME_WAIT状态保留一定的时间，然后才会释放端口。当并发请求过多的时候，就会产生大量的TIME_WAIT状态的连接，无法及时断开的话，会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数，来及时将TIME_WAIT状态的端口清理掉。</p>
<p>本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效，如果不是这种情况下，效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态，输入下面的组合命令，查看当前TCP连接的状态和对应的连接数量：<br />
<code>#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’</code><br />
这个命令会输出类似下面的结果：<br />
<code>LAST_ACK 16<br />
SYN_RECV 348<br />
ESTABLISHED 70<br />
FIN_WAIT1 229<br />
FIN_WAIT2 30<br />
CLOSING 33<br />
TIME_WAIT 18098</code><br />
我们只用关心TIME_WAIT的个数，在这里可以看到，有18000多个TIME_WAIT，这样就占用了18000多个端口。要知道端口的数量只有65535个，占用一个少一个，会严重的影响到后继的新连接。这种情况下，我们就有必要调整下Linux的TCP内核参数，让系统更快的释放TIME_WAIT连接。<br />
<span id="more-4396"></span><br />
用vim打开配置文件：<code>#vim /etc/sysctl.conf</code></p>
<p>在这个文件中，加入下面的几行内容：<br />
<code>net.ipv4.tcp_syncookies = 1<br />
net.ipv4.tcp_tw_reuse = 1<br />
net.ipv4.tcp_tw_recycle = 1<br />
net.ipv4.tcp_fin_timeout = 30</code></p>
<p>输入下面的命令，让内核参数生效：<code>#sysctl -p</code></p>
<p>简单的说明上面的参数的含义：</p>
<p>net.ipv4.tcp_syncookies = 1<br />
#表示开启SYN Cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br />
net.ipv4.tcp_tw_reuse = 1<br />
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br />
net.ipv4.tcp_tw_recycle = 1<br />
#表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭；<br />
net.ipv4.tcp_fin_timeout<br />
#修改系統默认的 TIMEOUT 时间。</p>
<p>在经过这样的调整之后，除了会进一步提升服务器的负载能力之外，还能够防御小流量程度的DoS、CC和SYN攻击。</p>
<p>此外，如果你的连接数本身就很多，我们可以再优化一下TCP的可使用端口范围，进一步提升服务器的并发能力。依然是往上面的参数文件中，加入下面这些配置：<br />
<code>net.ipv4.tcp_keepalive_time = 1200<br />
net.ipv4.ip_local_port_range = 10000 65000<br />
net.ipv4.tcp_max_syn_backlog = 8192<br />
net.ipv4.tcp_max_tw_buckets = 5000</code><br />
#这几个参数，建议只在流量非常大的服务器上开启，会有显著的效果。一般的流量小的服务器上，没有必要去设置这几个参数。</p>
<p>net.ipv4.tcp_keepalive_time = 1200<br />
#表示当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时，改为20分钟。<br />
net.ipv4.ip_local_port_range = 10000 65000<br />
#表示用于向外连接的端口范围。缺省情况下很小：32768到61000，改为10000到65000。（注意：这里不要将最低值设的太低，否则可能会占用掉正常的端口！）<br />
net.ipv4.tcp_max_syn_backlog = 8192<br />
#表示SYN队列的长度，默认为1024，加大队列长度为8192，可以容纳更多等待连接的网络连接数。<br />
net.ipv4.tcp_max_tw_buckets = 6000<br />
#表示系统同时保持TIME_WAIT的最大数量，如果超过这个数字，TIME_WAIT将立刻被清除并打印警告信息。默 认为180000，改为6000。对于Apache、Nginx等服务器，上几行的参数可以很好地减少TIME_WAIT套接字数量，但是对于 Squid，效果却不大。此项参数可以控制TIME_WAIT的最大数量，避免Squid服务器被大量的TIME_WAIT拖死。</p>
<p>内核其他TCP参数说明：<br />
net.ipv4.tcp_max_syn_backlog = 65536<br />
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言，缺省值是1024，小内存的系统则是128。<br />
net.core.netdev_max_backlog = 32768<br />
#每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目。<br />
net.core.somaxconn = 32768<br />
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128，而nginx定义的NGX_LISTEN_BACKLOG默认为511，所以有必要调整这个值。</p>
<p>net.core.wmem_default = 8388608<br />
net.core.rmem_default = 8388608<br />
net.core.rmem_max = 16777216           #最大socket读buffer,可参考的优化值:873200<br />
net.core.wmem_max = 16777216           #最大socket写buffer,可参考的优化值:873200<br />
net.ipv4.tcp_timestsmps = 0<br />
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。<br />
net.ipv4.tcp_synack_retries = 2<br />
#为了打开对端的连接，内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。<br />
net.ipv4.tcp_syn_retries = 2<br />
#在内核放弃建立连接之前发送SYN包的数量。<br />
#net.ipv4.tcp_tw_len = 1<br />
net.ipv4.tcp_tw_reuse = 1<br />
# 开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。</p>
<p>net.ipv4.tcp_wmem = 8192 436600 873200<br />
# TCP写buffer,可参考的优化值: 8192 436600 873200<br />
net.ipv4.tcp_rmem  = 32768 436600 873200<br />
# TCP读buffer,可参考的优化值: 32768 436600 873200<br />
net.ipv4.tcp_mem = 94500000 91500000 92700000<br />
# 同样有3个值,意思是:<br />
net.ipv4.tcp_mem[0]:低于此值，TCP没有内存压力。<br />
net.ipv4.tcp_mem[1]:在此值下，进入内存压力阶段。<br />
net.ipv4.tcp_mem[2]:高于此值，TCP拒绝分配socket。<br />
上述内存单位是页，而不是字节。可参考的优化值是:786432 1048576 1572864</p>
<p>net.ipv4.tcp_max_orphans = 3276800<br />
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。<br />
如果超过这个数字，连接将即刻被复位并打印出警告信息。<br />
这个限制仅仅是为了防止简单的DoS攻击，不能过分依靠它或者人为地减小这个值，<br />
更应该增加这个值(如果增加了内存之后)。<br />
net.ipv4.tcp_fin_timeout = 30<br />
#如果套接字由本端要求关闭，这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接，甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒，你可以按这个设置，但要记住的是，即使你的机器是一个轻载的WEB服务器，也有因为大量的死套接字而内存溢出的风险，FIN- WAIT-2的危险性比FIN-WAIT-1要小，因为它最多只能吃掉1.5K内存，但是它们的生存期长些。</p>
<p><strong>经过这样的优化配置之后，你的服务器的TCP并发处理能力会显著提高。以上配置仅供参考，用于生产环境请根据自己的实际情况。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4396.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Web服务器网站故障分析常用的命令</title>
		<link>http://www.ha97.com/4392.html</link>
		<comments>http://www.ha97.com/4392.html#comments</comments>
		<pubDate>Sat, 03 Dec 2011 04:18:59 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[运维经验]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[命令]]></category>
		<category><![CDATA[故障分析]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4392</guid>
		<description><![CDATA[PS：整理一些Linux Web服务器网站故障分析常用的命令，内容均来源于网络。如果你是老手，什么好的命令集或者必杀技欢迎留言，丰富此文！ 系统连接状态篇： 1.查看TCP连接状态 netstat -nat &#124;awk '{print $6}'&#124;sort&#124;uniq -c&#124;sort -rn netstat -n &#124; awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或 netstat -n &#124; awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}' netstat -n &#124; awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}' netstat -n &#124;awk '/^tcp/ {print $NF}'&#124;sort&#124;uniq -c&#124;sort -rn [...]]]></description>
			<content:encoded><![CDATA[<p><strong>PS：整理一些Linux Web服务器网站故障分析常用的命令，内容均来源于网络。如果你是老手，什么好的命令集或者必杀技欢迎留言，丰富此文！</strong></p>
<p>系统连接状态篇：<br />
1.查看TCP连接状态<br />
<code>netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn</p>
<p>netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或<br />
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'<br />
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'</p>
<p>netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn</p>
<p>netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c<br />
</code></p>
<p>2.查找请求数请20个IP（常用于查找攻来源）：<br />
<code><br />
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20</p>
<p>netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20<br />
</code><br />
3.用tcpdump嗅探80端口的访问看看谁最高<br />
<code><br />
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20<br />
</code><br />
<span id="more-4392"></span><br />
4.查找较多time_wait连接<br />
<code><br />
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20<br />
</code><br />
5.找查较多的SYN连接<br />
<code><br />
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more<br />
</code><br />
6.根据端口列进程<br />
<code><br />
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1<br />
</code></p>
<p>网站日志分析篇1（Apache）：</p>
<p>1.获得访问前10位的ip地址<br />
<code><br />
cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10<br />
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'<br />
</code><br />
2.访问次数最多的文件或页面,取前20<br />
<code><br />
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20<br />
</code><br />
3.列出传输最大的几个exe文件（分析下载站的时候常用）<br />
<code><br />
cat access.log |awk '($7~/\.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20<br />
</code><br />
4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数<br />
<code><br />
cat access.log |awk '($10 &gt; 200000 &amp;&amp; $7~/\.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100<br />
</code><br />
5.如果日志最后一列记录的是页面文件传输时间，则有列出到客户端最耗时的页面<br />
<code><br />
cat access.log |awk  '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100<br />
</code><br />
6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数<br />
<code><br />
cat access.log |awk '($NF &gt; 60 &amp;&amp; $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100<br />
</code><br />
7.列出传输时间超过 30 秒的文件<br />
<code><br />
cat access.log |awk '($NF &gt; 30){print $7}'|sort -n|uniq -c|sort -nr|head -20<br />
</code><br />
8.统计网站流量（G)<br />
<code><br />
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'<br />
</code><br />
9.统计404的连接<br />
<code><br />
awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort<br />
</code><br />
10. 统计http status<br />
<code><br />
cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'<br />
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn<br />
</code><br />
10.蜘蛛分析，查看是哪些蜘蛛在抓取内容。<br />
<code><br />
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'<br />
</code></p>
<p>网站日分析2(Squid篇）按域统计流量<br />
<code><br />
zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s\t%d\n",domain,trfc[domain]}}'<br />
</code></p>
<p>数据库篇<br />
1.查看数据库执行的sql<br />
<code><br />
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'<br />
</code></p>
<p>系统Debug分析篇<br />
1.调试命令<br />
<code>strace -p pid</code><br />
2.跟踪指定进程的PID<br />
<code>gdb -p pid</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4392.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tcpdump参数用法详解</title>
		<link>http://www.ha97.com/4389.html</link>
		<comments>http://www.ha97.com/4389.html#comments</comments>
		<pubDate>Sat, 03 Dec 2011 03:48:09 +0000</pubDate>
		<dc:creator>谋万世全局者</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[tcpdump]]></category>
		<category><![CDATA[参数]]></category>
		<category><![CDATA[用法]]></category>
		<category><![CDATA[详解]]></category>

		<guid isPermaLink="false">http://www.ha97.com/?p=4389</guid>
		<description><![CDATA[一直在linux下开发的人一定会用到tcpdump，下面就是关于tcpdump的使用方法说明 (1). tcpdump的选项 -a 将网络地址和广播地址转变成名字； -d 将匹配信息包的代码以人们能够理解的汇编格式给出； -dd 将匹配信息包的代码以c语言程序段的格式给出； -ddd 将匹配信息包的代码以十进制的形式给出； -e 在输出行打印出数据链路层的头部信息； -f 将外部的Internet地址以数字的形式打印出来； -l 使标准输出变为缓冲行形式； -n 不把网络地址转换成名字； -t 在输出的每一行不打印时间戳； -v 输出一个稍微详细的信息，例如在ip包中可以包括ttl和服务类型的信息； -vv 输出详细的报文信息； -c 在收到指定的包的数目后，tcpdump就会停止； -F 从指定的文件中读取表达式,忽略其它的表达式； -i 指定监听的网络接口； -r 从指定的文件中读取包(这些包一般通过-w选项产生)； -w 直接将包写入文件中，并不分析和打印出来； -T 将监听到的包直接解释为指定的类型的报文，常见的类型有rpc （远程过程调用）和snmp（简单网络管理协议；） (2). tcpdump的表达式 表达式是一个正则表达式，tcpdump利用它作为过滤报文的条件，如果一个报文满足表达式的条件，则这个报文将会被捕获。如果没有给出任何条件，则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。 第一种是关于类型的关键字，主要包括host，net，port, 例如 host 210.27.48.2，指明 210.27.48.2是一台主机，net 202.0.0.0 指明 202.0.0.0是一个网络地址，port 23 指明端口号是23。如果没有指定类型，缺省的类型是host. 第二种是确定传输方向的关键字，主要包括src , dst ,dst [...]]]></description>
			<content:encoded><![CDATA[<p>一直在linux下开发的人一定会用到tcpdump，下面就是关于tcpdump的使用方法说明<br />
(1). tcpdump的选项</p>
<div>
<div>
<pre>-a       将网络地址和广播地址转变成名字；
-d       将匹配信息包的代码以人们能够理解的汇编格式给出；
-dd      将匹配信息包的代码以c语言程序段的格式给出；
-ddd     将匹配信息包的代码以十进制的形式给出；
-e       在输出行打印出数据链路层的头部信息；
-f       将外部的Internet地址以数字的形式打印出来；
-l       使标准输出变为缓冲行形式；
-n       不把网络地址转换成名字；
-t       在输出的每一行不打印时间戳；
-v       输出一个稍微详细的信息，例如在ip包中可以包括ttl和服务类型的信息；
-vv      输出详细的报文信息；
-c       在收到指定的包的数目后，tcpdump就会停止；
-F       从指定的文件中读取表达式,忽略其它的表达式；
-i       指定监听的网络接口；
-r       从指定的文件中读取包(这些包一般通过-w选项产生)；
-w       直接将包写入文件中，并不分析和打印出来；
-T       将监听到的包直接解释为指定的类型的报文，常见的类型有rpc （远程过程调用）和snmp（简单网络管理协议；）</pre>
</div>
</div>
<p>(2). tcpdump的表达式<br />
<span id="more-4389"></span><br />
表达式是一个正则表达式，tcpdump利用它作为过滤报文的条件，如果一个报文满足表达式的条件，则这个报文将会被捕获。如果没有给出任何条件，则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。<br />
第一种是关于类型的关键字，主要包括host，net，port, 例如 host 210.27.48.2，指明 210.27.48.2是一台主机，net 202.0.0.0 指明 202.0.0.0是一个网络地址，port 23 指明端口号是23。如果没有指定类型，缺省的类型是host.<br />
第二种是确定传输方向的关键字，主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明，src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字，则缺省是src or dst关键字。<br />
第三种是协议的关键字，主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议，实际上它是”ether”的别名，fddi和ether具有类似的源地址和目的地址，所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议，则tcpdump将会监听所有协议的信息包。<br />
除了这三种类型的关键字之外，其他重要的关键字如下：gateway, broadcast,less,greater,还有三种逻辑运算，取非运算是 &#8216;not &#8216; &#8216;! &#8216;, 与运算是&#8217;and&#8217;,'&amp;&amp;&#8217;;或运算 是&#8217;or&#8217; ,&#8217;││&#8217;；这些关键字可以组合起来构成强大的组合条件来满足人们的需要，下面举几个例子来说明。<br />
A）想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包：</p>
<div>
<pre>tcpdump host 210.27.48.1</pre>
</div>
<p>B）想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信，使用命令：（在命令行中使用 括号时，一定要转义）</p>
<div>
<pre>tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)</pre>
</div>
<p>C）如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包，使用命令：</p>
<div>
<pre>tcpdump ip host 210.27.48.1 and ! 210.27.48.2</pre>
</div>
<p>D）如果想要获取主机210.27.48.1接收或发出的telnet包，使用如下命令：</p>
<div>
<pre>tcpdump tcp port 23 and host 210.27.48.1</pre>
</div>
<p>(3). tcpdump的输出结果<br />
下面我们介绍几种典型的tcpdump命令的输出信息<br />
A）数据链路层头信息<br />
使用命令</p>
<div>
<pre>tcpdump --e host ice</pre>
</div>
<p>ice 是一台装有linux的主机，她的MAC地址是0：90：27：58：AF：1A<br />
H219是一台装有SOLARIC的SUN工作站，它的MAC地址是8：0：20：79：5B：46；上一条命令的输出结果如下所示：<br />
21:50:12.847509 eth0 &lt; 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 &gt; ice.telnet 0:0(0) ack 22535 win 8760 (DF)<br />
分析：21：50：12是显示的时间， 847509是ID号，eth0 &lt;表示从网络接口eth0 接受该数据包，eth0 &gt;表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 &gt; ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.<br />
B）ARP包的TCPDUMP输出信息<br />
使用命令</p>
<div>
<pre>tcpdump arp</pre>
</div>
<p>得到的输出结果是：</p>
<div>
<div>
<pre>22:32:42.802509 eth0 &gt; arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 &lt; arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)</pre>
</div>
</div>
<p>分析: 22:32:42是时间戳, 802509是ID号, eth0 &gt;表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。<br />
C）TCP包的输出信息<br />
用TCPDUMP捕获的TCP包的一般输出信息是：</p>
<div>
<div>
<pre>src &gt; dst: flags data-seqno ack window urgent options</pre>
</div>
</div>
<p>src &gt; dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) “.” (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.<br />
D）UDP包的输出信息<br />
用TCPDUMP捕获的UDP包的一般输出信息是：</p>
<div>
<div>
<pre>route.port1 &gt; ice.port2: udp lenth</pre>
</div>
</div>
<p>UDP十分简单，上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口，类型是UDP， 包的长度是lenth。</p>
<p>附:现在一般用这样用：<br />
sudo tcpdump -s 0 -nX host 172.27.193.234 -i eth1</p>
<p>或者-w来使用wireshark</p>
<p>转自：http://www.vimer.cn/2009/10/tcpdump%E8%AF%A6%E8%A7%A3.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ha97.com/4389.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

