<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>程序猿说你好</title>
  <subtitle>来了就是猿</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://monkeysayhi.github.io/"/>
  <updated>2018-12-05T03:08:57.000Z</updated>
  <id>https://monkeysayhi.github.io/</id>
  
  <author>
    <name>猴子007</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>浅谈Linux僵尸进程与孤儿进程</title>
    <link href="https://monkeysayhi.github.io/2018/12/05/%E6%B5%85%E8%B0%88Linux%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B/"/>
    <id>https://monkeysayhi.github.io/2018/12/05/浅谈Linux僵尸进程与孤儿进程/</id>
    <published>2018-12-05T03:08:48.000Z</published>
    <updated>2018-12-05T03:08:57.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x5728;Linux&#x4E2D;&#xFF0C;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x540E;&#xFF0C;&#x5206;&#x914D;&#x7684;&#x7EDD;&#x5927;&#x90E8;&#x5206;&#x8D44;&#x6E90;&#x5C06;&#x88AB;&#x56DE;&#x6536;&#xFF0C;&#x9664;&#x4E86;<code>task_struct</code>&#x7ED3;&#x6784;&#x53CA;&#x5C11;&#x6570;&#x8D44;&#x6E90;&#x5916;&#x3002;<strong>&#x6B64;&#x65F6;&#x7684;&#x8FDB;&#x7A0B;&#x5DF2;&#x7ECF;<code>&#x201C;&#x6B7B;&#x4EA1;&#x201D;</code>&#xFF0C;&#x4F46;<code>task_struct</code>&#x7ED3;&#x6784;&#x8FD8;&#x4FDD;&#x5B58;&#x5728;&#x8FDB;&#x7A0B;&#x5217;&#x8868;&#x4E2D;&#xFF0C;<code>&#x534A;&#x6B7B;&#x4E0D;&#x6D3B;</code>&#xFF0C;&#x6545;&#x79F0;&#x4E3A;<code>&#x201C;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x201D;</code></strong>&#x3002;</p>
<p><strong>&#x5728;&#x56DE;&#x6536;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4E4B;&#x524D;&#xFF0C;&#x5982;&#x679C;&#x7236;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x4E86;&#xFF0C;&#x5219;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x53D8;&#x4E3A;<code>&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;</code></strong>&#xFF0C;&#x8FDB;&#x800C;&#x88AB;init&#x8FDB;&#x7A0B;&#x63A5;&#x7BA1;&#x3001;&#x56DE;&#x6536;&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x4E3A;<code>EXIT_ZOMBIE</code>&#xFF0C;&#x7F29;&#x5199;<code>Z</code>&#xFF0C;ps&#x547D;&#x4EE4;&#x4E5F;&#x4F1A;&#x6253;&#x5370;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF0C;&#x4F46;&#x65E0;&#x6CD5;&#x4F7F;&#x7528;kill&#x6740;&#x6B7B;&#x3002;</p>
</blockquote>
<h1 id="&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF08;&#x4FDD;&#x7559;task-struct&#xFF09;&#xFF1F;"><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF08;&#x4FDD;&#x7559;task-struct&#xFF09;&#xFF1F;" class="headerlink" title="&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF08;&#x4FDD;&#x7559;task_struct&#xFF09;&#xFF1F;"></a>&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF08;&#x4FDD;&#x7559;<code>task_struct</code>&#xFF09;&#xFF1F;</h1><p>&#x4E4B;&#x6240;&#x4EE5;&#x4FDD;&#x7559;<code>task_struct</code>&#xFF0C;&#x662F;&#x56E0;&#x4E3A;<code>task_struct</code>&#x91CC;&#x9762;&#x4FDD;&#x5B58;&#x4E86;&#x8FDB;&#x7A0B;&#x7684;pid&#x3001;&#x9000;&#x51FA;&#x7801;&#x3001;&#x4EE5;&#x53CA;&#x4E00;&#x4E9B;&#x7EDF;&#x8BA1;&#x4FE1;&#x606F;&#xFF0C;&#x7236;&#x8FDB;&#x7A0B;&#x5F88;&#x53EF;&#x80FD;&#x4F1A;&#x5173;&#x5FC3;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#x3002;&#x6BD4;&#x5982;<code>$?</code>&#x53D8;&#x91CF;&#x5C31;&#x4FDD;&#x5B58;&#x4E86;&#x6700;&#x8FD1;&#x4E00;&#x4E2A;&#x9000;&#x51FA;&#x7684;&#x524D;&#x53F0;&#x8FDB;&#x7A0B;&#x7684;&#x9000;&#x51FA;&#x7801;&#xFF0C;&#x8FD9;&#x4E2A;&#x9000;&#x51FA;&#x7801;&#x5C31;&#x6765;&#x81EA;&#x4E8E;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x7684;<code>task_struct</code>&#x7ED3;&#x6784;&#x3002;</p>
<h1 id="&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;"><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;" class="headerlink" title="&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;"></a>&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;</h1><p>&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x7684;<code>task_struct</code>&#x4E2D;&#x4FDD;&#x5B58;&#x4E86;&#x8FDB;&#x7A0B;&#x7684;pid&#x3001;&#x9000;&#x51FA;&#x7801;&#x7B49;&#x3002;&#x5C24;&#x5176;&#x662F;pid&#xFF0C;&#x5982;&#x679C;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x8FC7;&#x591A;&#xFF0C;&#x6700;&#x7EC8;&#x8017;&#x5C3D;&#x4E86;pid&#xFF0C;&#x90A3;&#x4E48;&#x5C06;&#x65E0;&#x6CD5;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x8FDB;&#x7A0B;&#x3002;</p>
<h1 id="&#x5982;&#x4F55;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF1F;"><a href="#&#x5982;&#x4F55;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF1F;" class="headerlink" title="&#x5982;&#x4F55;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF1F;"></a>&#x5982;&#x4F55;&#x5904;&#x7406;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF1F;</h1><p>&#x7236;&#x8FDB;&#x7A0B;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;wait&#x7CFB;&#x5217;&#x7684;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;&#xFF08;&#x5982;wait4&#x3001;waitpid&#x7B49;&#xFF0C;&#x4EE5;&#x4E0B;&#x7528;wait&#x6307;&#x4EE3;&#xFF09;&#x6765;&#x7B49;&#x5F85;&#x67D0;&#x4E2A;&#x6216;&#x67D0;&#x4E9B;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;&#x9000;&#x51FA;&#xFF0C;&#x5E76;&#x83B7;&#x53D6;&#x5B83;&#x7684;&#x9000;&#x51FA;&#x4FE1;&#x606F;&#xFF0C;&#x7136;&#x540E;&#x987A;&#x4FBF;&#x56DE;&#x6536;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;&#x201C;&#x5C38;&#x4F53;&#x201D;&#xFF08;&#x5982;<code>task_struct</code>&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x5B50;&#x8FDB;&#x7A0B;&#x8F6C;&#x5165;<code>EXIT_DEAD</code>&#x72B6;&#x6001;&#xFF08;<code>X</code>&#xFF09;&#xFF0C;&#x7B49;&#x5F85;&#x88AB;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5F7B;&#x5E95;&#x56DE;&#x6536;&#x3002;</p>
<blockquote>
<p>&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x540E;&#xFF0C;&#x7236;&#x8FDB;&#x7A0B;&#x672A;&#x8C03;&#x7528;wait&#x56DE;&#x6536;&#x5C38;&#x4F53;&#x524D;&#xFF0C;&#x5B50;&#x8FDB;&#x7A0B;&#x5C06;&#x4FDD;&#x6301;&#x50F5;&#x5C38;&#x72B6;&#x6001;&#x3002;</p>
</blockquote>
<h2 id="&#x65B9;&#x6848;1&#xFF1A;&#x7236;&#x8FDB;&#x7A0B;&#x8C03;&#x7528;wait"><a href="#&#x65B9;&#x6848;1&#xFF1A;&#x7236;&#x8FDB;&#x7A0B;&#x8C03;&#x7528;wait" class="headerlink" title="&#x65B9;&#x6848;1&#xFF1A;&#x7236;&#x8FDB;&#x7A0B;&#x8C03;&#x7528;wait"></a>&#x65B9;&#x6848;1&#xFF1A;&#x7236;&#x8FDB;&#x7A0B;&#x8C03;&#x7528;wait</h2><p>&#x5F88;&#x81EA;&#x7136;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x7236;&#x8FDB;&#x7A0B;&#x4E3B;&#x52A8;&#x8C03;&#x7528;wait&#xFF0C;&#x4E5F;&#x5C31;&#x6D88;&#x706D;&#x4E86;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x3002;</p>
<p>&#x4F46;wait&#x8C03;&#x7528;&#x662F;&#x963B;&#x585E;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x8C03;&#x7528;wait&#x65F6;&#x5B50;&#x8FDB;&#x7A0B;&#x8FD8;&#x6CA1;&#x6709;&#x9000;&#x51FA;&#xFF0C;&#x5C06;&#x963B;&#x585E;&#x4F4F;&#x7236;&#x8FDB;&#x7A0B;&#xFF0C;&#x5F71;&#x54CD;&#x6027;&#x80FD;&#x3002;</p>
<h2 id="&#x65B9;&#x6848;2&#xFF1A;kill&#x7236;&#x8FDB;&#x7A0B;&#xFF08;&#x4EA7;&#x751F;&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;&#xFF09;"><a href="#&#x65B9;&#x6848;2&#xFF1A;kill&#x7236;&#x8FDB;&#x7A0B;&#xFF08;&#x4EA7;&#x751F;&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;&#xFF09;" class="headerlink" title="&#x65B9;&#x6848;2&#xFF1A;kill&#x7236;&#x8FDB;&#x7A0B;&#xFF08;&#x4EA7;&#x751F;&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;&#xFF09;"></a>&#x65B9;&#x6848;2&#xFF1A;kill&#x7236;&#x8FDB;&#x7A0B;&#xFF08;&#x4EA7;&#x751F;&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;&#xFF09;</h2><p>&#x5982;&#x679C;&#x7236;&#x8FDB;&#x7A0B;&#x56DE;&#x6536;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x524D;&#x5C31;&#x9000;&#x51FA;&#x4E86;&#xFF0C;&#x5219;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x53D8;&#x4E3A;&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;&#x3002;&#x901A;&#x5E38;&#x4F1A;&#x5C06;&#x201C;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x201D;&#x59D4;&#x6258;&#x7ED9;init&#x8FDB;&#x7A0B;&#xFF08;pid&#x7B49;&#x4E8E;1&#xFF09;&#xFF0C;init&#x8FDB;&#x7A0B;&#x5C06;&#x5728;&#x4E00;&#x4E2A;&#x6B7B;&#x5FAA;&#x73AF;&#x4E2D;&#x7B49;&#x5F85;&#x5176;&#x5B50;&#x8FDB;&#x7A0B;&#xFF08;&#x5305;&#x62EC;&#x8FD9;&#x4E9B;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#xFF09;&#x7684;&#x9000;&#x51FA;&#x4E8B;&#x4EF6;&#xFF0C;&#x5E76;&#x8C03;&#x7528;wait&#x56DE;&#x6536;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;&#x5C38;&#x4F53;&#x3002;</p>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x627E;&#x5230;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x7684;&#x7236;&#x8FDB;&#x7A0B;&#xFF0C;kill&#x6389;&#xFF0C;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x6CA1;&#x6709;&#x529E;&#x6CD5;&#x65F6;&#x7684;&#x529E;&#x6CD5;&#x3002;</p>
<h2 id="&#x65B9;&#x6848;3&#xFF1A;&#x901A;&#x8FC7;&#x4FE1;&#x53F7;&#x673A;&#x5236;&#x5F02;&#x6B65;&#x56DE;&#x6536;"><a href="#&#x65B9;&#x6848;3&#xFF1A;&#x901A;&#x8FC7;&#x4FE1;&#x53F7;&#x673A;&#x5236;&#x5F02;&#x6B65;&#x56DE;&#x6536;" class="headerlink" title="&#x65B9;&#x6848;3&#xFF1A;&#x901A;&#x8FC7;&#x4FE1;&#x53F7;&#x673A;&#x5236;&#x5F02;&#x6B65;&#x56DE;&#x6536;"></a>&#x65B9;&#x6848;3&#xFF1A;&#x901A;&#x8FC7;&#x4FE1;&#x53F7;&#x673A;&#x5236;&#x5F02;&#x6B65;&#x56DE;&#x6536;</h2><p>&#x7F16;&#x5199;&#x7A0B;&#x5E8F;&#x65F6;&#xFF0C;&#x5B50;&#x8FDB;&#x7A0B;&#x9000;&#x51FA;&#x524D;&#x5411;&#x7236;&#x8FDB;&#x7A0B;&#x53D1;&#x9001;<code>SIGCHLD</code>&#x4FE1;&#x53F7;&#xFF0C;&#x7236;&#x8FDB;&#x7A0B;&#x6536;&#x5230;<code>SIGCHLD</code>&#x4FE1;&#x53F7;&#x540E;&#xFF08;&#x901A;&#x8FC7;<code>signal(SIGCHLD, sig_child)</code>&#x7ED1;&#x5B9A;&#x4FE1;&#x53F7;&#x5904;&#x7406;&#x5668;&#xFF09;&#xFF0C;&#x8C03;&#x7528;wait&#x56DE;&#x6536;&#x5B50;&#x8FDB;&#x7A0B;&#x7684;&#x5C38;&#x4F53;&#x3002;</p>
<p>&#x4E0E;&#x65B9;&#x6848;1&#x76F8;&#x6BD4;&#xFF0C;&#x65B9;&#x6848;3&#x4E0D;&#x9700;&#x8981;&#x963B;&#x585E;&#x7236;&#x8FDB;&#x7A0B;&#xFF0C;&#x662F;&#x6700;&#x7406;&#x60F3;&#x7684;&#x65B9;&#x5F0F;&#x3002;</p>
<h1 id="&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x51FA;&#x73B0;&#x5C11;&#x6570;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4E00;&#x76F4;&#x4E0D;&#x88AB;&#x56DE;&#x6536;"><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x51FA;&#x73B0;&#x5C11;&#x6570;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4E00;&#x76F4;&#x4E0D;&#x88AB;&#x56DE;&#x6536;" class="headerlink" title="&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x51FA;&#x73B0;&#x5C11;&#x6570;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4E00;&#x76F4;&#x4E0D;&#x88AB;&#x56DE;&#x6536;"></a>&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x51FA;&#x73B0;&#x5C11;&#x6570;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4E00;&#x76F4;&#x4E0D;&#x88AB;&#x56DE;&#x6536;</h1><p>&#x5728;&#x5B9E;&#x9645;&#x5DE5;&#x4F5C;&#x4E2D;&#xFF0C;&#x603B;&#x4F1A;&#x78B0;&#x5230;&#x5C11;&#x6570;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x4E00;&#x76F4;&#x4E0D;&#x88AB;&#x56DE;&#x6536;&#x3002;</p>
<p>&#x663E;&#x7136;&#xFF0C;&#x5982;&#x679C;&#x7236;&#x8FDB;&#x7A0B;&#x6CA1;&#x6709;&#x7ED1;&#x5B9A;<code>SIGCHLD</code>&#x4FE1;&#x53F7;&#x5904;&#x7406;&#x51FD;&#x6570;&#x8C03;&#x7528;wait&#x6216;waitpid&#x7B49;&#x5F85;&#x5B50;&#x8FDB;&#x7A0B;&#x7ED3;&#x675F;&#xFF0C;&#x90A3;&#x4E48;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x5C31;&#x4F1A;&#x4E00;&#x76F4;&#x5B58;&#x5728;&#x3002;&#x5982;&#x679C;&#x8FD9;&#x65F6;&#x5019;&#x7236;&#x8FDB;&#x7A0B;&#x7ED3;&#x675F;&#x4E86;&#xFF0C;&#x90A3;&#x4E48;init&#x8FDB;&#x7A0B;&#x4F1A;&#x81EA;&#x52A8;&#x63A5;&#x624B;&#x8FD9;&#x4E2A;&#x5B50;&#x8FDB;&#x7A0B;&#xFF0C;&#x8FD8;&#x662F;&#x80FD;&#x88AB;&#x6E05;&#x9664;&#x6389;&#x7684;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x5982;&#x679C;&#x7236;&#x8FDB;&#x7A0B;&#x662F;&#x4E00;&#x4E2A;&#x5FAA;&#x73AF;&#xFF0C;&#x4E0D;&#x4F1A;&#x7ED3;&#x675F;&#xFF0C;&#x90A3;&#x4E48;&#x5B50;&#x8FDB;&#x7A0B;&#x5C31;&#x4F1A;&#x4E00;&#x76F4;&#x4FDD;&#x6301;&#x50F5;&#x5C38;&#x72B6;&#x6001;&#xFF0C;&#x8FD9;&#x5C31;&#x662F;&#x7CFB;&#x7EDF;&#x4E2D;&#x4E3A;&#x4EC0;&#x4E48;&#x6709;&#x65F6;&#x5019;&#x4F1A;&#x6709;&#x5F88;&#x591A;&#x7684;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;&#x3002;</p>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="http://www.sohu.com/a/120145657_220533" target="_blank" rel="external">&#x7814;&#x7A76;&#x7ECF;&#x5178;&#x9762;&#x8BD5;&#x9898;&#xFF1A;&#x5B64;&#x513F;&#x8FDB;&#x7A0B;&#x548C;&#x50F5;&#x5C38;&#x8FDB;&#x7A0B;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x5728;Linux&amp;#x4E2D;&amp;#xFF0C;&amp;#x8FDB;&amp;#x7A0B;&amp;#x9000;&amp;#x51FA;&amp;#x540E;&amp;#xFF0C;&amp;#x5206;&amp;#x914D;&amp;#x7684;&amp;#x7EDD;&amp;#x5927;&amp;#x90E8;&amp;#x5206;&amp;#x8D44;&amp;#x6E90;&amp;#x5C06;&amp;#x88AB;&amp;#x56DE;&amp;#x6536;&amp;#xFF0C;&amp;#x9664;&amp;#x4E86;&lt;code&gt;task_struct&lt;/code&gt;&amp;#x7ED3;&amp;#x6784;&amp;#x53CA;&amp;#x5C11;&amp;#x6570;&amp;#x8D44;&amp;#x6E90;&amp;#x5916;&amp;#x3002;&lt;strong&gt;&amp;#x6B64;&amp;#x65F6;&amp;#x7684;&amp;#x8FDB;&amp;#x7A0B;&amp;#x5DF2;&amp;#x7ECF;&lt;code&gt;&amp;#x201C;&amp;#x6B7B;&amp;#x4EA1;&amp;#x201D;&lt;/code&gt;&amp;#xFF0C;&amp;#x4F46;&lt;code&gt;task_struct&lt;/code&gt;&amp;#x7ED3;&amp;#x6784;&amp;#x8FD8;&amp;#x4FDD;&amp;#x5B58;&amp;#x5728;&amp;#x8FDB;&amp;#x7A0B;&amp;#x5217;&amp;#x8868;&amp;#x4E2D;&amp;#xFF0C;&lt;code&gt;&amp;#x534A;&amp;#x6B7B;&amp;#x4E0D;&amp;#x6D3B;&lt;/code&gt;&amp;#xFF0C;&amp;#x6545;&amp;#x79F0;&amp;#x4E3A;&lt;code&gt;&amp;#x201C;&amp;#x50F5;&amp;#x5C38;&amp;#x8FDB;&amp;#x7A0B;&amp;#x201D;&lt;/code&gt;&lt;/strong&gt;&amp;#x3002;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#x5728;&amp;#x56DE;&amp;#x6536;&amp;#x50F5;&amp;#x5C38;&amp;#x8FDB;&amp;#x7A0B;&amp;#x4E4B;&amp;#x524D;&amp;#xFF0C;&amp;#x5982;&amp;#x679C;&amp;#x7236;&amp;#x8FDB;&amp;#x7A0B;&amp;#x9000;&amp;#x51FA;&amp;#x4E86;&amp;#xFF0C;&amp;#x5219;&amp;#x50F5;&amp;#x5C38;&amp;#x8FDB;&amp;#x7A0B;&amp;#x53D8;&amp;#x4E3A;&lt;code&gt;&amp;#x201C;&amp;#x5B64;&amp;#x513F;&amp;#x8FDB;&amp;#x7A0B;&amp;#x201D;&lt;/code&gt;&lt;/strong&gt;&amp;#xFF0C;&amp;#x8FDB;&amp;#x800C;&amp;#x88AB;init&amp;#x8FDB;&amp;#x7A0B;&amp;#x63A5;&amp;#x7BA1;&amp;#x3001;&amp;#x56DE;&amp;#x6536;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Linux" scheme="https://monkeysayhi.github.io/tags/Linux/"/>
    
  </entry>
  
  <entry>
    <title>Yarn笔记：Container资源下载流程</title>
    <link href="https://monkeysayhi.github.io/2018/11/28/Yarn%E7%AC%94%E8%AE%B0%EF%BC%9AContainer%E8%B5%84%E6%BA%90%E4%B8%8B%E8%BD%BD%E6%B5%81%E7%A8%8B/"/>
    <id>https://monkeysayhi.github.io/2018/11/28/Yarn笔记：Container资源下载流程/</id>
    <published>2018-11-28T09:37:18.000Z</published>
    <updated>2018-11-28T09:37:31.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x518D;&#x6765;&#x4E2A;&#x5C0F;&#x4F8B;&#x5B50;&#x2014;&#x2014;Container&#x8D44;&#x6E90;&#x4E0B;&#x8F7D;&#x6D41;&#x7A0B;&#xFF0C;&#x5E2E;&#x52A9;&#x7406;&#x89E3;<a href="/2018/11/20/&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;/">&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;</a>&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x6E90;&#x7801;&#x7248;&#x672C;&#xFF1A;Apache Hadoop 2.6.0</p>
</blockquote>
<h1 id="&#x4E09;&#x4E2A;&#x8D44;&#x6E90;&#x7B49;&#x7EA7;"><a href="#&#x4E09;&#x4E2A;&#x8D44;&#x6E90;&#x7B49;&#x7EA7;" class="headerlink" title="&#x4E09;&#x4E2A;&#x8D44;&#x6E90;&#x7B49;&#x7EA7;"></a>&#x4E09;&#x4E2A;&#x8D44;&#x6E90;&#x7B49;&#x7EA7;</h1><p>&#x5728;Yarn&#x4E2D;&#xFF0C;&#x8D44;&#x6E90;&#x4E5F;&#x88AB;&#x79F0;&#x4E3A;&#x5206;&#x5E03;&#x5F0F;&#x7F13;&#x5B58;&#xFF0C;&#x6839;&#x636E;&#x53EF;&#x89C1;&#x6027;&#x5206;&#x4E3A;&#x4E09;&#x4E2A;&#x7B49;&#x7EA7;&#xFF1A;</p>
<ul>
<li><code>PUBLIC</code>&#xFF1A;&#x8282;&#x70B9;&#x4E0A;&#x6240;&#x6709;&#x7528;&#x6237;&#x5171;&#x4EAB;&#x3002;</li>
<li><code>PRIVATE</code>&#xFF1A;&#x8282;&#x70B9;&#x4E0A;&#x540C;&#x4E00;&#x7528;&#x6237;&#x7684;&#x6240;&#x6709;app&#x5171;&#x4EAB;&#x3002;</li>
<li><code>APPLICATION</code>&#xFF1A;&#x8282;&#x70B9;&#x4E0A;&#x540C;&#x4E00;app&#x7684;&#x6240;&#x6709;container&#x5171;&#x4EAB;&#x3002;</li>
</ul>
<p>&#x5404;&#x8D44;&#x6E90;&#x7684;&#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/Yarn&#x7B14;&#x8BB0;&#xFF1A;Container&#x8D44;&#x6E90;&#x4E0B;&#x8F7D;&#x6D41;&#x7A0B;/Container&#x8D44;&#x6E90;&#x5B58;&#x50A8;&#x7ED3;&#x6784;.png" alt="Container&#x8D44;&#x6E90;&#x5B58;&#x50A8;&#x7ED3;&#x6784;"></p>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#x5BF9;&#x5E94;&#x4E86;&#x8D44;&#x6E90;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x3002;</p>
<p>&#x6240;&#x6709;&#x8D44;&#x6E90;&#x6700;&#x7EC8;&#x4E3A;contaienr&#x6240;&#x7528;&#xFF0C;container&#x5728;&#x81EA;&#x5DF1;&#x7684;<code>${containerId}/</code>&#x76EE;&#x5F55;&#x4E0B;&#x901A;&#x8FC7;&#x8F6F;&#x94FE;&#x8BBF;&#x95EE;&#x5404;&#x7B49;&#x7EA7;&#x7684;&#x8D44;&#x6E90;&#x3002;</p>
<h1 id="&#x8FC7;&#x7A0B;"><a href="#&#x8FC7;&#x7A0B;" class="headerlink" title="&#x8FC7;&#x7A0B;"></a>&#x8FC7;&#x7A0B;</h1><p><strong>PUBLIC&#x8D44;&#x6E90;&#x7531;<code>ResourceLocalizationService</code>&#x4E0B;&#x7684;<code>PublicLocalizer</code>&#x4E0B;&#x8F7D;</strong>&#xFF1B;<strong>PRIVATE&#x3001;APPLICATION&#x8D44;&#x6E90;&#x4E5F;&#x7ECF;&#x8FC7;ResourceLocalizationService&#x670D;&#x52A1;&#xFF0C;&#x4F46;&#x6700;&#x7EC8;&#x7531;&#x5404;container&#x72EC;&#x7ACB;&#x7684;<code>ContainerLocalizer</code>&#x4E0B;&#x8F7D;</strong>&#x3002;</p>
<p>&#x5047;&#x8BBE;PUBLIC&#x3001;PRIVATE&#x8D44;&#x6E90;&#x5DF2;&#x4E0B;&#x8F7D;&#xFF0C;&#x73B0;&#x5728;&#x7528;&#x6237;&#x542F;&#x52A8;&#x4E00;&#x4E2A;&#x65B0;app&#xFF0C;&#x4E0B;&#x8F7D;APPLICATION&#x8D44;&#x6E90;&#x7684;&#x8FC7;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>ResourceLocalizationService&#x670D;&#x52A1;&#x6536;&#x5230;<code>INIT_APPLICATION_RESUOURCE</code>&#x4E8B;&#x4EF6;&#x3002;</li>
<li>&#x4E3A;&#x6BCF;&#x4E2A;&#x8D44;&#x6E90;&#x521B;&#x5EFA;<code>LocalResourceTracker</code>&#x3002;</li>
<li>LocalResourceTracker&#x521B;&#x5EFA;<code>LocalizedResource</code>&#x72B6;&#x6001;&#x673A;&#xFF0C;&#x4EE5;&#x8DDF;&#x8E2A;&#x8D44;&#x6E90;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#x3002;</li>
<li>&#x5982;&#x679C;&#x9700;&#x8981;&#x4E0B;&#x8F7D;&#xFF0C;&#x5219;LocalizedResource&#x72B6;&#x6001;&#x673A;&#x5411;ResourceLocalizationService&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x901A;&#x77E5;&#x4E0B;&#x8F7D;&#xFF0C;&#x8F6C;&#x5230;<code>DOWNLOADING</code>&#x72B6;&#x6001;&#x3002;</li>
<li>ResourceLocalizationService&#x53D1;&#x73B0;&#x4E0D;&#x662F;PUBLIC&#x8D44;&#x6E90;&#xFF0C;&#x4E3A;&#x6BCF;&#x4E2A;container&#x521B;&#x5EFA;<code>LocalizerRunner</code>&#x7EBF;&#x7A0B;&#x3002;</li>
<li>LocalizerRunner&#x7EBF;&#x7A0B;&#x521B;&#x5EFA;ContainerLocalizer&#x5BA2;&#x6237;&#x7AEF;&#x4E0B;&#x8F7D;&#x8D44;&#x6E90;&#x3002;</li>
</ol>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x518D;&amp;#x6765;&amp;#x4E2A;&amp;#x5C0F;&amp;#x4F8B;&amp;#x5B50;&amp;#x2014;&amp;#x2014;Container&amp;#x8D44;&amp;#x6E90;&amp;#x4E0B;&amp;#x8F7D;&amp;#x6D41;&amp;#x7A0B;&amp;#xFF0C;&amp;#x5E2E;&amp;#x52A9;&amp;#x7406;&amp;#x89E3;&lt;a href=&quot;/2018/11/20/&amp;#x6E90;&amp;#x7801;|Yarn&amp;#x7684;&amp;#x4E8B;&amp;#x4EF6;&amp;#x9A71;&amp;#x52A8;&amp;#x6A21;&amp;#x578B;&amp;#x4E0E;&amp;#x72B6;&amp;#x6001;&amp;#x673A;/&quot;&gt;&amp;#x6E90;&amp;#x7801;|Yarn&amp;#x7684;&amp;#x4E8B;&amp;#x4EF6;&amp;#x9A71;&amp;#x52A8;&amp;#x6A21;&amp;#x578B;&amp;#x4E0E;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&lt;/a&gt;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Hadoop" scheme="https://monkeysayhi.github.io/tags/Hadoop/"/>
    
      <category term="Yarn" scheme="https://monkeysayhi.github.io/tags/Yarn/"/>
    
      <category term="分布式" scheme="https://monkeysayhi.github.io/tags/%E5%88%86%E5%B8%83%E5%BC%8F/"/>
    
  </entry>
  
  <entry>
    <title>Yarn笔记：Container启动流程</title>
    <link href="https://monkeysayhi.github.io/2018/11/26/Yarn%E7%AC%94%E8%AE%B0%EF%BC%9AContainer%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B/"/>
    <id>https://monkeysayhi.github.io/2018/11/26/Yarn笔记：Container启动流程/</id>
    <published>2018-11-26T09:17:35.000Z</published>
    <updated>2018-11-26T09:17:44.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x4E0A;&#x6B21;&#x4ECB;&#x7ECD;&#x4E86;<a href="/2018/11/20/&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;/">&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;</a>&#xFF0C;&#x4ECA;&#x5929;&#x770B;&#x4E2A;&#x5C0F;&#x4F8B;&#x5B50;&#x2014;&#x2014;Container&#x542F;&#x52A8;&#x6D41;&#x7A0B;&#xFF0C;&#x5DE9;&#x56FA;&#x5BF9;Yarn&#x5206;&#x5E03;&#x5F0F;&#x6A21;&#x578B;&#x548C;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x5E76;&#x53D1;&#x6A21;&#x578B;&#x7684;&#x7406;&#x89E3;&#x3002;</p>
<a id="more"></a>
<p>&#x503C;&#x5F97;&#x5E86;&#x5E78;&#x7684;&#x662F;&#xFF0C;&#x5C3D;&#x7BA1;&#x72B6;&#x6001;&#x673A;&#x6A21;&#x578B;&#x8BBE;&#x8BA1;&#x590D;&#x6742;&#xFF0C;&#x4F46;&#x4E00;&#x65E6;&#x8BBE;&#x8BA1;&#xFF08;&#x6700;&#x597D;&#x80FD;&#x8BC1;&#x660E;&#xFF09;&#x5B8C;&#x6210;&#xFF0C;&#x5C31;&#x81EA;&#x7136;&#x7684;&#x89E3;&#x51B3;&#x4E86;&#x5F88;&#x591A;&#x5206;&#x5E03;&#x5F0F;&#x548C;&#x5E76;&#x53D1;&#x4E0A;&#x7684;&#x4E00;&#x81F4;&#x6027;&#x95EE;&#x9898;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x5BF9;Yarn&#x6E90;&#x7801;&#x7684;&#x5B66;&#x4E60;&#x4E0D;&#x4F1A;&#x50CF;HDFS&#x4E00;&#x6837;&#x5197;&#x957F;&#x67AF;&#x71E5;&#xFF0C;&#x5F80;&#x5F80;&#x987A;&#x7740;&#x72B6;&#x6001;&#x673A;&#x770B;&#x51E0;&#x4E2A;&#x5173;&#x952E;&#x6D41;&#x7A0B;&#x5373;&#x53EF;&#x3002;</p>
<blockquote>
<p>&#x6E90;&#x7801;&#x7248;&#x672C;&#xFF1A;Apache Hadoop 2.6.0</p>
</blockquote>
<h1 id="&#x4E00;&#x3001;RM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x51C6;&#x5907;Container"><a href="#&#x4E00;&#x3001;RM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x51C6;&#x5907;Container" class="headerlink" title="&#x4E00;&#x3001;RM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x51C6;&#x5907;Container"></a>&#x4E00;&#x3001;RM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x51C6;&#x5907;Container</h1><p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/Yarn&#x7B14;&#x8BB0;&#xFF1A;Container&#x542F;&#x52A8;&#x6D41;&#x7A0B;/RMContainer.png" alt="RMContainer"></p>
<ol>
<li>&#x6536;&#x5230;AM&#x7684;&#x5FC3;&#x8DF3;&#x8BF7;&#x6C42;&#xFF0C;&#x7ACB;&#x5373;&#x54CD;&#x5E94;&#x3002;</li>
<li>&#x6839;&#x636E;&#x8D44;&#x6E90;&#x548C;&#x8D1F;&#x8F7D;&#x9009;&#x62E9;NM&#xFF08;<font color="red">&#x4E24;&#x79CD;&#x8D44;&#x6E90;&#x7B56;&#x7565;&#xFF1F;&#xFF1F;&#xFF1F;</font>&#xFF09;&#x3002;</li>
<li>&#x521B;&#x5EFA;RMContainer&#x72B6;&#x6001;&#x673A;&#xFF0C;<code>NEW</code>&#x72B6;&#x6001;&#x3002;</li>
<li>&#x53D1;&#x9001;<code>START</code>&#x4E8B;&#x4EF6;&#xFF0C;&#x8F6C;&#x5230;<code>ALLOCATED</code>&#x72B6;&#x6001;&#xFF08;&#x8868;&#x793A;&#x8BE5;container&#x5DF2;&#x88AB;&#x5206;&#x914D;&#xFF0C;&#x4F46;&#x672A;&#x901A;&#x77E5;AM&#xFF09;&#x3002;</li>
<li>&#x5728;<strong>&#x4E0B;&#x4E00;&#x6B21;AM&#x5FC3;&#x8DF3;&#x54CD;&#x5E94;&#x4E2D;&#x8FD4;&#x56DE;&#x5DF2;&#x5206;&#x914D;&#x7684;container</strong>&#xFF08;&#x5373;&#xFF0C;&#x5F02;&#x6B65;&#x5206;&#x914D;&#xFF09;&#x3002;</li>
<li>&#x53D1;&#x9001;<code>ACQUIRED</code>&#x4E8B;&#x4EF6;&#xFF0C;&#x8F6C;&#x5230;<code>ACQUIRED</code>&#x72B6;&#x6001;&#xFF08;&#x8868;&#x793A;&#x8BE5;container&#x5DF2;&#x901A;&#x77E5;AM&#xFF09;&#x3002;</li>
</ol>
<h1 id="&#x4E8C;&#x3001;AM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x62FF;&#x5230;Container&#xFF0C;&#x901A;&#x77E5;NM&#x542F;&#x52A8;"><a href="#&#x4E8C;&#x3001;AM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x62FF;&#x5230;Container&#xFF0C;&#x901A;&#x77E5;NM&#x542F;&#x52A8;" class="headerlink" title="&#x4E8C;&#x3001;AM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x62FF;&#x5230;Container&#xFF0C;&#x901A;&#x77E5;NM&#x542F;&#x52A8;"></a>&#x4E8C;&#x3001;AM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x62FF;&#x5230;Container&#xFF0C;&#x901A;&#x77E5;NM&#x542F;&#x52A8;</h1><ol>
<li>&#x6536;&#x5230;&#x5FC3;&#x8DF3;&#x54CD;&#x5E94;&#x4E2D;&#x7684;&#x5DF2;&#x5206;&#x914D;container&#x3002;</li>
<li>&#x901A;&#x77E5;NM&#x542F;&#x52A8;&#x8BE5;container&#x3002;</li>
</ol>
<h1 id="&#x4E09;&#x3001;NM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x5B9E;&#x9645;&#x542F;&#x52A8;Container"><a href="#&#x4E09;&#x3001;NM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x5B9E;&#x9645;&#x542F;&#x52A8;Container" class="headerlink" title="&#x4E09;&#x3001;NM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x5B9E;&#x9645;&#x542F;&#x52A8;Container"></a>&#x4E09;&#x3001;NM&#x4E0A;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;&#x5B9E;&#x9645;&#x542F;&#x52A8;Container</h1><p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/Yarn&#x7B14;&#x8BB0;&#xFF1A;Container&#x542F;&#x52A8;&#x6D41;&#x7A0B;/NMContainer.png" alt="NMContainer"></p>
<blockquote>
<p>NM&#x4E0A;&#x7684;Container&#x3001;&#x8D44;&#x6E90;&#x7B49;&#x4E5F;&#x6709;&#x7C7B;&#x4F3C;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x8FC7;&#x7A0B;&#xFF0C;&#x4EE5;&#x4E0B;&#x63CF;&#x8FF0;&#x5FFD;&#x7565;&#x3002;</p>
</blockquote>
<ol>
<li>NM&#x6536;&#x5230;AM&#x7684;&#x542F;&#x52A8;&#x6307;&#x4EE4;&#x3002;</li>
<li>&#x521B;&#x5EFA;Container&#x72B6;&#x6001;&#x673A;&#x3001;&#x521D;&#x59CB;&#x5316;&#x8D44;&#x6E90;&#x7B49;&#xFF08;&#x8D44;&#x6E90;&#x4E5F;&#x901A;&#x8FC7;&#x72B6;&#x6001;&#x673A;&#x7BA1;&#x7406;&#xFF09;&#x3002;</li>
<li>ContainerLaucher&#x670D;&#x52A1;&#x6536;&#x5230;<code>LAUNCH_CONTAINER</code>&#x4E8B;&#x4EF6;&#x3002;</li>
<li>&#x5C06;&#x5F85;&#x8FD0;&#x884C;container&#x6240;&#x9700;&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3001;&#x8FD0;&#x884C;&#x547D;&#x4EE4;&#x7B49;&#x5199;&#x5165;<code>launch_container.sh</code>&#x811A;&#x672C;&#x3002;</li>
<li>&#x542F;&#x52A8;ContainerMonitor&#xFF0C;&#x76D1;&#x63A7;container&#x7684;&#x5185;&#x5B58;&#x8D44;&#x6E90;&#xFF08;&#x8D85;&#x8FC7;&#x914D;&#x989D;&#x5C31;kill&#x3002;CPU&#x914D;&#x5408;&#x901A;&#x8FC7;cgroup&#x63A7;&#x5236;&#x3002;&#xFF09;&#x3002;</li>
<li>&#x5C06;&#x542F;&#x52A8;<code>launch_container.sh</code>&#x811A;&#x672C;&#x7684;&#x547D;&#x4EE4;&#x5199;&#x5165;<code>container_executor.sh</code>&#x811A;&#x672C;&#xFF08;<strong>&#x9632;&#x6B62;&#x53D8;&#x91CF;&#x5C55;&#x5F00;&#x3001;&#x7279;&#x6B8A;&#x7B26;&#x53F7;&#x8F6C;&#x4E49;&#x7B49;</strong>&#xFF09;&#x3002;</li>
<li>&#x542F;&#x52A8;<code>container_executor.sh</code>&#x811A;&#x672C;&#x3002;</li>
<li>&#x5728;<code>NM-&gt;RM</code>&#x7684;&#x5FC3;&#x8DF3;&#x8BF7;&#x6C42;&#x4E2D;&#x5F02;&#x6B65;&#x6C47;&#x62A5;&#x5DF2;&#x542F;&#x52A8;&#x7684;container&#x3002;</li>
</ol>
<h1 id="&#x56DB;&#x3001;&#x56DE;&#x5230;RM&#xFF1A;&#x9996;&#x5C3E;"><a href="#&#x56DB;&#x3001;&#x56DE;&#x5230;RM&#xFF1A;&#x9996;&#x5C3E;" class="headerlink" title="&#x56DB;&#x3001;&#x56DE;&#x5230;RM&#xFF1A;&#x9996;&#x5C3E;"></a>&#x56DB;&#x3001;&#x56DE;&#x5230;RM&#xFF1A;&#x9996;&#x5C3E;</h1><ol>
<li>&#x6536;&#x5230;NM&#x5FC3;&#x8DF3;&#x4E2D;&#x7684;&#x6C47;&#x62A5;&#x3002;</li>
<li>&#x5411;RMContainer&#x72B6;&#x6001;&#x673A;&#x53D1;&#x9001;<code>LAUNCHED</code>&#x4E8B;&#x4EF6;&#xFF0C;&#x8F6C;&#x5230;<code>RUNNING</code>&#x72B6;&#x6001;&#x3002;</li>
</ol>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x4E0A;&amp;#x6B21;&amp;#x4ECB;&amp;#x7ECD;&amp;#x4E86;&lt;a href=&quot;/2018/11/20/&amp;#x6E90;&amp;#x7801;|Yarn&amp;#x7684;&amp;#x4E8B;&amp;#x4EF6;&amp;#x9A71;&amp;#x52A8;&amp;#x6A21;&amp;#x578B;&amp;#x4E0E;&amp;#x72B6;&amp;#x6001;&amp;#x673A;/&quot;&gt;&amp;#x6E90;&amp;#x7801;|Yarn&amp;#x7684;&amp;#x4E8B;&amp;#x4EF6;&amp;#x9A71;&amp;#x52A8;&amp;#x6A21;&amp;#x578B;&amp;#x4E0E;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&lt;/a&gt;&amp;#xFF0C;&amp;#x4ECA;&amp;#x5929;&amp;#x770B;&amp;#x4E2A;&amp;#x5C0F;&amp;#x4F8B;&amp;#x5B50;&amp;#x2014;&amp;#x2014;Container&amp;#x542F;&amp;#x52A8;&amp;#x6D41;&amp;#x7A0B;&amp;#xFF0C;&amp;#x5DE9;&amp;#x56FA;&amp;#x5BF9;Yarn&amp;#x5206;&amp;#x5E03;&amp;#x5F0F;&amp;#x6A21;&amp;#x578B;&amp;#x548C;&amp;#x4E8B;&amp;#x4EF6;&amp;#x9A71;&amp;#x52A8;&amp;#x5E76;&amp;#x53D1;&amp;#x6A21;&amp;#x578B;&amp;#x7684;&amp;#x7406;&amp;#x89E3;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Hadoop" scheme="https://monkeysayhi.github.io/tags/Hadoop/"/>
    
      <category term="Yarn" scheme="https://monkeysayhi.github.io/tags/Yarn/"/>
    
      <category term="分布式" scheme="https://monkeysayhi.github.io/tags/%E5%88%86%E5%B8%83%E5%BC%8F/"/>
    
  </entry>
  
  <entry>
    <title>源码|Yarn的事件驱动模型与状态机</title>
    <link href="https://monkeysayhi.github.io/2018/11/20/%E6%BA%90%E7%A0%81%7CYarn%E7%9A%84%E4%BA%8B%E4%BB%B6%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9E%8B%E4%B8%8E%E7%8A%B6%E6%80%81%E6%9C%BA/"/>
    <id>https://monkeysayhi.github.io/2018/11/20/源码|Yarn的事件驱动模型与状态机/</id>
    <published>2018-11-20T13:36:57.000Z</published>
    <updated>2018-11-20T13:36:57.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x8BFB;HDFS&#x7684;&#x6E90;&#x7801;&#x51E0;&#x4E4E;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4E0A;&#xFF0C;&#x4F46;&#x60F3;&#x8BFB;Yarn&#x7684;&#x6E90;&#x7801;&#xFF0C;&#x9700;&#x8981;&#x5148;&#x4E86;&#x89E3;Yarn&#x7684;<code>&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;</code>&#x4E0E;<code>&#x72B6;&#x6001;&#x673A;</code>&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x6E90;&#x7801;&#x7248;&#x672C;&#xFF1A;Apache Hadoop 2.6.0</p>
</blockquote>
<h1 id="&#x603B;&#x89C8;"><a href="#&#x603B;&#x89C8;" class="headerlink" title="&#x603B;&#x89C8;"></a>&#x603B;&#x89C8;</h1><p>Yarn&#x91C7;&#x7528;&#x4E86;&#x57FA;&#x4E8E;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x7684;&#x5E76;&#x53D1;&#x6A21;&#x578B;&#xFF1A;</p>
<ul>
<li>&#x6240;&#x6709;&#x72B6;&#x6001;&#x673A;&#x90FD;&#x5B9E;&#x73B0;&#x4E86;EventHandler&#x63A5;&#x53E3;&#xFF0C;&#x5F88;&#x591A;<code>&#x670D;&#x52A1;</code>&#xFF08;&#x7C7B;&#x540D;&#x901A;&#x5E38;&#x5E26;&#x6709;Service&#x540E;&#x7F00;&#xFF09;&#x4E5F;&#x5B9E;&#x73B0;&#x4E86;&#x8BE5;&#x63A5;&#x53E3;&#xFF0C;&#x5B83;&#x4EEC;&#x90FD;&#x662F;<code>&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;</code>&#x3002;</li>
<li>&#x9700;&#x8981;&#x5F02;&#x6B65;&#x5904;&#x7406;&#x7684;<code>&#x4E8B;&#x4EF6;</code>&#x7531;<code>&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;</code>&#xFF08;&#x7C7B;&#x540D;&#x901A;&#x5E38;&#x5E26;&#x6709;Dispatcher&#x540E;&#x7F00;&#xFF09;&#x7EDF;&#x4E00;<code>&#x63A5;&#x6536;</code>/<code>&#x6D3E;&#x53D1;</code>&#xFF0C;&#x9700;&#x8981;&#x540C;&#x6B65;&#x5904;&#x7406;&#x7684;&#x4E8B;&#x4EF6;&#x76F4;&#x63A5;&#x4EA4;&#x7ED9;&#x76F8;&#x5E94;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x3002;</li>
</ul>
<p>&#x793A;&#x610F;&#x56FE;&#xFF08;&#x7B80;&#x5316;&#x4E3A;&#x53EA;&#x6709;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF09;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;/&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;.png" alt="&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;"></p>
<p>&#x67D0;&#x4E9B;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x4E0D;&#x4EC5;&#x5904;&#x7406;&#x4E8B;&#x4EF6;&#xFF0C;&#x4E5F;&#x4F1A;&#x5411;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x3002;</p>
<h1 id="&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;EventHandler"><a href="#&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;EventHandler" class="headerlink" title="&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;EventHandler"></a>&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;EventHandler</h1><p>&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x5C31;&#x50CF;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x51FD;&#x6570;&#xFF0C;&#x53EA;&#x6709;&#x4E00;&#x4E2A;handle()&#x65B9;&#x6CD5;&#xFF0C;&#x4F20;&#x5165;&#x7684;&#x662F;&#x4E00;&#x4E2A;&#x5C01;&#x88C5;&#x597D;&#x7684;&#x4E8B;&#x4EF6;Event&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/**</span></div><div class="line"> * Interface for handling events of type T</div><div class="line"> *</div><div class="line"> * <span class="doctag">@param</span> &lt;T&gt; parameterized event of type T</div><div class="line"> */</div><div class="line"><span class="meta">@SuppressWarnings</span>(<span class="string">&quot;rawtypes&quot;</span>)</div><div class="line"><span class="meta">@Public</span></div><div class="line"><span class="meta">@Evolving</span></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">EventHandler</span>&lt;<span class="title">T</span> <span class="keyword">extends</span> <span class="title">Event</span>&gt; </span>{</div><div class="line"></div><div class="line">  <span class="function"><span class="keyword">void</span> <span class="title">handle</span><span class="params">(T event)</span></span>;</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x8FD9;&#x91CC;&#x4EC5;&#x7ED9;&#x51FA;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#xFF1A;</p>
<p><strong>ApplicationMasterLauncher&#x5B9E;&#x73B0;&#x4E86;EventHandler&#x63A5;&#x53E3;&#xFF0C;&#x7528;&#x4E8E;&#x5904;&#x7406;AM&#x7684;&#x542F;&#x52A8;&#x3001;&#x6E05;&#x7406;&#x4E8B;&#x4EF6;</strong>&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">ApplicationMasterLauncher</span> <span class="keyword">extends</span> <span class="title">AbstractService</span> <span class="keyword">implements</span></span></div><div class="line">    <span class="title">EventHandler</span>&lt;<span class="title">AMLauncherEvent</span>&gt; {</div><div class="line">  ...</div><div class="line">  <span class="meta">@Override</span></div><div class="line">  <span class="function"><span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span>  <span class="title">handle</span><span class="params">(AMLauncherEvent appEvent)</span> </span>{</div><div class="line">    AMLauncherEventType event = appEvent.getType();</div><div class="line">    RMAppAttempt application = appEvent.getAppAttempt();</div><div class="line">    <span class="keyword">switch</span> (event) {</div><div class="line">    <span class="keyword">case</span> LAUNCH:</div><div class="line">      launch(application);</div><div class="line">      <span class="keyword">break</span>;</div><div class="line">    <span class="keyword">case</span> CLEANUP:</div><div class="line">      cleanup(application);</div><div class="line">    <span class="keyword">default</span>:</div><div class="line">      <span class="keyword">break</span>;</div><div class="line">    }</div><div class="line">  }</div><div class="line">  ...</div><div class="line">}</div></pre></td></tr></table></figure>
<h1 id="&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;AsyncDispatcher"><a href="#&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;AsyncDispatcher" class="headerlink" title="&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;AsyncDispatcher"></a>&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;AsyncDispatcher</h1><p>Dispatcher&#x63A5;&#x53E3;&#x5B9A;&#x4E49;&#x4E86;&#x57FA;&#x672C;&#x7684;&#x4E8B;&#x4EF6;&#x6D3E;&#x53D1;&#x884C;&#x4E3A;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/**</span></div><div class="line"> * Event Dispatcher interface. It dispatches events to registered </div><div class="line"> * event handlers based on event types.</div><div class="line"> * </div><div class="line"> */</div><div class="line"><span class="meta">@SuppressWarnings</span>(<span class="string">&quot;rawtypes&quot;</span>)</div><div class="line"><span class="meta">@Public</span></div><div class="line"><span class="meta">@Evolving</span></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">Dispatcher</span> </span>{</div><div class="line"></div><div class="line">  <span class="comment">// Configuration to make sure dispatcher crashes but doesn&apos;t do system-exit in</span></div><div class="line">  <span class="comment">// case of errors. By default, it should be false, so that tests are not</span></div><div class="line">  <span class="comment">// affected. For all daemons it should be explicitly set to true so that</span></div><div class="line">  <span class="comment">// daemons can crash instead of hanging around.</span></div><div class="line">  <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String DISPATCHER_EXIT_ON_ERROR_KEY =</div><div class="line">      <span class="string">&quot;yarn.dispatcher.exit-on-error&quot;</span>;</div><div class="line"></div><div class="line">  <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">boolean</span> DEFAULT_DISPATCHER_EXIT_ON_ERROR = <span class="keyword">false</span>;</div><div class="line"></div><div class="line">  <span class="function">EventHandler <span class="title">getEventHandler</span><span class="params">()</span></span>;</div><div class="line"></div><div class="line">  <span class="function"><span class="keyword">void</span> <span class="title">register</span><span class="params">(Class&lt;? extends Enum&gt; eventType, EventHandler handler)</span></span>;</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
<p>register()&#x65B9;&#x6CD5;&#x8D1F;&#x8D23;&#x6CE8;&#x518C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF0C;getEventHandler()&#x65B9;&#x6CD5;&#x83B7;&#x5F97;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x4EE5;&#x6D3E;&#x53D1;&#x4E8B;&#x4EF6;&#x3002;</p>
<p><strong>AsyncDispatcher&#x5B9E;&#x73B0;&#x4E86;Dispatcher&#x63A5;&#x53E3;&#xFF0C;&#x901A;&#x8FC7;&#x961F;&#x5217;&#x6269;&#x5C55;&#x51FA;&#x4E86;&#x5F02;&#x6B65;&#x6D3E;&#x53D1;&#x4E8B;&#x4EF6;&#x7684;&#x884C;&#x4E3A;&#xFF08;&#x540C;&#x65F6;&#xFF0C;&#x5B83;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x670D;&#x52A1;&#xFF09;&#xFF0C;&#x901A;&#x5E38;&#x88AB;&#x79F0;&#x4E3A;&#x201C;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x201D;</strong>&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x5178;&#x578B;&#x7684;<code>&#x751F;&#x4EA7;&#x8005;-&#x6D88;&#x8D39;&#x8005;&#x6A21;&#x578B;</code>&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">AsyncDispatcher</span> <span class="keyword">extends</span> <span class="title">AbstractService</span> <span class="keyword">implements</span> <span class="title">Dispatcher</span> </span>{</div><div class="line">  ...</div><div class="line">}</div></pre></td></tr></table></figure>
<h2 id="&#x6CE8;&#x518C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;"><a href="#&#x6CE8;&#x518C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;" class="headerlink" title="&#x6CE8;&#x518C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;"></a>&#x6CE8;&#x518C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;</h2><p>AsyncDispatcher#register()&#x65B9;&#x6CD5;&#x5C06;&#x4E8C;&#x5143;&#x7EC4;<code>&lt;eventType, eventHandler&gt;</code>&#x6CE8;&#x518C;&#x5230;AsyncDispatcher#eventDispatchers&#x4E2D;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div></pre></td><td class="code"><pre><div class="line"><span class="meta">@SuppressWarnings</span>(<span class="string">&quot;unchecked&quot;</span>)</div><div class="line"><span class="meta">@Override</span></div><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">register</span><span class="params">(Class&lt;? extends Enum&gt; eventType,</span></span></div><div class="line">    EventHandler handler) {</div><div class="line">  <span class="comment">/* check to see if we have a listener registered */</span></div><div class="line">  EventHandler&lt;Event&gt; registeredHandler = (EventHandler&lt;Event&gt;)</div><div class="line">  eventDispatchers.get(eventType);</div><div class="line">  LOG.info(<span class="string">&quot;Registering &quot;</span> + eventType + <span class="string">&quot; for &quot;</span> + handler.getClass());</div><div class="line">  <span class="keyword">if</span> (registeredHandler == <span class="keyword">null</span>) {</div><div class="line">    eventDispatchers.put(eventType, handler);</div><div class="line">  } <span class="keyword">else</span> <span class="keyword">if</span> (!(registeredHandler <span class="keyword">instanceof</span> MultiListenerHandler)){</div><div class="line">    <span class="comment">/* for multiple listeners of an event add the multiple listener handler */</span></div><div class="line">    MultiListenerHandler multiHandler = <span class="keyword">new</span> MultiListenerHandler();</div><div class="line">    multiHandler.addHandler(registeredHandler);</div><div class="line">    multiHandler.addHandler(handler);</div><div class="line">    eventDispatchers.put(eventType, multiHandler);</div><div class="line">  } <span class="keyword">else</span> {</div><div class="line">    <span class="comment">/* already a multilistener, just add to it */</span></div><div class="line">    MultiListenerHandler multiHandler</div><div class="line">    = (MultiListenerHandler) registeredHandler;</div><div class="line">    multiHandler.addHandler(handler);</div><div class="line">  }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>Yarn&#x7684;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;EventType&#x90FD;&#x662F;&#x679A;&#x4E3E;&#x7C7B;&#x578B;&#xFF0C;&#x800C;eventDispatchers&#x662F;&#x4E00;&#x4E2A;&#x201C;<code>&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;-&gt;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;</code>&#x201D;&#x7684;Map&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">protected</span> <span class="keyword">final</span> Map&lt;Class&lt;? extends Enum&gt;, EventHandler&gt; eventDispatchers;</div></pre></td></tr></table></figure>
<p>&#x6CE8;&#x518C;&#x65B9;&#x6CD5;&#x652F;&#x6301;&#x6CE8;&#x518C;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x5230;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x7684;&#x6620;&#x5C04;&#xFF0C;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x4E0D;&#x8868;&#x3002;</p>
<p>&#x5982;&#x524D;&#x9762;&#x63D0;&#x5230;&#x7684;<strong>ApplicationMasterLauncher&#xFF0C;&#x5176;&#x6CE8;&#x518C;&#x7684;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x662F;AMLauncherEventType</strong>&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">applicationMasterLauncher = createAMLauncher();</div><div class="line">rmDispatcher.register(AMLauncherEventType.class,</div><div class="line">    applicationMasterLauncher);</div></pre></td></tr></table></figure>
<h2 id="&#x5904;&#x7406;&#x4E8B;&#x4EF6;"><a href="#&#x5904;&#x7406;&#x4E8B;&#x4EF6;" class="headerlink" title="&#x5904;&#x7406;&#x4E8B;&#x4EF6;"></a>&#x5904;&#x7406;&#x4E8B;&#x4EF6;</h2><p>AsyncDispatcher#getEventHandler()&#x662F;&#x5F02;&#x6B65;&#x6D3E;&#x53D1;&#x7684;&#x5173;&#x952E;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"><span class="meta">@Override</span></div><div class="line"><span class="function"><span class="keyword">public</span> EventHandler <span class="title">getEventHandler</span><span class="params">()</span> </span>{</div><div class="line">  <span class="keyword">if</span> (handlerInstance == <span class="keyword">null</span>) {</div><div class="line">    handlerInstance = <span class="keyword">new</span> GenericEventHandler();</div><div class="line">  }</div><div class="line">  <span class="keyword">return</span> handlerInstance;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x5B83;&#x770B;&#x8D77;&#x6765;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;AsyncDispatcher#handlerInstance&#xFF0C;&#x5916;&#x754C;&#x5C06;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x7684;&#x4E8B;&#x4EF6;&#x90FD;&#x4EA4;&#x7ED9;&#x5B83;&#x3002;&#x4F8B;&#x5982;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">rmNode.context.getDispatcher().getEventHandler().handle(</div><div class="line">  <span class="keyword">new</span> NodesListManagerEvent(</div><div class="line">      NodesListManagerEventType.NODE_USABLE, rmNode));</div></pre></td></tr></table></figure>
<p>&#x663E;&#x7136;&#xFF0C;<strong>AsyncDispatcher#handlerInstance&#x5BF9;&#x4E8B;&#x4EF6;&#x7684;&#x5904;&#x7406;&#x5C31;&#x662F;&#x201C;&#x63A5;&#x6536;&#x4E8B;&#x4EF6;&#xFF0C;&#x653E;&#x5165;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x201D;</strong>&#x3002;</p>
<p>&#x90A3;&#x4E48;&#xFF0C;AsyncDispatcher#handlerInstance.handle()&#x5982;&#x4F55;&#x63A5;&#x6536;&#x5404;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x4E8B;&#x4EF6;&#x5462;&#xFF1F;</p>
<p>AsyncDispatcher#handlerInstance&#x88AB;&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;&#x4E3A;&#x4E00;&#x4E2A;GenericEventHandler&#x5B9E;&#x4F8B;&#x3002;GenericEventHandler&#x662F;&#x4E00;&#x4E2A;&#x7279;&#x522B;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF0C;&#x5B83;&#x53EA;&#x8D1F;&#x8D23;&#x63A5;&#x6536;&#x4E8B;&#x4EF6;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div></pre></td><td class="code"><pre><div class="line"><span class="class"><span class="keyword">class</span> <span class="title">GenericEventHandler</span> <span class="keyword">implements</span> <span class="title">EventHandler</span>&lt;<span class="title">Event</span>&gt; </span>{</div><div class="line">  <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">handle</span><span class="params">(Event event)</span> </span>{</div><div class="line">    <span class="keyword">if</span> (blockNewEvents) {</div><div class="line">      <span class="keyword">return</span>;</div><div class="line">    }</div><div class="line">    drained = <span class="keyword">false</span>;</div><div class="line"></div><div class="line">    <span class="comment">/* all this method does is enqueue all the events onto the queue */</span></div><div class="line">    <span class="keyword">int</span> qSize = eventQueue.size();</div><div class="line">    <span class="keyword">if</span> (qSize !=<span class="number">0</span> &amp;&amp; qSize %<span class="number">1000</span> == <span class="number">0</span>) {</div><div class="line">      LOG.info(<span class="string">&quot;Size of event-queue is &quot;</span> + qSize);</div><div class="line">    }</div><div class="line">    <span class="keyword">int</span> remCapacity = eventQueue.remainingCapacity();</div><div class="line">    <span class="keyword">if</span> (remCapacity &lt; <span class="number">1000</span>) {</div><div class="line">      LOG.warn(<span class="string">&quot;Very low remaining capacity in the event-queue: &quot;</span></div><div class="line">          + remCapacity);</div><div class="line">    }</div><div class="line">    <span class="keyword">try</span> {</div><div class="line">      eventQueue.put(event);</div><div class="line">    } <span class="keyword">catch</span> (InterruptedException e) {</div><div class="line">      <span class="keyword">if</span> (!stopped) {</div><div class="line">        LOG.warn(<span class="string">&quot;AsyncDispatcher thread interrupted&quot;</span>, e);</div><div class="line">      }</div><div class="line">      <span class="keyword">throw</span> <span class="keyword">new</span> YarnRuntimeException(e);</div><div class="line">    }</div><div class="line">  };</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x975E;&#x91CD;&#x70B9;&#xFF1A;</p>
<ul>
<li>blockNewEvents&#x662F;&#x4E00;&#x4E2A;&#x5F00;&#x5173;&#xFF0C;&#x5728;AsyncDispatcher&#x5173;&#x95ED;&#x8FC7;&#x7A0B;&#x4E2D;&#x88AB;&#x7F6E;&#x4E3A;true&#xFF0C;&#x65B0;&#x6765;&#x7684;&#x4E8B;&#x4EF6;&#x4F1A;&#x88AB;GenericEventHandler&#x4E22;&#x5F03;&#x3002;</li>
<li>drained&#x6307;&#x793A;&#x961F;&#x5217;&#x662F;&#x5426;&#x6392;&#x7A7A;&#xFF0C;&#x961F;&#x5217;&#x7A7A;&#x65F6;&#x88AB;&#x7F6E;&#x4E3A;true&#x3002;</li>
<li>9-17&#x884C;&#x7528;&#x4E8E;&#x6253;&#x5370;&#x961F;&#x5217;&#x7684;&#x72B6;&#x6001;&#x3002;</li>
</ul>
<p>&#x6574;&#x4E2A;GenericEventHandler#handle()&#x7684;&#x6838;&#x5FC3;&#x5728;19&#x884C;&#xFF1A;&#x5C06;&#x4E8B;&#x4EF6;&#x653E;&#x5165;&#x4E8B;&#x4EF6;&#x961F;&#x5217;AsyncDispatcher#eventQueue&#x4E2D;&#x3002;</p>
<p>AsyncDispatcher#eventQueue&#x662F;&#x4E00;&#x4E2A;BlockingQueue&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">private</span> <span class="keyword">final</span> BlockingQueue&lt;Event&gt; eventQueue;</div></pre></td></tr></table></figure>
<blockquote>
<p>BlockingQueue&#x662F;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#x963B;&#x585E;&#x961F;&#x5217;&#xFF0C;&#x5E38;&#x7528;&#x4E8E;&#x751F;&#x4EA7;&#x8005;-&#x6D88;&#x8D39;&#x8005;&#x6A21;&#x578B;&#x4E2D;&#x3002;</p>
</blockquote>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x8C03;&#x7528;AsyncDispatcher#getEventHandler()#handle()&#x65B9;&#x6CD5;&#x7684;&#x7EBF;&#x7A0B;&#x76F8;&#x5F53;&#x4E8E;&#x751F;&#x4EA7;&#x8005;&#xFF0C;&#x751F;&#x4EA7;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x540E;&#x80FD;&#x591F;&#x7ACB;&#x5373;&#x8FD4;&#x56DE;&#x3002;</p>
<p>&#x90A3;&#x4E48;&#xFF0C;AsyncDispatcher#eventQueue&#x4E2D;&#x7684;&#x4E8B;&#x4EF6;&#x4F55;&#x65F6;&#x5904;&#x7406;&#x5462;&#xFF1F;</p>
<p>AsyncDispatcher#eventQueue.take()&#x65B9;&#x6CD5;&#x4ECE;&#x961F;&#x5217;&#x4E2D;&#x83B7;&#x5F97;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#xFF0C;&#x5176;&#x4EC5;&#x5728;AsyncDispatcher#createThread()&#x65B9;&#x6CD5;&#x4E2D;&#x88AB;&#x8C03;&#x7528;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;/&#x4F7F;&#x7528;eventQueue_take.png" alt="&#x4F7F;&#x7528;eventQueue_take"></p>
<p>AsyncDispatcher#createThread()&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x6765;&#x5F02;&#x6B65;&#x7684;&#x5904;&#x7406;&#x4E8B;&#x4EF6;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div></pre></td><td class="code"><pre><div class="line"><span class="function">Runnable <span class="title">createThread</span><span class="params">()</span> </span>{</div><div class="line">  <span class="keyword">return</span> <span class="keyword">new</span> Runnable() {</div><div class="line">    <span class="meta">@Override</span></div><div class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">run</span><span class="params">()</span> </span>{</div><div class="line">      <span class="keyword">while</span> (!stopped &amp;&amp; !Thread.currentThread().isInterrupted()) {</div><div class="line">        drained = eventQueue.isEmpty();</div><div class="line">        <span class="comment">// blockNewEvents is only set when dispatcher is draining to stop,</span></div><div class="line">        <span class="comment">// adding this check is to avoid the overhead of acquiring the lock</span></div><div class="line">        <span class="comment">// and calling notify every time in the normal run of the loop.</span></div><div class="line">        <span class="keyword">if</span> (blockNewEvents) {</div><div class="line">          <span class="keyword">synchronized</span> (waitForDrained) {</div><div class="line">            <span class="keyword">if</span> (drained) {</div><div class="line">              waitForDrained.notify();</div><div class="line">            }</div><div class="line">          }</div><div class="line">        }</div><div class="line">        Event event;</div><div class="line">        <span class="keyword">try</span> {</div><div class="line">          event = eventQueue.take();</div><div class="line">        } <span class="keyword">catch</span>(InterruptedException ie) {</div><div class="line">          <span class="keyword">if</span> (!stopped) {</div><div class="line">            LOG.warn(<span class="string">&quot;AsyncDispatcher thread interrupted&quot;</span>, ie);</div><div class="line">          }</div><div class="line">          <span class="keyword">return</span>;</div><div class="line">        }</div><div class="line">        <span class="keyword">if</span> (event != <span class="keyword">null</span>) {</div><div class="line">          dispatch(event);</div><div class="line">        }</div><div class="line">      }</div><div class="line">    }</div><div class="line">  };</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x8BE5;&#x7EBF;&#x7A0B;&#x662F;&#x5178;&#x578B;&#x7684;<code>&#x957F;&#x670D;&#x52A1;&#x7EBF;&#x7A0B;</code>&#xFF1A;&#x4E3B;&#x4F53;&#x662F;&#x4E00;&#x4E2A;&#x5FAA;&#x73AF;&#xFF0C;&#x6301;&#x7EED;&#x63D0;&#x4F9B;&#x670D;&#x52A1;&#x3002;19&#x884C;&#x4ECE;AsyncDispatcher#eventQueue&#x4E2D;&#x53D6;&#x51FA;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x3002;27&#x884C;&#x8C03;&#x7528;AsyncDispatcher#dispatch()&#xFF0C;&#x5C06;&#x4E8B;&#x4EF6;event&#x6D3E;&#x53D1;&#x7ED9;&#x5BF9;&#x5E94;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;EventHandler&#x5904;&#x7406;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div></pre></td><td class="code"><pre><div class="line"><span class="meta">@SuppressWarnings</span>(<span class="string">&quot;unchecked&quot;</span>)</div><div class="line"><span class="function"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">dispatch</span><span class="params">(Event event)</span> </span>{</div><div class="line">  <span class="comment">//all events go thru this loop</span></div><div class="line">  <span class="keyword">if</span> (LOG.isDebugEnabled()) {</div><div class="line">    LOG.debug(<span class="string">&quot;Dispatching the event &quot;</span> + event.getClass().getName() + <span class="string">&quot;.&quot;</span></div><div class="line">        + event.toString());</div><div class="line">  }</div><div class="line"></div><div class="line">  Class&lt;? extends Enum&gt; type = event.getType().getDeclaringClass();</div><div class="line"></div><div class="line">  <span class="keyword">try</span>{</div><div class="line">    EventHandler handler = eventDispatchers.get(type);</div><div class="line">    <span class="keyword">if</span>(handler != <span class="keyword">null</span>) {</div><div class="line">      handler.handle(event);</div><div class="line">    } <span class="keyword">else</span> {</div><div class="line">      <span class="keyword">throw</span> <span class="keyword">new</span> Exception(<span class="string">&quot;No handler for registered for &quot;</span> + type);</div><div class="line">    }</div><div class="line">  } <span class="keyword">catch</span> (Throwable t) {</div><div class="line">    <span class="comment">//TODO Maybe log the state of the queue</span></div><div class="line">    LOG.fatal(<span class="string">&quot;Error in dispatcher thread&quot;</span>, t);</div><div class="line">    <span class="comment">// If serviceStop is called, we should exit this thread gracefully.</span></div><div class="line">    <span class="keyword">if</span> (exitOnDispatchException</div><div class="line">        &amp;&amp; (ShutdownHookManager.get().isShutdownInProgress()) == <span class="keyword">false</span></div><div class="line">        &amp;&amp; stopped == <span class="keyword">false</span>) {</div><div class="line">      LOG.info(<span class="string">&quot;Exiting, bbye..&quot;</span>);</div><div class="line">      System.exit(-<span class="number">1</span>);</div><div class="line">    }</div><div class="line">  }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>12&#x884C;&#x6839;&#x636E;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#xFF0C;&#x4ECE;AsyncDispatcher#eventDispatchers&#x4E2D;&#x53D6;&#x5F97;&#x5BF9;&#x5E94;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;handler&#x3002;14&#x884C;&#x6267;&#x884C;handler.handle()&#x5904;&#x7406;&#x4E8B;&#x4EF6;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x77E5;&#x9053;&#xFF0C;AsyncDispatcher#createThread()&#x521B;&#x5EFA;&#x7684;&#x7EBF;&#x7A0B;&#xFF08;&#x542F;&#x52A8;&#x540E;&#xFF09;&#x76F8;&#x5F53;&#x4E8E;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x591A;&#x7EBF;&#x7A0B;&#x5404;&#x81EA;&#x540C;&#x6B65;&#x5904;&#x7406;&#x4E8B;&#x4EF6;&#x3002;&#x90A3;&#x4E48;&#xFF0C;&#x8FD9;&#x4E2A;&#x957F;&#x670D;&#x52A1;&#x7EBF;&#x7A0B;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x542F;&#x52A8;&#x7684;&#x5462;&#xFF1F;</p>
<p>AsyncDispatcher#createThread()&#x4EC5;&#x5728;AsyncDispatcher#serviceStart()&#x4E2D;&#x88AB;&#x8C03;&#x7528;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;/&#x4F7F;&#x7528;AsyncDispatcher_createThread.png" alt="&#x4F7F;&#x7528;AsyncDispatcher_createThread"></p>
<p>AsyncDispatcher#serviceStart()&#x5728;&#x670D;&#x52A1;&#x542F;&#x52A8;&#x65F6;&#x8C03;&#x7528;&#xFF0C;&#x901A;&#x8FC7;AsyncDispatcher#createThread()&#x65B9;&#x6CD5;&#x521B;&#x5EFA;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x7EBF;&#x7A0B;eventHandlingThread&#xFF0C;&#x5E76;&#x542F;&#x52A8;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line"><span class="meta">@Override</span></div><div class="line"><span class="function"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">serviceStart</span><span class="params">()</span> <span class="keyword">throws</span> Exception </span>{</div><div class="line">  <span class="comment">//start all the components</span></div><div class="line">  <span class="keyword">super</span>.serviceStart();</div><div class="line">  eventHandlingThread = <span class="keyword">new</span> Thread(createThread());</div><div class="line">  eventHandlingThread.setName(<span class="string">&quot;AsyncDispatcher event handler&quot;</span>);</div><div class="line">  eventHandlingThread.start();</div><div class="line">}</div></pre></td></tr></table></figure>
<h2 id="&#x5C0F;&#x95EE;&#x9898;"><a href="#&#x5C0F;&#x95EE;&#x9898;" class="headerlink" title="&#x5C0F;&#x95EE;&#x9898;"></a>&#x5C0F;&#x95EE;&#x9898;</h2><p>&#x7ED3;&#x5408;AsyncDispatcher#createThread()&#x65B9;&#x6CD5;&#x53EF;&#x77E5;&#xFF0C;AsyncDispatcher&#x4E2D;&#x4EC5;&#x6709;&#x4E00;&#x4E2A;&#x6D88;&#x8D39;&#x8005;&#x7EBF;&#x7A0B;&#xFF0C;&#x4E14;&#x8BE5;&#x6D88;&#x8D39;&#x8005;&#x7EBF;&#x7A0B;&#x5728;&#x5FAA;&#x73AF;&#x4E2D;&#x540C;&#x6B65;&#x5904;&#x7406;&#x4E8B;&#x4EF6;&#x3002;</p>
<p>&#x6211;&#x4E0D;&#x592A;&#x7406;&#x89E3;&#x8FD9;&#x6837;&#x7684;&#x8BBE;&#x8BA1;&#xFF1A;&#x5982;&#x679C;&#x5B9E;&#x9645;&#x89C2;&#x6D4B;&#x5F97;&#x77E5;&#x77ED;&#x65F6;&#x95F4;&#x5185;&#x4EA7;&#x751F;&#x7684;&#x4E8B;&#x4EF6;&#x4E0D;&#x591A;&#xFF0C;&#x6CA1;&#x5FC5;&#x8981;&#x5E76;&#x53D1;&#x6D88;&#x8D39;&#xFF0C;&#x90A3;&#x4E48;&#x786E;&#x5B9E;&#x4E0D;&#x9700;&#x8981;&#x591A;&#x6D88;&#x8D39;&#x8005;&#xFF1B;&#x4F46;<strong>&#x5982;&#x679C;&#x4E8B;&#x4EF6;&#x8FC7;&#x591A;&#xFF0C;&#x6216;&#x67D0;&#x4E8B;&#x4EF6;&#x7684;&#x5904;&#x7406;&#x5341;&#x5206;&#x8017;&#x65F6;&#xFF0C;&#x540C;&#x6B65;&#x5904;&#x7406;&#x4F1A;&#x8BA9;&#x7CFB;&#x7EDF;&#x7684;&#x541E;&#x5410;&#x91CF;&#x77AC;&#x95F4;&#x6389;&#x4E0B;&#x53BB;</strong>&#x3002;</p>
<blockquote>
<p>20180307&#xFF1A;</p>
<p>&#x73B0;&#x5728;&#x7406;&#x89E3;&#x4E86;&#x4E00;&#x90E8;&#x5206;&#x8BBE;&#x8BA1;&#x8003;&#x8651;&#xFF1A;&#x5728;<strong>&#x8BBE;&#x8BA1;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x65F6;&#xFF0C;&#x4E0D;&#x5E94;&#x8BE5;&#x5728;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x903B;&#x8F91;&#x4E2D;&#x5305;&#x542B;&#x8017;&#x65F6;&#x64CD;&#x4F5C;&#xFF0C;&#x800C;&#x5E94;&#x8BE5;&#x8BA9;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x4EC5;&#x5B8C;&#x6210;&#x57FA;&#x672C;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x903B;&#x8F91;</strong>&#x3002;&#x5982;&#x679C;&#x9700;&#x8981;&#x8017;&#x65F6;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x5219;&#x4EA4;&#x7ED9;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5F02;&#x6B65;&#x5B8C;&#x6210;&#xFF0C;&#x6709;&#x5FC5;&#x8981;&#x7684;&#x8BDD;&#xFF0C;&#x5728;&#x5B8C;&#x6210;&#x540E;&#x518D;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x8FDB;&#x884C;&#x4E0B;&#x4E00;&#x6B65;&#x8F6C;&#x6362;&#x3002;&#x4F8B;&#x5982;kill app&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5BF9;&#x5E94;&#x4E0B;&#x8FF0;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#xFF1A;</p>
<p><code>RUNNING -&gt; KILLING -&gt; FINISHED</code></p>
<p>&#x8981;kill&#x4E00;&#x4E2A;app&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x8BA9;RMApp&#x7531;RUNNING&#x72B6;&#x6001;&#x76F4;&#x63A5;&#x8F6C;&#x5230;FINISHED&#x72B6;&#x6001;&#xFF0C;&#x800C;&#x8981;&#x5728;&#x4E2D;&#x95F4;&#x4FDD;&#x6301;&#x4E00;&#x4E2A;KILLING&#x72B6;&#x6001;&#x2014;&#x2014;&#x4FDD;&#x6301;KILLING&#x72B6;&#x6001;&#x7684;&#x671F;&#x95F4;&#xFF0C;&#x7531;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5B8C;&#x6210;&#x8017;&#x65F6;&#x7684;kill&#x903B;&#x8F91;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x53D1;&#x9001;&#x76F8;&#x5173;&#x4E8B;&#x4EF6;&#xFF0C;&#x8BA9;RMApp&#x8F6C;&#x6362;&#x5230;&#x6700;&#x7EC8;&#x7684;FINISHED&#x72B6;&#x6001;&#x3002;</p>
<p><strong>&#x4F46;&#x5982;&#x679C;&#x4E8B;&#x4EF6;&#x8FC7;&#x591A;&#xFF0C;&#x90A3;&#x4E48;&#x5355;&#x7EAF;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x903B;&#x8F91;&#x4E5F;&#x80FD;&#x591F;&#x628A;&#x4E00;&#x4E2A;cpu&#x6253;&#x6EE1;&#xFF0C;&#x6B64;&#x5904;&#x7684;&#x540C;&#x6B65;&#x5904;&#x7406;&#x4F9D;&#x65E7;&#x662F;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x6027;&#x80FD;&#x74F6;&#x9888;</strong>&#x3002;&#x5177;&#x4F53;&#x591A;&#x5927;&#x624D;&#x80FD;&#x6253;&#x6EE1;&#x5462;&#xFF1F;&#x5F97;&#x597D;&#x597D;&#x4F30;&#x8BA1;&#x4E00;&#x56DE;&#x4E86;&#xFF0C;&#x6682;&#x4E14;&#x653E;&#x4E0B;&#x3002;</p>
</blockquote>
<h1 id="&#x72B6;&#x6001;&#x673A;"><a href="#&#x72B6;&#x6001;&#x673A;" class="headerlink" title="&#x72B6;&#x6001;&#x673A;"></a>&#x72B6;&#x6001;&#x673A;</h1><p>&#x5173;&#x4E8E;Yarn&#x4E2D;&#x72B6;&#x6001;&#x673A;&#x7684;&#x5185;&#x5BB9;&#x4E0D;&#x591A;&#x8BB2;&#xFF0C;App&#x3001;AppAttempt&#x3001;Container&#x3001;Node&#x7B49;&#x8BB8;&#x591A;&#x5B9E;&#x4F53;&#x7684;&#x4F7F;&#x7528;&#x548C;&#x7BA1;&#x7406;&#x90FD;&#x4F9D;&#x8D56;&#x4E8E;&#x72B6;&#x6001;&#x673A;&#xFF0C;&#x72B6;&#x6001;&#x673A;&#x4E5F;&#x662F;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x3002;&#x4E8B;&#x4EF6;&#x4F1A;&#x89E6;&#x53D1;&#x72B6;&#x6001;&#x673A;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#xFF0C;&#x5373;&#xFF0C;<strong>&#x72B6;&#x6001;&#x673A;&#x5BF9;&#x4E8B;&#x4EF6;&#x7684;&#x5904;&#x7406;&#x662F;&#x201C;&#x6267;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x201D;</strong>&#xFF08;&#x9690;&#x542B;&#x4E86;&#x201C;&#x6839;&#x636E;&#x5F00;&#x59CB;&#x72B6;&#x6001;&#x548C;&#x4E8B;&#x4EF6;&#x9009;&#x62E9;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x201D;&#x7684;&#x8FC7;&#x7A0B;&#xFF09;&#x3002;&#x4E8B;&#x4EF6;&#x53EF;&#x4EE5;&#x4EA4;&#x7531;&#x4E2D;&#x592E;&#x4E00;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x5F02;&#x6B65;&#x5904;&#x7406;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4EA4;&#x7531;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x5904;&#x7406;&#x3002;</p>
<p>&#x4EE5;RMNodeImpl&#x4E3A;&#x4F8B;&#x8BB2;&#x89E3;&#x3002;</p>
<p>RMNodeImpl&#x88AB;RM&#x7528;&#x6765;&#x8FFD;&#x8E2A;NodeManager&#x7684;&#x72B6;&#x6001;&#x3002;<br>&#x5B9E;&#x73B0;&#x4E86;EventHandler&#x63A5;&#x53E3;&#xFF0C;&#x662F;&#x4E2A;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">RMNodeImpl</span> <span class="keyword">implements</span> <span class="title">RMNode</span>, <span class="title">EventHandler</span>&lt;<span class="title">RMNodeEvent</span>&gt; </span>{</div><div class="line">  ...</div><div class="line">}</div></pre></td></tr></table></figure>
<h2 id="&#x6CE8;&#x518C;&#x72B6;&#x6001;&#x8F6C;&#x6362;"><a href="#&#x6CE8;&#x518C;&#x72B6;&#x6001;&#x8F6C;&#x6362;" class="headerlink" title="&#x6CE8;&#x518C;&#x72B6;&#x6001;&#x8F6C;&#x6362;"></a>&#x6CE8;&#x518C;&#x72B6;&#x6001;&#x8F6C;&#x6362;</h2><p>&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x7531;&#x6210;&#x5458;&#x53D8;&#x91CF;stateMachine&#x7BA1;&#x7406;&#xFF0C;&#x6210;&#x5458;&#x53D8;&#x91CF;stateMachineFactory&#x7528;&#x6765;&#x6CE8;&#x518C;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#xFF08;addTransition()&#xFF09;&#x5E76;&#x751F;&#x6210;&#x72B6;&#x6001;&#x673A;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div></pre></td><td class="code"><pre><div class="line">...</div><div class="line"><span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> StateMachineFactory&lt;RMNodeImpl,</div><div class="line">                                         NodeState,</div><div class="line">                                         RMNodeEventType,</div><div class="line">                                         RMNodeEvent&gt; stateMachineFactory </div><div class="line">               = <span class="keyword">new</span> StateMachineFactory&lt;RMNodeImpl,</div><div class="line">                                         NodeState,</div><div class="line">                                         RMNodeEventType,</div><div class="line">                                         RMNodeEvent&gt;(NodeState.NEW)</div><div class="line"></div><div class="line">   <span class="comment">//Transitions from NEW state</span></div><div class="line">   .addTransition(NodeState.NEW, NodeState.RUNNING, </div><div class="line">       RMNodeEventType.STARTED, <span class="keyword">new</span> AddNodeTransition())</div><div class="line">   .addTransition(NodeState.NEW, NodeState.NEW,</div><div class="line">       RMNodeEventType.RESOURCE_UPDATE, </div><div class="line">       <span class="keyword">new</span> UpdateNodeResourceWhenUnusableTransition())</div><div class="line"></div><div class="line">   <span class="comment">//Transitions from RUNNING state</span></div><div class="line">   .addTransition(NodeState.RUNNING,</div><div class="line">       EnumSet.of(NodeState.RUNNING, NodeState.UNHEALTHY),</div><div class="line">       RMNodeEventType.STATUS_UPDATE, <span class="keyword">new</span> StatusUpdateWhenHealthyTransition())</div><div class="line">   .addTransition(NodeState.RUNNING, NodeState.DECOMMISSIONED,</div><div class="line">       RMNodeEventType.DECOMMISSION,</div><div class="line">       <span class="keyword">new</span> DeactivateNodeTransition(NodeState.DECOMMISSIONED))</div><div class="line">   .addTransition(NodeState.RUNNING, NodeState.LOST,</div><div class="line">       RMNodeEventType.EXPIRE,</div><div class="line">       <span class="keyword">new</span> DeactivateNodeTransition(NodeState.LOST))</div><div class="line">   .addTransition(NodeState.RUNNING, NodeState.REBOOTED,</div><div class="line">       RMNodeEventType.REBOOTING,</div><div class="line">       <span class="keyword">new</span> DeactivateNodeTransition(NodeState.REBOOTED))</div><div class="line">   ...</div><div class="line"></div><div class="line">...</div><div class="line"><span class="keyword">private</span> <span class="keyword">final</span> StateMachine&lt;NodeState, RMNodeEventType,</div><div class="line">                           RMNodeEvent&gt; stateMachine;</div><div class="line">...</div></pre></td></tr></table></figure>
<blockquote>
<p>&#x4EE5;&#x4E0B;&#x5C06;&#x6301;&#x6709;stateMachine&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x76F4;&#x63A5;&#x79F0;&#x4E3A;&#x201C;&#x72B6;&#x6001;&#x673A;&#x201D;&#x3002;</p>
</blockquote>
<p>Transition&#x5B9A;&#x4E49;&#x4E86;&#x201C;&#x4ECE;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x201D;&#x7684;&#x884C;&#x4E3A;&#xFF0C;&#x7531;&#x8F6C;&#x6362;&#x64CD;&#x4F5C;&#x3001;&#x5F00;&#x59CB;&#x72B6;&#x6001;&#x3001;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x3001;&#x4E8B;&#x4EF6;&#x7EC4;&#x6210;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">private</span> <span class="class"><span class="keyword">interface</span> <span class="title">Transition</span>&lt;<span class="title">OPERAND</span>, <span class="title">STATE</span> <span class="keyword">extends</span> <span class="title">Enum</span>&lt;<span class="title">STATE</span>&gt;,</span></div><div class="line">        <span class="title">EVENTTYPE</span> <span class="keyword">extends</span> <span class="title">Enum</span>&lt;<span class="title">EVENTTYPE</span>&gt;, <span class="title">EVENT</span>&gt; {</div><div class="line">  <span class="function">STATE <span class="title">doTransition</span><span class="params">(OPERAND operand, STATE oldState,</span></span></div><div class="line">                     EVENT event, EVENTTYPE eventType);</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x540C;&#x65F6;&#xFF0C;<strong>&#x8BE5;&#x72B6;&#x6001;&#x673A;&#x6D89;&#x53CA;&#x7684;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x5728;ResourceManager#serviceInit()&#x65B9;&#x6CD5;&#x4E2D;&#x5B8C;&#x6210;&#x6CE8;&#x518C;</strong>&#x3002;</p>
<h3 id="&#x53EF;&#x89C6;&#x5316;"><a href="#&#x53EF;&#x89C6;&#x5316;" class="headerlink" title="&#x53EF;&#x89C6;&#x5316;"></a>&#x53EF;&#x89C6;&#x5316;</h3><p>&#x4E3A;&#x65B9;&#x4FBF;&#x53EF;&#x89C6;&#x5316;&#xFF0C;Yarn&#x6E90;&#x7801;&#x4E2D;&#x5B9E;&#x73B0;&#x4E86;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x673A;&#x53EF;&#x89C6;&#x5316;&#x5DE5;&#x5177;&#xFF0C;&#x53EF;&#x53C2;&#x7167;<a href="https://issues.apache.org/jira/browse/MAPREDUCE-2930" target="_blank" rel="external">Generate state graph from the State Machine Definition</a>&#x5FEB;&#x901F;&#x5F97;&#x5230;&#x6240;&#x9700;&#x7684;&#x72B6;&#x6001;&#x673A;&#x56FE;&#x7247;&#xFF0C;&#x6216;&#x53C2;&#x7167;<a href="https://blog.csdn.net/bigdatahappy/article/details/39932175" target="_blank" rel="external">yarn&#x72B6;&#x6001;&#x673A;&#x53EF;&#x89C6;&#x5316;</a>&#x4E00;&#x6B21;&#x6027;&#x5F97;&#x5230;&#x6240;&#x6709;&#x72B6;&#x6001;&#x673A;&#x56FE;&#x7247;&#x3002;RMNode&#x72B6;&#x6001;&#x673A;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6E90;&#x7801;|Yarn&#x7684;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x6A21;&#x578B;&#x4E0E;&#x72B6;&#x6001;&#x673A;/RMNode.png" alt="RMNode"></p>
<h2 id="&#x6267;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;"><a href="#&#x6267;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;" class="headerlink" title="&#x6267;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;"></a>&#x6267;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;</h2><p>&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x673A;&#x6D89;&#x53CA;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x975E;&#x5E38;&#x591A;&#xFF0C;&#x4F46;&#x5F80;&#x5F80;&#x53EA;&#x6D89;&#x53CA;&#x4E00;&#x79CD;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#xFF08;&#x4E24;&#x79CD;&#x53CA;&#x4EE5;&#x4E0A;&#x7684;&#x6BD4;&#x8F83;&#x5C11;&#xFF09;&#x3002;RMNodeImpl&#x662F;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF0C;&#x5176;&#x5904;&#x7406;&#x5DE5;&#x4F5C;&#x5C31;&#x662F;&#x6267;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x3002;&#x4F46;&#x8BE5;&#x5982;&#x4F55;&#x6839;&#x636E;&#x4E00;&#x79CD;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#xFF0C;&#x51B3;&#x5B9A;&#x8981;&#x91C7;&#x7528;&#x54EA;&#x4E2A;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x5462;&#xFF1F;<br>&#x6700;&#x7B80;&#x5355;&#x7684;&#x601D;&#x8DEF;&#x662F;&#x5199;&#x4E00;&#x5806;if&#x8BED;&#x53E5;&#xFF0C;&#x6216;&#x8005;switch&#x5927;&#x6CD5;&#x597D;&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x5BF9;&#x4E8E;&#x5355;&#x7EAF;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF08;&#x5404;&#x4E8B;&#x4EF6;&#x4E4B;&#x524D;&#x662F;&#x72EC;&#x7ACB;&#x3001;&#x5E73;&#x884C;&#x7684;&#xFF09;&#xFF0C;&#x4E00;&#x822C;&#x4E5F;&#x662F;swtich&#x7B80;&#x5355;&#x4E86;&#x4E8B;&#xFF0C;&#x5982;&#x524D;&#x9762;&#x63D0;&#x8FC7;&#x7684;ApplicationMasterLauncher&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">ApplicationMasterLauncher</span> <span class="keyword">extends</span> <span class="title">AbstractService</span> <span class="keyword">implements</span></span></div><div class="line">    <span class="title">EventHandler</span>&lt;<span class="title">AMLauncherEvent</span>&gt; {</div><div class="line">  ...</div><div class="line">  <span class="meta">@Override</span></div><div class="line">  <span class="function"><span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span>  <span class="title">handle</span><span class="params">(AMLauncherEvent appEvent)</span> </span>{</div><div class="line">    AMLauncherEventType event = appEvent.getType();</div><div class="line">    RMAppAttempt application = appEvent.getAppAttempt();</div><div class="line">    <span class="keyword">switch</span> (event) {</div><div class="line">    <span class="keyword">case</span> LAUNCH:</div><div class="line">      launch(application);</div><div class="line">      <span class="keyword">break</span>;</div><div class="line">    <span class="keyword">case</span> CLEANUP:</div><div class="line">      cleanup(application);</div><div class="line">    <span class="keyword">default</span>:</div><div class="line">      <span class="keyword">break</span>;</div><div class="line">    }</div><div class="line">  }</div><div class="line">  ...</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x4F46;<strong>&#x5BF9;&#x4E8E;&#x72B6;&#x6001;&#x673A;&#xFF0C;&#x7531;&#x4E8E;&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x5728;&#x72B6;&#x6001;&#x673A;&#x4E2D;&#x4FDD;&#x5B58;&#x4E86;&#x5168;&#x90E8;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#xFF0C;stateMachineFactory&#x521B;&#x5EFA;&#x7684;stateMachine&#x5C31;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x6839;&#x636E;&#x5F53;&#x524D;&#x72B6;&#x6001;&#x3001;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;</strong>&#xFF0C;&#x4E8E;&#x662F;RMNodeImpl&#x7B49;&#x72B6;&#x6001;&#x673A;&#x7684;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x53D8;&#x5F97;&#x5F02;&#x5E38;&#x7B80;&#x5355;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">handle</span><span class="params">(RMNodeEvent event)</span> </span>{</div><div class="line">  LOG.debug(<span class="string">&quot;Processing &quot;</span> + event.getNodeId() + <span class="string">&quot; of type &quot;</span> + event.getType());</div><div class="line">  <span class="keyword">try</span> {</div><div class="line">    writeLock.lock();</div><div class="line">    NodeState oldState = getState();</div><div class="line">    <span class="keyword">try</span> {</div><div class="line">       stateMachine.doTransition(event.getType(), event);</div><div class="line">    } <span class="keyword">catch</span> (InvalidStateTransitonException e) {</div><div class="line">      LOG.error(<span class="string">&quot;Can&apos;t handle this event at current state&quot;</span>, e);</div><div class="line">      LOG.error(<span class="string">&quot;Invalid event &quot;</span> + event.getType() + </div><div class="line">          <span class="string">&quot; on Node  &quot;</span> + <span class="keyword">this</span>.nodeId);</div><div class="line">    }</div><div class="line">    <span class="keyword">if</span> (oldState != getState()) {</div><div class="line">      LOG.info(nodeId + <span class="string">&quot; Node Transitioned from &quot;</span> + oldState + <span class="string">&quot; to &quot;</span></div><div class="line">               + getState());</div><div class="line">    }</div><div class="line">  }</div><div class="line">  </div><div class="line">  <span class="keyword">finally</span> {</div><div class="line">    writeLock.unlock();</div><div class="line">  }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x9700;&#x8981;&#x4FEE;&#x6539;&#x72B6;&#x6001;&#x673A;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x4E3A;&#x907F;&#x514D;&#x7ADE;&#x6001;&#x6761;&#x4EF6;&#xFF0C;&#x9996;&#x5148;&#x8981;&#x83B7;&#x5F97;&#x5199;&#x9501;&#xFF1B;7&#x884C;&#x8BA9;stateMachine&#x81EA;&#x884C;&#x9009;&#x62E9;Transition&#x5E76;&#x8FDB;&#x884C;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x3002;</p>
<h1 id="&#x603B;&#x7ED3;"><a href="#&#x603B;&#x7ED3;" class="headerlink" title="&#x603B;&#x7ED3;"></a>&#x603B;&#x7ED3;</h1><p>&#x8981;&#x9605;&#x8BFB;Yarn&#x7684;&#x6E90;&#x7801;&#xFF0C;&#x5FC5;&#x987B;&#x4E86;&#x89E3;&#x8FD9;&#x79CD;&#x57FA;&#x4E8E;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x7684;&#x5E76;&#x53D1;&#x6A21;&#x578B;&#xFF08;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;+&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#xFF09;&#x548C;&#x72B6;&#x6001;&#x673A;&#x3002;Yarn&#x4E2D;&#xFF0C;&#x72B6;&#x6001;&#x673A;&#x88AB;&#x5B9E;&#x73B0;&#x4E3A;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x662F;&#x5F88;&#x81EA;&#x7136;&#x7684;&#xFF0C;&#x90E8;&#x5206;&#x670D;&#x52A1;&#x4E5F;&#x88AB;&#x5B9E;&#x73B0;&#x4E3A;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#xFF0C;&#x5982;ApplicationMasterLauncher&#x7B49;&#x3002;&#x901A;&#x5E38;&#xFF0C;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x5668;&#x7684;&#x884C;&#x4E3A;&#x7C7B;&#x4F3C;&#x4E8E;&#x6D88;&#x606F;&#x961F;&#x5217;&#x7684;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x800C;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x7C7B;&#x4F3C;&#x4E8E;&#x6D88;&#x606F;&#x961F;&#x5217;&#x3002;</p>
<blockquote>
<p>&#x8FD8;&#x6709;&#x51E0;&#x70B9;&#x9700;&#x8981;&#x6CE8;&#x610F;&#xFF1A;</p>
<ul>
<li>RM&#x4E0A;&#x4E0D;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#xFF0C;&#x8981;&#x6CE8;&#x610F;&#x533A;&#x5206;&#x3002;NM&#x540C;&#x7406;&#x3002;</li>
<li>&#x5BF9;&#x4E8E;&#x72B6;&#x6001;&#x673A;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x76F4;&#x63A5;&#x5C06;<code>&lt;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;, &#x72B6;&#x6001;&#x673A;&gt;</code>&#x6CE8;&#x518C;&#x5230;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#xFF0C;&#x800C;&#x662F;&#x6CE8;&#x518C;<code>&lt;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;, &#x4E8B;&#x4EF6;&#x6D3E;&#x53D1;&#x5668;&gt;</code>&#x3002;&#x4E8B;&#x4EF6;&#x6D3E;&#x53D1;&#x5668;&#x8D1F;&#x8D23;&#x5C06;&#x4E8B;&#x4EF6;&#x6D3E;&#x53D1;&#x7ED9;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x673A;&#x5B9E;&#x4F8B;&#x3002;</li>
<li>&#x5BF9;&#x4E8E;&#x72B6;&#x6001;&#x673A;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4E8B;&#x4EF6;&#xFF0C;&#x5927;&#x90E8;&#x5206;&#x573A;&#x666F;&#x4E0B;&#x662F;&#x4EA4;&#x7531;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x6D3E;&#x53D1;&#x7684;&#xFF0C;&#x4F46;&#x67D0;&#x4E9B;&#x573A;&#x666F;&#x4E0B;&#x4E5F;&#x4F1A;&#x76F4;&#x63A5;&#x4EA4;&#x7531;&#x72B6;&#x6001;&#x673A;&#x5B9E;&#x4F8B;&#x3002;</li>
<li>Yarn&#x4E2D;&#x7684;&#x6E90;&#x7801;&#x5E76;&#x4E0D;&#x662F;&#x7531;&#x4E00;&#x4E2A;&#x4EBA;&#xFF0C;&#x5728;&#x77ED;&#x65F6;&#x95F4;&#x5185;&#x5B8C;&#x6210;&#x7684;&#x3002;&#x5176;&#x4E2D;&#x6709;&#x5404;&#x79CD;&#x5F15;&#x7528;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x6709;&#x4E9B;&#x662F;&#x5C06;&#x5176;&#x4F5C;&#x4E3A;&#x6210;&#x5458;&#x53D8;&#x91CF;&#xFF0C;&#x6709;&#x4E9B;&#x4ECE;rmContext&#x4E2D;&#x83B7;&#x5F97;&#xFF0C;&#x6709;&#x4E9B;&#x751A;&#x81F3;&#x76F4;&#x63A5;&#x5C06;handlerInstance&#x4F5C;&#x4E3A;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x3002;&#x8FD9;&#x7ED9;&#x9605;&#x8BFB;&#x6E90;&#x7801;&#x5E26;&#x6765;&#x4E86;&#x5F88;&#x5927;&#x9EBB;&#x70E6;&#xFF0C;&#x9700;&#x8981;&#x67E5;&#x8BC1;&#x5404;dispatcher&#x5206;&#x522B;&#x5F15;&#x7528;&#x4E86;&#x54EA;&#x4E00;&#x4E2A;&#x4E2D;&#x592E;&#x5F02;&#x6B65;&#x8C03;&#x5EA6;&#x5668;&#x3002;&#x7334;&#x5B50;&#x7814;&#x7A76;&#x6E90;&#x7801;&#x65F6;&#x6574;&#x7406;&#x8FC7;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x540E;&#x9762;&#x627E;&#x673A;&#x4F1A;&#x5206;&#x4EAB;&#x51FA;&#x6765;&#x3002;</li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x8BFB;HDFS&amp;#x7684;&amp;#x6E90;&amp;#x7801;&amp;#x51E0;&amp;#x4E4E;&amp;#x53EF;&amp;#x4EE5;&amp;#x76F4;&amp;#x63A5;&amp;#x4E0A;&amp;#xFF0C;&amp;#x4F46;&amp;#x60F3;&amp;#x8BFB;Yarn&amp;#x7684;&amp;#x6E90;&amp;#x7801;&amp;#xFF0C;&amp;#x9700;&amp;#x8981;&amp;#x5148;&amp;#x4E86;&amp;#x89E3;Yarn&amp;#x7684;&lt;code&gt;&amp;#x4E8B;&amp;#x4EF6;&amp;#x9A71;&amp;#x52A8;&amp;#x6A21;&amp;#x578B;&lt;/code&gt;&amp;#x4E0E;&lt;code&gt;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&lt;/code&gt;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="并发" scheme="https://monkeysayhi.github.io/tags/%E5%B9%B6%E5%8F%91/"/>
    
      <category term="Hadoop" scheme="https://monkeysayhi.github.io/tags/Hadoop/"/>
    
      <category term="Yarn" scheme="https://monkeysayhi.github.io/tags/Yarn/"/>
    
  </entry>
  
  <entry>
    <title>HDFS-2.x之Federation：基于ConfigServer的轻量级服务端挂载</title>
    <link href="https://monkeysayhi.github.io/2018/11/19/HDFS-2.x%E4%B9%8BFederation%EF%BC%9A%E5%9F%BA%E4%BA%8EConfigServer%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%9C%8D%E5%8A%A1/"/>
    <id>https://monkeysayhi.github.io/2018/11/19/HDFS-2.x之Federation：基于ConfigServer的轻量级服务/</id>
    <published>2018-11-19T09:54:04.000Z</published>
    <updated>2018-11-19T09:54:04.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x6302;&#x8F7D;&#x8868;&#x7684;&#x672C;&#x8D28;&#x662F;&#x8DEF;&#x7531;&#x8868;&#xFF0C;&#x4E0D;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x7EF4;&#x62A4;&#x8DEF;&#x7531;&#x8868;&#xFF0C;&#x5C31;&#x53EA;&#x80FD;&#x5728;&#x670D;&#x52A1;&#x7AEF;&#x4E86;&#x3002;</p>
<p>HDFS&#x7684;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x6EE1;&#x8DB3;&#x4E00;&#x4E2A;&#x5047;&#x8BBE;&#x2014;&#x2014;&#x201C;<strong>route table&#x53D8;&#x5316;&#x9891;&#x7387;&#x4F4E;</strong>&#x201D;&#x3002;&#x8FD9;&#x5F88;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#xFF0C;HDFS&#x5F88;&#x5C11;&#x627F;&#x63A5;&#x5728;&#x7EBF;&#x4E1A;&#x52A1;&#xFF0C;&#x79BB;&#x7EBF;&#x4E1A;&#x52A1;&#x7684;&#x4F7F;&#x7528;&#x6A21;&#x5F0F;&#x76F8;&#x5BF9;&#x7A33;&#x5B9A;&#xFF0C;&#x90A3;&#x4E48;&#x5404;&#x5B50;&#x96C6;&#x7FA4;&#x5BB9;&#x91CF;&#x7684;&#x589E;&#x957F;&#x901F;&#x5EA6;&#x4E5F;&#x76F8;&#x5BF9;&#x7A33;&#x5B9A;&#x3002;&#x672C;&#x6587;&#x57FA;&#x4E8E;&#x4E0A;&#x8FF0;&#x5047;&#x8BBE;&#xFF0C;&#x53C2;&#x8003;Tair&#xFF0C;&#x7B80;&#x8981;&#x4ECB;&#x7ECD;&#x4E00;&#x79CD;&#x57FA;&#x4E8E;ConfigServer&#x7684;&#x8F7B;&#x91CF;&#x7EA7;&#x670D;&#x52A1;&#x7AEF;&#x6302;&#x8F7D;&#x65B9;&#x6848;&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>HDFS 3.0&#x5F15;&#x5165;&#x4E86;<code>Router Based Federation</code>&#x65B9;&#x6848;&#x3002;&#x8BE5;&#x65B9;&#x6848;&#x6700;&#x5148;&#x88AB;&#x5F15;&#x5165;Yarn&#xFF0C;&#x80FD;&#x591F;&#x53CA;&#x65F6;&#x8FDB;&#x884C;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF0C;&#x66F4;&#x9002;&#x5408;route table&#x53D8;&#x5316;&#x9891;&#x7387;&#x9AD8;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x7528;&#x5728;&#x76EE;&#x524D;&#x7684;HDFS&#x4E0A;&#x6709;&#x70B9;&#x201C;&#x5927;&#x6750;&#x5C0F;&#x7528;&#x201D;&#x3002;&#x4E0D;&#x8FC7;&#x4F7F;&#x7528;&#x7EDF;&#x4E00;&#x65B9;&#x6848;&#x7684;&#x8BF1;&#x60D1;&#x592A;&#x5927;&#x4E86;&#x3002;&#x3002;&#x3002;</p>
</blockquote>
<h1 id="&#x65B9;&#x6848;"><a href="#&#x65B9;&#x6848;" class="headerlink" title="&#x65B9;&#x6848;"></a>&#x65B9;&#x6848;</h1><blockquote>
<p>&#x9700;&#x6C42;case&#xFF1A;&#x589E;&#x52A0;&#x65B0;&#x8DEF;&#x7531;&#x3002;</p>
</blockquote>
<p>&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x903B;&#x8F91;&#x4E0A;&#x7684;ConfigServer&#xFF0C;&#x8D1F;&#x8D23;&#x7EF4;&#x62A4;&#x8DEF;&#x7531;&#x8868;&#x3002;NN&#x4E0E;ConfigServer&#x4FDD;&#x6301;&#x5FC3;&#x8DF3;&#xFF0C;&#x8BF7;&#x6C42;&#x4E2D;&#x643A;&#x5E26;&#x8D1F;&#x8F7D;&#x4FE1;&#x606F;&#xFF0C;&#x54CD;&#x5E94;&#x4E2D;&#x643A;&#x5E26;&#x6700;&#x65B0;&#x7684;&#x8DEF;&#x7531;&#x8868;&#xFF0C;&#x5E26;&#x6709;&#x7248;&#x672C;&#x53F7;v1&#x3002;</p>
<p>&#x5BA2;&#x6237;&#x7AEF;&#x542F;&#x52A8;&#x65F6;&#x4ECE;ConfigServer&#x540C;&#x6B65;&#x6700;&#x65B0;&#x7684;&#x8DEF;&#x7531;&#x8868;&#xFF0C;&#x5E26;&#x6709;&#x7248;&#x672C;&#x53F7;v2&#x3002;&#x8BBF;&#x95EE;&#x8FC7;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>&#x6309;&#x7167;&#x8DEF;&#x7531;&#x8868;&#x7684;&#x4FE1;&#x606F;&#x4E0E;NN&#x63E1;&#x624B;&#xFF0C;&#x5982;&#x679C;&#x8DEF;&#x7531;&#x8868;&#x663E;&#x793A;NN&#x5F02;&#x5E38;&#xFF0C;&#x505C;&#x6B62;&#x8BBF;&#x95EE;&#x3002;</li>
<li>&#x5982;&#x679C;<code>v1 &lt; v2</code>&#xFF0C;&#x8BC1;&#x660E;NN&#x66F4;&#x65B0;&#x5EF6;&#x8FDF;&#xFF0C;&#x56DE;&#x9000;&#x91CD;&#x8BD5;&#xFF1B;&#x5982;&#x679C;&#x91CD;&#x8BD5;&#x591A;&#x6B21;&#x4ECD;&#x7136;&#x5931;&#x8D25;&#xFF08;&#x8BF4;&#x660E;NN&#x6D3B;&#x4F46;&#x8DEF;&#x7531;&#x8868;&#x66F4;&#x65B0;&#x5F02;&#x5E38;&#xFF09;&#xFF0C;&#x5219;&#x62A5;&#x544A;ConfigServer NN&#x5F02;&#x5E38;&#xFF0C;&#x505C;&#x6B62;&#x8BBF;&#x95EE;&#x3002;</li>
<li>&#x5982;&#x679C;<code>v1 &gt; v2</code>&#xFF0C;&#x8BC1;&#x660E;NN&#x4E0A;&#x7684;&#x8DEF;&#x7531;&#x4FE1;&#x606F;&#x5DF2;&#x66F4;&#x65B0;&#xFF0C;&#x5219;&#x5BA2;&#x6237;&#x7AEF;&#x91CD;&#x65B0;&#x4ECE;ConfigServer&#x540C;&#x6B65;&#x8DEF;&#x7531;&#x8868;&#xFF0C;&#x7136;&#x540E;&#x56DE;&#x5230;1&#x3002;</li>
<li>&#x5426;&#x5219;&#xFF08;<code>v1 == v2</code>&#xFF09;&#xFF0C;&#x8BC1;&#x660E;&#x8DEF;&#x7531;&#x4FE1;&#x606F;&#x4E00;&#x81F4;&#xFF0C;&#x6B63;&#x5E38;&#x8BBF;&#x95EE;&#x3002;</li>
</ol>
<blockquote>
<p>&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x5355;&#x72EC;&#x7684;&#x63E1;&#x624B;&#x8FC7;&#x7A0B;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x7248;&#x672C;&#x53F7;&#x643A;&#x5E26;&#x5728;&#x6BCF;&#x4E00;&#x6B21;&#x8BBF;&#x95EE;&#x8BF7;&#x6C42;&#x4E2D;&#x3002;</p>
</blockquote>
<p>&#x5982;&#x679C;&#x73B0;&#x5728;&#x6DFB;&#x52A0;&#x4E00;&#x4E2A;NN3&#xFF0C;&#x4E3A;NN3&#x6DFB;&#x52A0;&#x591A;&#x4E2A;&#x8DEF;&#x7531;&#xFF0C;&#x7136;&#x540E;ConfigServer&#x7684;&#x8DEF;&#x7531;&#x8868;&#x7248;&#x672C;&#x53F7;&#x589E;&#x5927;&#x4E3A;v3&#xFF0C;&#x5219;&#x76F4;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x4E0E;NN3&#x90FD;&#x540C;&#x6B65;&#x5230;&#x8DEF;&#x7531;&#x8868;v3&#x540E;&#xFF0C;&#x624D;&#x80FD;&#x6B63;&#x5E38;&#x8BBF;&#x95EE;NN3&#x3002;</p>
<blockquote>
<p>&#x8DEF;&#x7531;&#x5220;&#x9664;&#x540C;&#x7406;&#xFF0C;&#x4F46;&#x8DEF;&#x7531;&#x4FEE;&#x6539;&#x6D89;&#x53CA;FastCopy&#x4FEE;&#x6539;&#x548C;&#x5143;&#x6570;&#x636E;&#x7BA1;&#x7406;&#xFF0C;&#x6682;&#x4E0D;&#x8BA8;&#x8BBA;&#x3002;</p>
</blockquote>
<h1 id="&#x4F18;&#x7F3A;&#x70B9;"><a href="#&#x4F18;&#x7F3A;&#x70B9;" class="headerlink" title="&#x4F18;&#x7F3A;&#x70B9;"></a>&#x4F18;&#x7F3A;&#x70B9;</h1><p>&#x4F18;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x4E3B;&#x8981;&#x7684;failover&#x5904;&#x7406;&#x8FD8;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x5BF9;&#x670D;&#x52A1;&#x7AEF;&#x7684;&#x5F71;&#x54CD;&#x8F83;&#x5C0F;&#x3002;</li>
<li>&#x5C3D;&#x7BA1;ConfigServer&#x903B;&#x8F91;&#x4E0A;&#x662F;&#x5355;&#x70B9;&#xFF0C;&#x4F46;&#x8D1F;&#x8F7D;&#x5F88;&#x8F7B;&#x3001;&#x72B6;&#x6001;&#x7B80;&#x5355;&#xFF0C;&#x4E14;&#x66F4;&#x6539;&#x4E0D;&#x9891;&#x7E41;&#xFF0C;&#x5BB9;&#x6613;&#x914D;&#x5957;&#x5B9E;&#x73B0;HA&#x65B9;&#x6848;&#x3002;&#x5C31;&#x7B97;ConfigServer&#x77ED;&#x65F6;&#x95F4;&#x4E0D;&#x53EF;&#x7528;&#xFF0C;<code>v1 == v2</code>&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x4E5F;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x8BBF;&#x95EE;NN&#x3002;</li>
<li>&#x5982;&#x679C;NN&#x5904;&#x7406;&#x8BF7;&#x6C42;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x6536;&#x5230;&#x66F4;&#x65B0;&#x7684;&#x8DEF;&#x7531;&#x8868;&#xFF0C;&#x53EF;&#x91C7;&#x53D6;&#x4FDD;&#x5B88;&#x7B56;&#x7565;&#x5904;&#x7406;&#x5E76;&#x53D1;&#x51B2;&#x7A81;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x4E00;&#x884C;&#x4E3A;&#x4E0D;&#x9891;&#x7E41;&#xFF08;&#x5982;&#xFF0C;&#x5BF9;diff&#x8DEF;&#x7531;&#x52A0;&#x5199;&#x9501;&#xFF0C;&#x6682;&#x65F6;&#x62D2;&#x7EDD;&#x5BF9;diff&#x8DEF;&#x5F84;&#x7684;&#x8BBF;&#x95EE;&#xFF09;&#x3002;</li>
</ul>
<p>&#x7F3A;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x4E00;&#x81F4;&#x6027;&#x95EE;&#x9898;&#xFF1A;&#x5F15;&#x5165;&#x65B0;&#x7EC4;&#x4EF6;&#xFF0C;&#x66F4;&#x96BE;&#x4FDD;&#x8BC1;&#x4E00;&#x81F4;&#x6027;&#x3002;</li>
<li>DOS&#x95EE;&#x9898;&#xFF1A;&#x8DEF;&#x7531;&#x8868;&#x66F4;&#x65B0;&#x65F6;&#xFF0C;&#x8FD8;&#x662F;&#x9700;&#x8981;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x7684;&#x62D2;&#x7EDD;&#x670D;&#x52A1;&#xFF08;DOS&#xFF09;&#x3002;&#x5982;&#x679C;DOS&#x673A;&#x5236;&#x8BBE;&#x8BA1;&#x4E0D;&#x5408;&#x7406;&#xFF0C;&#x5F88;&#x5BB9;&#x6613;&#x964D;&#x4F4E;&#x96C6;&#x7FA4;&#x541E;&#x5410;&#x3002;</li>
</ul>
<h1 id="&#x4F18;&#x5316;&#x70B9;"><a href="#&#x4F18;&#x5316;&#x70B9;" class="headerlink" title="&#x4F18;&#x5316;&#x70B9;"></a>&#x4F18;&#x5316;&#x70B9;</h1><ul>
<li>DOS&#x95EE;&#x9898;&#xFF1A;&#x5982;&#x679C;&#x7B80;&#x5355;&#x4EE5;&#x6302;&#x8F7D;&#x70B9;&#x4E3A;&#x5355;&#x4F4D;&#xFF0C;&#x5219;DOS&#x65F6;&#x95F4;&#x957F;&#xFF0C;&#x53EF;&#x8BBE;&#x8BA1;forward&#x673A;&#x5236;&#xFF0C;&#x91CD;&#x5B9A;&#x5411;&#x5DF2;&#x7ECF;&#x8FC1;&#x79FB;&#x6210;&#x529F;&#x7684;&#x90E8;&#x5206;&#x5B50;&#x8DEF;&#x5F84;&#x3002;</li>
<li>&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF1A;&#x5229;&#x7528;ConfigServer&#x6536;&#x96C6;&#x7684;&#x8D1F;&#x8F7D;&#x4FE1;&#x606F;&#xFF0C;&#x5B9E;&#x73B0;&#x81EA;&#x52A8;&#x7684;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF08;<font color="red">&#x9700;&#x8981;&#x6539;&#x8FDB;FastCopy&#xFF0C;&#x6D89;&#x53CA;NN&#x3001;DN&#x7684;&#x4FEE;&#x6539;&#xFF0C;&#x5982;&#x4F55;&#x64CD;&#x4F5C;&#xFF1F;&#xFF1F;&#xFF1F;</font>&#xFF09;&#x3002;</li>
<li>&#x5EF6;&#x8FDF;&#xFF1A;ConfigServer&#x4E0E;NN&#x95F4;&#x91C7;&#x7528;Pull&#x6A21;&#x578B;&#xFF08;NN&#x5411;ConfigServer&#x53D1;&#x9001;&#x5FC3;&#x8DF3;&#xFF09;&#x3002;&#x8003;&#x8651;&#x5230;&#x8DEF;&#x7531;&#x4FEE;&#x6539;&#x901A;&#x5E38;&#x5E0C;&#x671B;&#x5C3D;&#x5FEB;&#x901A;&#x77E5;NN&#xFF0C;&#x53EF;&#x6539;&#x4E3A;Push&#x6A21;&#x578B;&#x3002;</li>
<li>&#x72EC;&#x4EAB;DN&#xFF1A;&#x5141;&#x8BB8;NN&#x62E5;&#x6709;&#x72EC;&#x4EAB;&#x7684;DN&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x4FEE;&#x6539;FastCopy&#x7684;&#x903B;&#x8F91;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x5728;&#x5927;&#x96C6;&#x7FA4;&#x5185;&#x90E8;&#x652F;&#x6301;&#x5C0F;&#x96C6;&#x7FA4;&#x3002;</li>
<li>&#x7248;&#x672C;&#x53F7;&#xFF1A;&#x4EE5;&#x7248;&#x672C;&#x53F7;&#x7BA1;&#x7406;&#x6574;&#x5F20;route table&#x7684;&#x7C92;&#x5EA6;&#x592A;&#x5927;&#xFF0C;&#x53EF;&#x4EE5;&#x7EC6;&#x5316;&#x5230;&#x6BCF;&#x6761;&#x8DEF;&#x7531;&#xFF0C;&#x4E5F;&#x66F4;&#x5BB9;&#x6613;&#x5B9E;&#x73B0;&#x8DEF;&#x7531;&#x7684;&#x6DFB;&#x52A0;&#x3001;&#x4FEE;&#x6539;&#x3001;&#x5220;&#x9664;&#xFF08;&#x4F46;&#x7BA1;&#x7406;&#x8D77;&#x6765;&#x4F1A;&#x66F4;&#x56F0;&#x96BE;&#xFF0C;&#x6682;&#x4E0D;&#x6DF1;&#x5165;&#xFF09;&#x3002;</li>
</ul>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="http://www.infoq.com/cn/articles/taobao-tair" target="_blank" rel="external">&#x6DD8;&#x5B9D;&#x5F00;&#x6E90; Key/Value &#x7ED3;&#x6784;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x7CFB;&#x7EDF; Tair &#x6280;&#x672F;&#x5256;&#x6790;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x6302;&amp;#x8F7D;&amp;#x8868;&amp;#x7684;&amp;#x672C;&amp;#x8D28;&amp;#x662F;&amp;#x8DEF;&amp;#x7531;&amp;#x8868;&amp;#xFF0C;&amp;#x4E0D;&amp;#x5728;&amp;#x5BA2;&amp;#x6237;&amp;#x7AEF;&amp;#x7EF4;&amp;#x62A4;&amp;#x8DEF;&amp;#x7531;&amp;#x8868;&amp;#xFF0C;&amp;#x5C31;&amp;#x53EA;&amp;#x80FD;&amp;#x5728;&amp;#x670D;&amp;#x52A1;&amp;#x7AEF;&amp;#x4E86;&amp;#x3002;&lt;/p&gt;
&lt;p&gt;HDFS&amp;#x7684;&amp;#x4F7F;&amp;#x7528;&amp;#x573A;&amp;#x666F;&amp;#x6EE1;&amp;#x8DB3;&amp;#x4E00;&amp;#x4E2A;&amp;#x5047;&amp;#x8BBE;&amp;#x2014;&amp;#x2014;&amp;#x201C;&lt;strong&gt;route table&amp;#x53D8;&amp;#x5316;&amp;#x9891;&amp;#x7387;&amp;#x4F4E;&lt;/strong&gt;&amp;#x201D;&amp;#x3002;&amp;#x8FD9;&amp;#x5F88;&amp;#x5BB9;&amp;#x6613;&amp;#x7406;&amp;#x89E3;&amp;#xFF0C;HDFS&amp;#x5F88;&amp;#x5C11;&amp;#x627F;&amp;#x63A5;&amp;#x5728;&amp;#x7EBF;&amp;#x4E1A;&amp;#x52A1;&amp;#xFF0C;&amp;#x79BB;&amp;#x7EBF;&amp;#x4E1A;&amp;#x52A1;&amp;#x7684;&amp;#x4F7F;&amp;#x7528;&amp;#x6A21;&amp;#x5F0F;&amp;#x76F8;&amp;#x5BF9;&amp;#x7A33;&amp;#x5B9A;&amp;#xFF0C;&amp;#x90A3;&amp;#x4E48;&amp;#x5404;&amp;#x5B50;&amp;#x96C6;&amp;#x7FA4;&amp;#x5BB9;&amp;#x91CF;&amp;#x7684;&amp;#x589E;&amp;#x957F;&amp;#x901F;&amp;#x5EA6;&amp;#x4E5F;&amp;#x76F8;&amp;#x5BF9;&amp;#x7A33;&amp;#x5B9A;&amp;#x3002;&amp;#x672C;&amp;#x6587;&amp;#x57FA;&amp;#x4E8E;&amp;#x4E0A;&amp;#x8FF0;&amp;#x5047;&amp;#x8BBE;&amp;#xFF0C;&amp;#x53C2;&amp;#x8003;Tair&amp;#xFF0C;&amp;#x7B80;&amp;#x8981;&amp;#x4ECB;&amp;#x7ECD;&amp;#x4E00;&amp;#x79CD;&amp;#x57FA;&amp;#x4E8E;ConfigServer&amp;#x7684;&amp;#x8F7B;&amp;#x91CF;&amp;#x7EA7;&amp;#x670D;&amp;#x52A1;&amp;#x7AEF;&amp;#x6302;&amp;#x8F7D;&amp;#x65B9;&amp;#x6848;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Hadoop" scheme="https://monkeysayhi.github.io/tags/Hadoop/"/>
    
      <category term="HDFS" scheme="https://monkeysayhi.github.io/tags/HDFS/"/>
    
  </entry>
  
  <entry>
    <title>HDFS-2.x之Federation：基本原理、优缺点、解决方案</title>
    <link href="https://monkeysayhi.github.io/2018/11/15/HDFS-2.x%E4%B9%8BFederation%EF%BC%9A%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86%E3%80%81%E4%BC%98%E7%BC%BA%E7%82%B9%E3%80%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/"/>
    <id>https://monkeysayhi.github.io/2018/11/15/HDFS-2.x之Federation：基本原理、优缺点、解决方案/</id>
    <published>2018-11-15T14:09:51.000Z</published>
    <updated>2018-11-15T14:10:38.000Z</updated>
    
    <content type="html"><![CDATA[<p>HDFS 2.x&#x5F15;&#x5165;Federation&#x7684;&#x76EE;&#x7684;&#x4E3B;&#x8981;&#x662F;&#x4E24;&#x4E2A;&#xFF1A;</p>
<ul>
<li>&#x6C34;&#x5E73;&#x62C6;&#x5206;nn&#xFF0C;&#x4F7F;&#x96C6;&#x7FA4;&#x80FD;&#x5BB9;&#x7EB3;&#x66F4;&#x591A;&#x7684;&#x5143;&#x4FE1;&#x606F;</li>
<li>&#x8D1F;&#x8F7D;&#x5747;&#x8861;</li>
</ul>
<a id="more"></a>
<h1 id="&#x57FA;&#x672C;&#x539F;&#x7406;"><a href="#&#x57FA;&#x672C;&#x539F;&#x7406;" class="headerlink" title="&#x57FA;&#x672C;&#x539F;&#x7406;"></a>&#x57FA;&#x672C;&#x539F;&#x7406;</h1><p>&#x6574;&#x4F53;&#x601D;&#x8DEF;&#x662F;&#x4E00;&#x4E2A;&#x6302;&#x8F7D;&#x8868;&#xFF0C;&#x6307;&#x660E;&#x54EA;&#x4E9B;&#x8DEF;&#x5F84;&#x5B9E;&#x9645;&#x6307;&#x5411;&#x54EA;&#x4E2A;nn&#xFF08;&#x6216;ns&#xFF09;&#x3002;</p>
<p>&#x6302;&#x8F7D;&#x8868;&#x914D;&#x7F6E;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x5982;&#x679C;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x73B0;&#x8DEF;&#x5F84;shcema&#x662F;viewfs&#xFF0C;&#x5C31;&#x6309;&#x7167;&#x6302;&#x8F7D;&#x8868;&#x5C06;&#x8BF7;&#x6C42;&#x5B9A;&#x5411;&#x5230;&#x5B9E;&#x9645;&#x7684;nn&#x3002;</p>
<p>&#x67B6;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/HDFS-2.x&#x4E4B;Federation&#xFF1A;&#x57FA;&#x672C;&#x539F;&#x7406;&#x3001;&#x4F18;&#x7F3A;&#x70B9;&#x3001;&#x89E3;&#x51B3;&#x65B9;&#x6848;/&#x67B6;&#x6784;.png" alt="&#x67B6;&#x6784;"></p>
<p>dn&#x901A;&#x8FC7;BlockPoolManager&#x5C06;&#x8BF7;&#x6C42;&#x8DEF;&#x7531;&#x5230;&#x5404;ns&#x5BF9;&#x5E94;&#x7684;BPOfferService&#x4E0A;&#xFF1B;&#x518D;&#x901A;&#x8FC7;BPOfferService&#x4E0E;&#x5177;&#x4F53;&#x7684;ns&#xFF08;&#x5982;&#x4E0A;&#x56FE;NN-1&#xFF09;&#x901A;&#x4FE1;&#xFF08;&#x4E0E;&#x5177;&#x4F53;&#x7684;nn&#x7684;&#x5219;&#x662F;BPServiceActor&#xFF09;&#x3002;</p>
<h1 id="&#x4F18;&#x7F3A;&#x70B9;&#xFF08;&#x7B80;&#x8981;&#x7248;&#xFF09;"><a href="#&#x4F18;&#x7F3A;&#x70B9;&#xFF08;&#x7B80;&#x8981;&#x7248;&#xFF09;" class="headerlink" title="&#x4F18;&#x7F3A;&#x70B9;&#xFF08;&#x7B80;&#x8981;&#x7248;&#xFF09;"></a>&#x4F18;&#x7F3A;&#x70B9;&#xFF08;&#x7B80;&#x8981;&#x7248;&#xFF09;</h1><p>HDFS 2.x Federation&#x4F7F;&#x7528;&#x4E86;&#x5BA2;&#x6237;&#x7AEF;&#x6302;&#x8F7D;&#x7684;&#x65B9;&#x6848;&#xFF0C;&#x6838;&#x5FC3;&#x7684;&#x4F18;&#x7F3A;&#x70B9;&#x4E5F;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x6302;&#x8F7D;&#x4E0A;&#x3002;</p>
<p>&#x4F18;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x8D1F;&#x8F7D;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x5BF9;nn&#x5B8C;&#x5168;&#x6CA1;&#x6709;&#x5F71;&#x54CD;</li>
<li>&#x5B9E;&#x73B0;&#x7B80;&#x5355;</li>
</ul>
<p>&#x574F;&#x5904;&#xFF1A;</p>
<ul>
<li>&#x7EF4;&#x62A4;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x6BCF;&#x6B21;&#x4FEE;&#x6539;&#x6302;&#x8F7D;&#x8868;&#xFF0C;&#x90FD;&#x5FC5;&#x987B;&#x624B;&#x52A8;&#x540C;&#x6B65;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</li>
<li>&#x4EBA;&#x5DE5;&#x7EF4;&#x62A4;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF0C;&#x4E0D;&#x80FD;&#x968F;&#x4E1A;&#x52A1;&#x53D8;&#x5316;</li>
</ul>
<h1 id="&#x7F3A;&#x70B9;&#xFF08;&#x8BE6;&#x7EC6;&#x7248;&#xFF09;"><a href="#&#x7F3A;&#x70B9;&#xFF08;&#x8BE6;&#x7EC6;&#x7248;&#xFF09;" class="headerlink" title="&#x7F3A;&#x70B9;&#xFF08;&#x8BE6;&#x7EC6;&#x7248;&#xFF09;"></a>&#x7F3A;&#x70B9;&#xFF08;&#x8BE6;&#x7EC6;&#x7248;&#xFF09;</h1><ol>
<li><strong>&#x6302;&#x8F7D;&#x8868;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x6302;&#x8F7D;&#x70B9;&#x7684;&#x8BBF;&#x95EE;&#x542B;&#x4E49;&#x4E0D;&#x660E;&#xFF1A;<ul>
<li>&#x7531;&#x4E8E;HDFS&#x5BA2;&#x6237;&#x7AEF;&#x539F;&#x6709;&#x7684;&#x673A;&#x5236;&#xFF0C;&#x4E00;&#x4E2A;DFSClient&#x53EA;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;nameservice&#xFF0C;&#x6240;&#x4EE5;&#x4E00;&#x6B21;&#x8DEF;&#x5F84;&#x5904;&#x7406;&#x4E0D;&#x80FD;&#x8F6C;&#x4E3A;&#x591A;&#x4E2A;nameservice&#x7684;&#x591A;&#x6B21;RPC&#x3002;</li>
<li>&#x5BF9;&#x4E8E;&#x8DE8;&#x6302;&#x8F7D;&#x70B9;&#x7684;&#x8BFB;&#x64CD;&#x4F5C;&#xFF0C;&#x53EA;&#x6839;&#x636E;&#x6302;&#x8F7D;&#x914D;&#x7F6E;&#x8FD4;&#x56DE;&#x5047;&#x7ED3;&#x679C;</li>
<li>&#x5BF9;&#x4E8E;&#x8DE8;&#x6302;&#x8F7D;&#x70B9;&#x7684;&#x5199;&#x64CD;&#x4F5C;&#xFF08;rename&#x7B49;&#xFF09;&#x64CD;&#x4F5C;&#xFF0C;&#x4F1A;&#x629B;&#x51FA;&#x5F02;&#x5E38;</li>
</ul>
</li>
<li><strong>&#x5BA2;&#x6237;&#x7AEF;&#x6302;&#x8F7D;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x5BA2;&#x6237;&#x7AEF;&#x6302;&#x8F7D;&#x7EF4;&#x62A4;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x4E00;&#x65E6;&#x4FEE;&#x6539;&#x4E86;&#x6302;&#x8F7D;&#x8868;&#xFF0C;&#x5FC5;&#x987B;&#x53CA;&#x65F6;&#x66F4;&#x65B0;&#x6240;&#x6709;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5426;&#x5219;&#x7528;&#x8001;&#x7684;&#x6302;&#x8F7D;&#x903B;&#x8F91;&#x5199;nn&#xFF0C;&#x540E;&#x679C;&#x53EF;&#x80FD;&#x975E;&#x5E38;&#x4E25;&#x91CD;&#x3002;</li>
<li><strong>&#x57FA;&#x4E8E;&#x914D;&#x7F6E;&#x7684;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x5982;&#x679C;&#x8D1F;&#x8F7D;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x4EBA;&#x5DE5;&#x4FEE;&#x6539;&#x5EF6;&#x8FDF;&#x8F83;&#x9AD8;&#x3002;</li>
<li><strong>&#x76EE;&#x524D;&#x5B9E;&#x73B0;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x76EE;&#x524D;&#x7684;&#x6302;&#x8F7D;&#x529F;&#x80FD;&#x975E;&#x5E38;&#x5F31;&#xFF1A;<ul>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x8DEF;&#x5F84;&#x58F0;&#x660E;&#x4E86;&#x6302;&#x8F7D;&#xFF0C;&#x90A3;&#x4E48;&#x5176;&#x540C;&#x7EA7;&#x76EE;&#x5F55;&#x90FD;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x6302;&#x8F7D;</li>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x8DEF;&#x5F84;&#x58F0;&#x660E;&#x4E86;&#x6302;&#x8F7D;&#xFF0C;&#x90A3;&#x4E48;&#x5176;&#x5B50;&#x8DEF;&#x5F84;&#x4E0D;&#x80FD;&#x518D;&#x58F0;&#x660E;&#x6302;&#x8F7D;</li>
</ul>
</li>
<li>HDFS Federation&#x7269;&#x7406;&#x4E0A;&#x6CA1;&#x6709;&#x5408;&#x5E76;&#x96C6;&#x7FA4;&#x7684;&#x7F3A;&#x70B9;&#xFF1A;&#x5982;&#x679C;&#x8981;&#x8DE8;ns&#x4FEE;&#x6539;&#x6302;&#x8F7D;&#x903B;&#x8F91;&#xFF0C;&#x5219;&#x9700;&#x4F7F;&#x7528;DistCp&#x5C06;&#x6570;&#x636E;&#x4ECE;&#x4E00;&#x4E2A;ns&#x62F7;&#x8D1D;&#x5230;&#x53E6;&#x4E00;&#x4E2A;ns&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#x4E24;&#x4E2A;ns&#x901A;&#x5E38;&#x5171;&#x4EAB;&#x6240;&#x6709;dn&#xFF0C;&#x62F7;&#x8D1D;&#x9020;&#x6210;&#x4E86;&#x6781;&#x5927;&#x7684;&#x6D6A;&#x8D39;&#x3002;</li>
<li>&#x5F15;&#x5165;viewfs&#x7684;&#x7F3A;&#x70B9;&#xFF1A;HDFS&#x8DEF;&#x5F84;&#x7684;scheme&#x9700;&#x8981;&#x53D8;&#x4E3A;viewfs&#xFF0C;&#x800C;viewfs&#x548C;&#x5176;&#x4ED6;scheme&#x4E92;&#x4E0D;&#x517C;&#x5BB9;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5C06;fs.defaultFS&#x7684;&#x914D;&#x7F6E;&#x4ECE;<code>hdfs://ns1/</code>&#x53D8;&#x4E3A;<code>viewfs://ns/</code>&#xFF0C;&#x5219;<code>hdfs:///test</code>&#x4F1A;&#x56E0;&#x672A;&#x6307;&#x5B9A;ns&#x629B;&#x51FA;&#x5F02;&#x5E38;&#x3002;</li>
</ol>
<h1 id="&#x89E3;&#x51B3;&#x65B9;&#x6848;"><a href="#&#x89E3;&#x51B3;&#x65B9;&#x6848;" class="headerlink" title="&#x89E3;&#x51B3;&#x65B9;&#x6848;"></a>&#x89E3;&#x51B3;&#x65B9;&#x6848;</h1><ol>
<li><strong>&#x6302;&#x8F7D;&#x8868;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x5C06;&#x5143;&#x4FE1;&#x606F;&#x6574;&#x4F53;&#x6216;&#x90E8;&#x5206;&#x62BD;&#x8C61;&#x5230;&#x5355;&#x72EC;&#x7684;&#x89D2;&#x8272;&#x4E2D;&#xFF0C;&#x4EE5;&#x5F7B;&#x5E95;&#x629B;&#x5F03;&#x6302;&#x8F7D;&#x65B9;&#x6848;&#xFF0C;&#x7528;&#x7F51;&#x7EDC;&#x6210;&#x672C;&#x6362;scalability&#x3002;&#x5982;&#x62BD;&#x79BB;FSDirectory&#x6216;BlockManager&#x3002;</li>
<li><strong>&#x5BA2;&#x6237;&#x7AEF;&#x6302;&#x8F7D;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x670D;&#x52A1;&#x7AEF;&#x6302;&#x8F7D;&#xFF0C;&#x53C2;&#x8003;Tair ConfigServer&#x3001;HDFS 3.x&#x7684;Router-Based Federation&#x3002;</li>
<li><strong>&#x57FA;&#x4E8E;&#x914D;&#x7F6E;&#x7684;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x81EA;&#x52A8;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF0C;&#x4F46;&#x7531;&#x4E8E;&#x95EE;&#x9898;1&#x3001;5&#xFF0C;&#x5F88;&#x96BE;&#x89E3;&#x51B3;&#x3002;</li>
<li><strong>&#x76EE;&#x524D;&#x5B9E;&#x73B0;&#x7684;&#x7F3A;&#x70B9;</strong>&#xFF1A;&#x4EFF;&#x7167;IP&#x534F;&#x8BAE;&#x7684;&#x8DEF;&#x7531;&#x8868;&#x3002;<ul>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x8DEF;&#x5F84;&#x58F0;&#x660E;&#x4E86;&#x6302;&#x8F7D;&#xFF0C;&#x90A3;&#x4E48;&#x5176;&#x540C;&#x7EA7;&#x76EE;&#x5F55;&#x90FD;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x6302;&#x8F7D;&#xFF1A;&#x975E;&#x6302;&#x8F7D;&#x76EE;&#x5F55;&#x8DEF;&#x7531;&#x5230;default ns&#x5339;&#x914D;&#x3002;</li>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x8DEF;&#x5F84;&#x58F0;&#x660E;&#x4E86;&#x6302;&#x8F7D;&#xFF0C;&#x90A3;&#x4E48;&#x5176;&#x5B50;&#x8DEF;&#x5F84;&#x4E0D;&#x80FD;&#x518D;&#x58F0;&#x660E;&#x6302;&#x8F7D;&#xFF1A;&#x8DEF;&#x7531;&#x89E3;&#x6790;&#x65F6;&#x8FDB;&#x884C;&#x6700;&#x957F;&#x5339;&#x914D;&#x5339;&#x914D;&#x3002;</li>
</ul>
</li>
<li>HDFS Federation&#x7269;&#x7406;&#x4E0A;&#x6CA1;&#x6709;&#x5408;&#x5E76;&#x96C6;&#x7FA4;&#x7684;&#x7F3A;&#x70B9;&#xFF1A;FastCopy&#x53EF;&#x4EE5;&#x90E8;&#x5206;&#x89E3;&#x51B3;&#xFF0C;&#x6216;&#x8005;&#x4E00;&#x4E9B;&#x201C;&#x7834;&#x574F;&#x6027;&#x201D;&#x7684;&#x65B9;&#x6848;&#xFF08;&#x4EC5;&#x7528;&#x4E8E;Federation&#xFF0C;&#x76F4;&#x63A5;&#x4FEE;&#x6539;&#x5143;&#x4FE1;&#x606F;&#x548C;block&#xFF09;&#x3002;</li>
<li>&#x5F15;&#x5165;viewfs&#x7684;&#x7F3A;&#x70B9;&#xFF1A;&#x7EDF;&#x4E00;schema&#x540E;&#x4E0D;&#x518D;&#x53D8;&#x5316;&#xFF0C;<font color="red">&#x5426;&#x5219;&#x65E0;&#x89E3;&#xFF1F;&#xFF1F;&#xFF1F;</font></li>
</ol>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="https://tech.meituan.com/hdfs_federation.html" target="_blank" rel="external">HDFS Federation&#x5728;&#x7F8E;&#x56E2;&#x70B9;&#x8BC4;&#x7684;&#x5E94;&#x7528;&#x4E0E;&#x6539;&#x8FDB;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;HDFS 2.x&amp;#x5F15;&amp;#x5165;Federation&amp;#x7684;&amp;#x76EE;&amp;#x7684;&amp;#x4E3B;&amp;#x8981;&amp;#x662F;&amp;#x4E24;&amp;#x4E2A;&amp;#xFF1A;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#x6C34;&amp;#x5E73;&amp;#x62C6;&amp;#x5206;nn&amp;#xFF0C;&amp;#x4F7F;&amp;#x96C6;&amp;#x7FA4;&amp;#x80FD;&amp;#x5BB9;&amp;#x7EB3;&amp;#x66F4;&amp;#x591A;&amp;#x7684;&amp;#x5143;&amp;#x4FE1;&amp;#x606F;&lt;/li&gt;
&lt;li&gt;&amp;#x8D1F;&amp;#x8F7D;&amp;#x5747;&amp;#x8861;&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Hadoop" scheme="https://monkeysayhi.github.io/tags/Hadoop/"/>
    
      <category term="HDFS" scheme="https://monkeysayhi.github.io/tags/HDFS/"/>
    
  </entry>
  
  <entry>
    <title>HDFS数据流管道二三问</title>
    <link href="https://monkeysayhi.github.io/2018/11/14/HDFS%E6%95%B0%E6%8D%AE%E6%B5%81%E7%AE%A1%E9%81%93%E4%BA%8C%E4%B8%89%E9%97%AE/"/>
    <id>https://monkeysayhi.github.io/2018/11/14/HDFS数据流管道二三问/</id>
    <published>2018-11-14T10:43:32.000Z</published>
    <updated>2018-11-14T10:56:46.000Z</updated>
    
    <content type="html"><![CDATA[<p>HDFS&#x901A;&#x8FC7;&#x6570;&#x636E;&#x6D41;&#x7684;&#x65B9;&#x5F0F;&#x5199;&#x6570;&#x636E;&#x5757;&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x7248;&#x672C;&#xFF1A;&#x622A;&#x6B62;&#x81F3;2.x&#x3002;</p>
</blockquote>
<h1 id="&#x7BA1;&#x9053;&#x4E2D;&#x7684;IO&#x6D41;"><a href="#&#x7BA1;&#x9053;&#x4E2D;&#x7684;IO&#x6D41;" class="headerlink" title="&#x7BA1;&#x9053;&#x4E2D;&#x7684;IO&#x6D41;"></a>&#x7BA1;&#x9053;&#x4E2D;&#x7684;IO&#x6D41;</h1><p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/HDFS&#x6570;&#x636E;&#x6D41;&#x7BA1;&#x9053;&#x4E8C;&#x4E09;&#x95EE;/&#x7BA1;&#x9053;&#x4E2D;&#x7684;IO&#x6D41;.png" alt="&#x7BA1;&#x9053;&#x4E2D;&#x7684;IO&#x6D41;"></p>
<ul>
<li>in&#xFF1A;&#x4E0A;&#x6E38;&#x8282;&#x70B9;&#x5230;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x7684;&#x8F93;&#x5165;&#x6D41;&#xFF0C;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x901A;&#x8FC7;in&#x63A5;&#x6536;&#x4E0A;&#x6E38;&#x8282;&#x70B9;&#x7684;packet&#x3002;</li>
<li>replyOut&#xFF1A;&#xFF1A;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x5230;&#x4E0A;&#x6E38;&#x8282;&#x70B9;&#x7684;&#x8F93;&#x51FA;&#x6D41;&#xFF0C;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x901A;&#x8FC7;replyOut&#x5411;&#x4E0A;&#x6E38;&#x8282;&#x70B9;&#x53D1;&#x9001;ack&#x3002;</li>
<li>mirrorOut&#xFF1A;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x5230;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x7684;&#x8F93;&#x51FA;&#x6D41;&#xFF0C;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x901A;&#x8FC7;mirrorOut&#x5411;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x955C;&#x50CF;&#x53D1;&#x9001;packet&#x3002;</li>
<li>mirrorIn&#xFF1A;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x5230;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x7684;&#x8F93;&#x5165;&#x6D41;&#xFF0C;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x901A;&#x8FC7;mirrorIn&#x63A5;&#x6536;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x7684;&#x955C;&#x50CF;ack&#x3002;</li>
</ul>
<h1 id="&#x7BA1;&#x9053;&#x4E2D;&#x7684;&#x5173;&#x952E;&#x7EBF;&#x7A0B;"><a href="#&#x7BA1;&#x9053;&#x4E2D;&#x7684;&#x5173;&#x952E;&#x7EBF;&#x7A0B;" class="headerlink" title="&#x7BA1;&#x9053;&#x4E2D;&#x7684;&#x5173;&#x952E;&#x7EBF;&#x7A0B;"></a>&#x7BA1;&#x9053;&#x4E2D;&#x7684;&#x5173;&#x952E;&#x7EBF;&#x7A0B;</h1><p>&#x9664;&#x4E86;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x7BA1;&#x9053;&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;dn&#x90FD;&#x6709;&#x4E24;&#x4E2A;&#x5173;&#x952E;&#x7EBF;&#x7A0B;&#xFF1A;</p>
<ol>
<li>DataXceiver&#x7EBF;&#x7A0B;&#xFF1A;dn&#x4E0A;&#x7BA1;&#x9053;&#x6D41;&#x7684;&#x4E3B;&#x7EBF;&#x7A0B;&#xFF0C;&#x8D1F;&#x8D23;<strong>&#x63A5;&#x6536;&#x4E0A;&#x6E38;&#x7684;packet</strong>&#xFF0C;&#x5E76;<strong>&#x7EE7;&#x7EED;&#x5411;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x7BA1;&#x9053;&#x5199;</strong>&#x3002;&#xFF08;<code>BlockReceiver#receivePacket()</code>&#xFF09;&#x3002;</li>
<li>PacketResponder&#x7EBF;&#x7A0B;&#xFF1A;&#x8D1F;&#x8D23;<strong>&#x63A5;&#x6536;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x7684;ack</strong>&#xFF0C;&#x5E76;<strong>&#x7EE7;&#x7EED;&#x5411;&#x4E0A;&#x6E38;&#x7BA1;&#x9053;&#x54CD;&#x5E94;</strong>&#x3002;</li>
</ol>
<p>&#x4F5C;&#x4E3A;&#x7BA1;&#x9053;&#x7684;&#x53D1;&#x8D77;&#x8005;&#xFF0C;&#x4E5F;&#x662F;&#x7BA1;&#x9053;&#x7684;&#x8D77;&#x70B9;&#xFF0C;&#x9700;&#x8981;&#x4E3B;&#x52A8;&#x5199;&#x5165;&#x6570;&#x636E;&#xFF0C;&#x6709;&#x4E09;&#x4E2A;&#x5173;&#x952E;&#x7EBF;&#x7A0B;&#xFF1A;</p>
<ol>
<li>&#x7528;&#x6237;&#x5199;&#x6570;&#x636E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1A;&#x7528;&#x6237;&#x4EE5;chunk&#x4E3A;&#x7C92;&#x5EA6;&#x5411;&#x7F13;&#x51B2;&#x533A;&#x5199;&#x6570;&#x636E;&#xFF0C;&#x5199;&#x6EE1;&#x4E00;&#x4E2A;packet&#x540E;&#x653E;&#x5165;dataQueue&#x3002;</li>
<li>DataStreamer&#x7EBF;&#x7A0B;&#xFF1A;&#x5BA2;&#x6237;&#x7AEF;&#x4E0A;&#x7BA1;&#x9053;&#x6D41;&#x7684;&#x4E3B;&#x7EBF;&#x7A0B;&#xFF0C;&#x8D1F;&#x8D23;<strong>&#x5C06;packet&#x4ECE;dataQueue&#x79FB;&#x52A8;&#x5230;ackQueue</strong>&#xFF0C;&#x5E76;<strong>&#x5411;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x7BA1;&#x9053;&#x5199;packet</strong>&#x3002;</li>
<li>PacketResponder&#x7EBF;&#x7A0B;&#xFF1A;&#x8D1F;&#x8D23;<strong>&#x63A5;&#x6536;&#x4E0B;&#x6E38;&#x8282;&#x70B9;&#x7684;ack</strong>&#xFF0C;&#x5E76;<strong>&#x79FB;&#x9664;ackQueue&#x4E2D;&#x7684;packet</strong>&#x3002;</li>
</ol>
<p>&#x7ED3;&#x5408;&#x4E0A;&#x56FE;&#xFF0C;DataXceiver&#x7EBF;&#x7A0B;&#x3001;DataStreamer&#x7EBF;&#x7A0B;&#x7EF4;&#x62A4;<code>in-&gt;mirrorOut</code>&#x65B9;&#x5411;&#x7684;packet&#x6570;&#x636E;&#x6D41;&#xFF0C;PacketResponder&#x7EBF;&#x7A0B;&#x7EF4;&#x62A4;<code>mirrorIn-&gt;replyOut</code>&#x65B9;&#x5411;&#x7684;ack&#x6570;&#x636E;&#x6D41;&#x3002;</p>
<h1 id="&#x7BA1;&#x9053;&#x7684;&#x6574;&#x4F53;&#x8FC7;&#x7A0B;"><a href="#&#x7BA1;&#x9053;&#x7684;&#x6574;&#x4F53;&#x8FC7;&#x7A0B;" class="headerlink" title="&#x7BA1;&#x9053;&#x7684;&#x6574;&#x4F53;&#x8FC7;&#x7A0B;"></a>&#x7BA1;&#x9053;&#x7684;&#x6574;&#x4F53;&#x8FC7;&#x7A0B;</h1><p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/HDFS&#x6570;&#x636E;&#x6D41;&#x7BA1;&#x9053;&#x4E8C;&#x4E09;&#x95EE;/&#x7BA1;&#x9053;&#x7684;&#x6574;&#x4F53;&#x8FC7;&#x7A0B;.png" alt="&#x7BA1;&#x9053;&#x7684;&#x6574;&#x4F53;&#x8FC7;&#x7A0B;"></p>
<p>&#x7BA1;&#x9053;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#x5206;&#x4E3A;&#x4E09;&#x4E2A;&#x9636;&#x6BB5;&#xFF1A;</p>
<ol>
<li>&#x7BA1;&#x9053;&#x5EFA;&#x7ACB;&#xFF1A;&#x4EE5;&#x7BA1;&#x9053;&#x7684;&#x65B9;&#x5F0F;&#x5411;&#x4E0B;&#x6E38;&#x53D1;&#x9001;&#x7BA1;&#x9053;&#x5EFA;&#x7ACB;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x4ECE;&#x4E0B;&#x6E38;&#x63A5;&#x6536;&#x7BA1;&#x9053;&#x5EFA;&#x7ACB;&#x7684;&#x54CD;&#x5E94;&#x3002;</li>
<li>&#x7BA1;&#x9053;&#x5199;&#xFF1A;&#x5F53;&#x5BA2;&#x6237;&#x7AEF;&#x6536;&#x5230;&#x7BA1;&#x9053;&#x5EFA;&#x7ACB;&#x6210;&#x529F;&#x7684;ack&#x65F6;&#xFF0C;&#x624D;&#x5229;&#x7528;&#x521A;&#x521A;&#x5EFA;&#x7ACB;&#x7684;&#x7BA1;&#x9053;&#x5F00;&#x59CB;&#x7BA1;&#x9053;&#x5199;&#x6570;&#x636E;&#x5757;&#x7684;&#x5185;&#x5BB9;&#x3002;</li>
<li>&#x7BA1;&#x9053;&#x5173;&#x95ED;&#xFF1A;&#x4EE5;&#x7BA1;&#x9053;&#x7684;&#x65B9;&#x5F0F;&#x5411;&#x4E0B;&#x6E38;&#x53D1;&#x9001;&#x7BA1;&#x9053;&#x5173;&#x95ED;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x4ECE;&#x4E0B;&#x6E38;&#x63A5;&#x6536;&#x7BA1;&#x9053;&#x5173;&#x95ED;&#x7684;&#x54CD;&#x5E94;&#x3002;</li>
</ol>
<p>&#x4E09;&#x4E2A;&#x8FC7;&#x7A0B;&#x90FD;&#x662F;&#x7BA1;&#x9053;&#x5F0F;&#x7684;&#x3002;</p>
<h1 id="&#x4F18;&#x7F3A;&#x70B9;"><a href="#&#x4F18;&#x7F3A;&#x70B9;" class="headerlink" title="&#x4F18;&#x7F3A;&#x70B9;"></a>&#x4F18;&#x7F3A;&#x70B9;</h1><ul>
<li>&#x4F18;&#x70B9;&#xFF1A;&#x5982;&#x679C;&#x8003;&#x8651;&#x4E0A;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x90A3;&#x4E48;&#x7BA1;&#x9053;&#x5199;&#x7684;&#x4F18;&#x70B9;&#x662F;<strong>&#x7F51;&#x7EDC;&#x8D1F;&#x8F7D;&#x6BD4;&#x8F83;&#x5747;&#x8861;</strong>&#x3002;</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;<code>&#x6162;&#x8282;&#x70B9;</code>&#x4F1A;&#x6210;&#x4E3A;&#x5E26;&#x5BBD;&#x74F6;&#x9888;&#xFF0C;&#x4E14;&#x6574;&#x4F53;&#x4E0A;<strong>&#x5EF6;&#x8FDF;&#x66F4;&#x9AD8;</strong>&#x3002;</li>
</ul>
<h1 id="&#x5982;&#x4F55;&#x4F18;&#x5316;&#x5EF6;&#x8FDF;"><a href="#&#x5982;&#x4F55;&#x4F18;&#x5316;&#x5EF6;&#x8FDF;" class="headerlink" title="&#x5982;&#x4F55;&#x4F18;&#x5316;&#x5EF6;&#x8FDF;"></a>&#x5982;&#x4F55;&#x4F18;&#x5316;&#x5EF6;&#x8FDF;</h1><p><code>&#x7BA1;&#x9053;&#x5199;</code>&#x7684;&#x65B9;&#x5F0F;&#x901A;&#x5E38;&#x79F0;&#x4E3A;<code>pipeline</code>&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/HDFS&#x6570;&#x636E;&#x6D41;&#x7BA1;&#x9053;&#x4E8C;&#x4E09;&#x95EE;/&#x7BA1;&#x9053;&#x5199;.png" alt="&#x7BA1;&#x9053;&#x5199;"></p>
<p>&#x4E3A;&#x4E86;&#x4F18;&#x5316;&#x7BA1;&#x9053;&#x5199;&#x7684;&#x5EF6;&#x8FDF;&#x95EE;&#x9898;&#xFF0C;&#x4E1A;&#x754C;&#x8FD8;&#x63D0;&#x51FA;&#x4E86;&#x591A;&#x79CD;&#x5199;&#x65B9;&#x6848;&#xFF1A;</p>
<h2 id="&#x8D85;&#x6B65;&#x5199;"><a href="#&#x8D85;&#x6B65;&#x5199;" class="headerlink" title="&#x8D85;&#x6B65;&#x5199;"></a>&#x8D85;&#x6B65;&#x5199;</h2><p>&#x5982;&#x679C;&#x8FD8;&#x4F7F;&#x7528;<code>&#x7BA1;&#x9053;&#x5199;</code>&#xFF0C;&#x53EF;&#x4EE5;&#x652F;&#x6301;<code>&#x8D85;&#x6B65;&#x5199;</code>&#x3002;</p>
<p>&#x4F20;&#x7EDF;&#x7684;<code>&#x7BA1;&#x9053;&#x5199;</code>&#x65B9;&#x6848;&#x76F8;&#x5F53;&#x4E8E;TCP&#x4E2D;&#x7684;<code>&#x505C;-&#x7B49;&#x534F;&#x8BAE;</code>&#xFF0C;&#x53EF;&#x4EFF;&#x7167;TCP&#xFF0C;&#x7EF4;&#x62A4;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#x652F;&#x6301;&#x8D85;&#x6B65;&#x5199;&#xFF0C;&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x7B49;&#x65B9;&#x6848;&#x540C;&#x6837;&#x9002;&#x7528;&#x3002;</p>
<h2 id="&#x661F;&#x578B;&#x5199;"><a href="#&#x661F;&#x578B;&#x5199;" class="headerlink" title="&#x661F;&#x578B;&#x5199;"></a>&#x661F;&#x578B;&#x5199;</h2><p>&#x5982;&#x679C;&#x7F51;&#x7EDC;&#x8D44;&#x6E90;&#x5145;&#x8DB3;&#xFF0C;&#x53EF;&#x4EE5;&#x6539;&#x7528;<code>&#x661F;&#x578B;&#x5199;</code>&#x3002;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/HDFS&#x6570;&#x636E;&#x6D41;&#x7BA1;&#x9053;&#x4E8C;&#x4E09;&#x95EE;/&#x661F;&#x578B;&#x5199;.png" alt="&#x661F;&#x578B;&#x5199;"></p>
<p>&#x5982;&#x679C;&#x5728;&#x661F;&#x578B;&#x5199;&#x4E2D;&#x53D1;&#x751F;&#x4E86;&#x5931;&#x8D25;&#xFF0C;&#x65E2;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x7BA1;&#x9053;&#x5199;&#x6700;&#x4FDD;&#x5B88;&#x7684;&#x65B9;&#x6848;&#xFF0C;&#x4E2D;&#x65AD;&#x6574;&#x4E2A;&#x5199;&#x91CD;&#x8BD5;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x66F4;&#x6FC0;&#x8FDB;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x5982;&#x5176;&#x4E2D;2&#x4E2A;DN&#x5199;&#x6210;&#x529F;&#x5C31;&#x7EE7;&#x7EED;&#x5411;&#x6210;&#x529F;&#x8282;&#x70B9;&#x5199;&#xFF0C;&#x800C;&#x5931;&#x8D25;&#x7684;&#x8282;&#x70B9;&#x53EF;&#x4EE5;&#x5728;&#x540E;&#x53F0;&#x91CD;&#x8BD5;&#xFF08;&#x5F53;&#x7136;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x4F4E;&#x4E8E;minRep&#x53EF;&#x4EE5;&#x6682;&#x65F6;&#x5FFD;&#x7565;&#xFF09;&#x3002;</p>
<p>&#x663E;&#x7136;&#xFF0C;&#x4E0A;&#x8FF0;&#x65B9;&#x6848;&#x5BF9;&#x4E8E;&#x6162;&#x8282;&#x70B9;&#x7684;&#x4F18;&#x5316;&#x6548;&#x679C;&#x975E;&#x5E38;&#x663E;&#x8457;&#x3002;</p>
<h2 id="Y&#x578B;&#x5199;"><a href="#Y&#x578B;&#x5199;" class="headerlink" title="Y&#x578B;&#x5199;"></a>Y&#x578B;&#x5199;</h2><p>&#x5982;&#x679C;&#x671F;&#x671B;&#x7F51;&#x7EDC;&#x8D44;&#x6E90;&#x4E0E;&#x5EF6;&#x8FDF;&#x5E73;&#x8861;&#xFF0C;&#x53EF;&#x6539;&#x7528;<code>Y&#x578B;&#x5199;</code>&#x3002;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/HDFS&#x6570;&#x636E;&#x6D41;&#x7BA1;&#x9053;&#x4E8C;&#x4E09;&#x95EE;/Y&#x578B;&#x5199;.png" alt="Y&#x578B;&#x5199;"></p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;HDFS&amp;#x901A;&amp;#x8FC7;&amp;#x6570;&amp;#x636E;&amp;#x6D41;&amp;#x7684;&amp;#x65B9;&amp;#x5F0F;&amp;#x5199;&amp;#x6570;&amp;#x636E;&amp;#x5757;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Hadoop" scheme="https://monkeysayhi.github.io/tags/Hadoop/"/>
    
      <category term="HDFS" scheme="https://monkeysayhi.github.io/tags/HDFS/"/>
    
  </entry>
  
  <entry>
    <title>Java中的装箱、拆箱</title>
    <link href="https://monkeysayhi.github.io/2018/11/13/Java%E4%B8%AD%E7%9A%84%E8%A3%85%E7%AE%B1%E3%80%81%E6%8B%86%E7%AE%B1/"/>
    <id>https://monkeysayhi.github.io/2018/11/13/Java中的装箱、拆箱/</id>
    <published>2018-11-13T03:04:12.000Z</published>
    <updated>2018-11-13T03:04:26.000Z</updated>
    
    <content type="html"><![CDATA[<ul>
<li>&#x88C5;&#x7BB1;&#xFF1A;&#x5C06;&#x57FA;&#x672C;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E3A;&#x5305;&#x88C5;&#x5668;&#x7C7B;&#x578B;</li>
<li>&#x62C6;&#x7BB1;&#xFF1A;&#x5C06;&#x5305;&#x88C5;&#x5668;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E3A;&#x57FA;&#x672C;&#x6570;&#x636E;&#x7C7B;&#x578B;</li>
</ul>
<p>&#x88C5;&#x7BB1;&#x4E0E;&#x62C6;&#x7BB1;&#x7684;&#x8FC7;&#x7A0B;&#x65F6;&#x81EA;&#x52A8;&#x8FDB;&#x884C;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x79F0;&#x4E3A;&#x201C;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x201D;&#x3001;&#x201C;&#x81EA;&#x52A8;&#x62C6;&#x7BB1;&#x201D;&#xFF0C;&#x5C5E;&#x4E8E;&#x7F16;&#x8BD1;&#x671F;&#x7684;&#x8BED;&#x6CD5;&#x7CD6;&#x3002;</p>
<a id="more"></a>
<p>&#x4EE5;&#x57FA;&#x672C;&#x7C7B;&#x578B;int&#x4E0E;&#x5305;&#x88C5;&#x7C7B;&#x578B;Integer&#x4E3A;&#x4F8B;&#x8BA8;&#x8BBA;&#x3002;&#x65E2;&#x7136;&#x662F;&#x7F16;&#x8BD1;&#x671F;&#x7684;&#x8BED;&#x6CD5;&#x7CD6;&#xFF0C;&#x90A3;&#x4E48;&#x76F4;&#x63A5;&#x5206;&#x6790;&#x7F16;&#x8BD1;&#x51FA;&#x6765;&#x7684;&#x5B57;&#x8282;&#x7801;&#x5373;&#x53EF;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;jad&#x5DE5;&#x5177;&#xFF08;&#x4F30;&#x8BA1;&#x5185;&#x90E8;&#x5C01;&#x88C5;&#x4E86;javap&#x4E00;&#x7C7B;&#x7684;&#x5DE5;&#x5177;&#xFF09;&#x3002;</p>
<h1 id="&#x88C5;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;"><a href="#&#x88C5;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;" class="headerlink" title="&#x88C5;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;"></a>&#x88C5;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;</h1><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</div><div class="line">  Integer boxing = <span class="number">1</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>jad&#x89E3;&#x6790;class&#x6587;&#x4EF6;&#xFF0C;&#x53D1;&#x73B0;&#x6839;&#x636E;&#x5B57;&#x8282;&#x7801;&#x53CD;&#x7F16;&#x8BD1;&#x4E3A;<code>Integer.valueOf(int)</code>&#x65B9;&#x6CD5;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String args[])</span> </span>{</div><div class="line">  Integer boxing = Integer.valueOf(<span class="number">1</span>);</div><div class="line">  <span class="comment">//    0    0:iconst_1        </span></div><div class="line">  <span class="comment">//    1    1:invokestatic    #2   &lt;Method Integer Integer.valueOf(int)&gt;</span></div><div class="line">  <span class="comment">//    2    4:astore_1        </span></div><div class="line">  <span class="comment">//    3    5:return          </span></div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x9759;&#x6001;&#x5DE5;&#x5382;&#x65B9;&#x6CD5;&#xFF0C;&#x5185;&#x90E8;&#x6700;&#x7EC8;&#x8C03;&#x7528;&#x4E86;Integer&#x7C7B;&#x7684;&#x6784;&#x9020;&#x5668;<code>Integer.&lt;init&gt;(init)</code>&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Integer <span class="title">valueOf</span><span class="params">(<span class="keyword">int</span> i)</span> </span>{</div><div class="line">    <span class="keyword">if</span> (i &gt;= IntegerCache.low &amp;&amp; i &lt;= IntegerCache.high)</div><div class="line">        <span class="keyword">return</span> IntegerCache.cache[i + (-IntegerCache.low)];</div><div class="line">    <span class="keyword">return</span> <span class="keyword">new</span> Integer(i);</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x7279;&#x522B;&#x7684;&#xFF0C;Integer&#x7C7B;&#x9ED8;&#x8BA4;&#x7F13;&#x5B58;<code>-128~127</code>&#x7684;&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#xFF08;&#x4E0A;&#x754C;&#x53EF;&#x901A;&#x8FC7;<code>java.lang.Integer.IntegerCache.high</code>&#x53C2;&#x6570;&#x914D;&#x7F6E;&#xFF0C;&#x6700;&#x5C0F;127&#xFF09;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x7F13;&#x5B58;&#x8303;&#x56F4;&#x5185;&#x7684;&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#x6765;&#x81EA;&#x7F13;&#x5B58;&#x7684;&#x5E38;&#x91CF;&#x6C60;&#xFF0C;&#x76F8;&#x540C;value&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;&#x76F8;&#x7B49;&#xFF1B;&#x7F13;&#x5B58;&#x8303;&#x56F4;&#x5916;&#x7684;&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;&#x5747;&#x4E0D;&#x76F8;&#x7B49;&#x3002;</p>
<h1 id="&#x62C6;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;"><a href="#&#x62C6;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;" class="headerlink" title="&#x62C6;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;"></a>&#x62C6;&#x7BB1;&#x7684;&#x5B9E;&#x73B0;</h1><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</div><div class="line">  <span class="keyword">int</span> unboxing = <span class="keyword">new</span> Integer(<span class="string">&quot;2&quot;</span>);</div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x62C6;&#x7BB1;&#x7684;&#x65F6;&#x5019;&#x7F16;&#x8BD1;&#x4E3A;<code>Integer.intValue()</code>&#x65B9;&#x6CD5;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String args[])</span> </span>{</div><div class="line">  <span class="keyword">int</span> unboxing = (<span class="keyword">new</span> Integer(<span class="string">&quot;2&quot;</span>)).intValue();</div><div class="line">  <span class="comment">//    0    0:new             #2   &lt;Class Integer&gt;</span></div><div class="line">  <span class="comment">//    1    3:dup             </span></div><div class="line">  <span class="comment">//    2    4:ldc1            #3   &lt;String &quot;2&quot;&gt;</span></div><div class="line">  <span class="comment">//    3    6:invokespecial   #4   &lt;Method void Integer(String)&gt;</span></div><div class="line">  <span class="comment">//    4    9:invokevirtual   #5   &lt;Method int Integer.intValue()&gt;</span></div><div class="line">  <span class="comment">//    5   12:istore_1        </span></div><div class="line">  <span class="comment">//    6   13:return          </span></div><div class="line">}</div></pre></td></tr></table></figure>
<p>&#x8BE5;&#x65B9;&#x6CD5;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x5185;&#x90E8;&#x503C;<code>Integer#value</code>:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">intValue</span><span class="params">()</span> </span>{</div><div class="line">    <span class="keyword">return</span> value;</div><div class="line">}</div></pre></td></tr></table></figure>
<h1 id="&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x4E0E;&#x81EA;&#x52A8;&#x62C6;&#x7BB1;&#x7684;&#x9677;&#x9631;"><a href="#&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x4E0E;&#x81EA;&#x52A8;&#x62C6;&#x7BB1;&#x7684;&#x9677;&#x9631;" class="headerlink" title="&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x4E0E;&#x81EA;&#x52A8;&#x62C6;&#x7BB1;&#x7684;&#x9677;&#x9631;"></a>&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x4E0E;&#x81EA;&#x52A8;&#x62C6;&#x7BB1;&#x7684;&#x9677;&#x9631;</h1><p>&#x9677;&#x9631;&#x4E3B;&#x8981;&#x51FA;&#x73B0;&#x5728;&#x5305;&#x88C5;&#x7C7B;&#x578B;&#x4E0E;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x6DF7;&#x7528;&#x7684;&#x573A;&#x666F;&#x4E2D;&#x3002;</p>
<p>&#x4EE5;&#x201C;<code>==</code>&#x201D;&#x4E3A;&#x4F8B;&#xFF1A;</p>
<ul>
<li>&#x5982;&#x679C;&#x4E24;&#x4E2A;&#x64CD;&#x4F5C;&#x6570;&#x90FD;&#x662F;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#xFF0C;&#x5219;&#x4F7F;&#x7528;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x7684;&#x6BD4;&#x8F83;&#x3002;</li>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x64CD;&#x4F5C;&#x6570;&#x662F;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x662F;&#x5305;&#x88C5;&#x7C7B;&#x578B;&#xFF0C;&#x5219;&#x62C6;&#x7BB1;&#x4E3A;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x518D;&#x6BD4;&#x8F83;&#xFF1A;&#x5982;&#x679C;&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#x4E3A;null&#xFF0C;&#x629B;&#x51FA;NullPointerException&#x3002;&#xFF08;&#x60F3;&#x60F3;&#x770B;&#xFF0C;&#x5982;&#x679C;&#x88C5;&#x7BB1;&#x4E3A;&#x5305;&#x88C5;&#x7C7B;&#x578B;&#xFF0C;&#x663E;&#x7136;&#x65E0;&#x6CD5;&#x53D1;&#x73B0;null&#xFF09;</li>
<li>&#x5982;&#x679C;&#x4E24;&#x4E2A;&#x64CD;&#x4F5C;&#x6570;&#x90FD;&#x662F;&#x5305;&#x88C5;&#x7C7B;&#x578B;&#xFF0C;&#x5219;&#x6BD4;&#x8F83;&#x4E8C;&#x8005;&#x7684;&#x5F15;&#x7528;&#x662F;&#x5426;&#x76F8;&#x7B49;&#xFF1A;&#x5982;&#x679C;&#x4E8C;&#x8005;&#x5185;&#x90E8;&#x503C;&#x76F8;&#x7B49;&#xFF0C;&#x4F46;&#x5728;&#x7F13;&#x5B58;&#x8303;&#x56F4;&#x5916;&#xFF0C;&#x5219;&#x5FC5;&#x7136;&#x4E0D;&#x7B49;&#x3002;</li>
</ul>
<blockquote>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x5982;&#x679C;&#x8981;&#x6BD4;&#x8F83;&#x5305;&#x88C5;&#x7C7B;&#x578B;&#x662F;&#x5426;&#x76F8;&#x7B49;&#xFF0C;&#x6700;&#x597D;&#x663E;&#x793A;&#x7684;&#x4F7F;&#x7528;equals&#x65B9;&#x6CD5;&#x3002;</p>
</blockquote>
<p>&#x53E6;&#x5916;&#xFF0C;&#x5982;&#x679C;&#x662F;&#x7B97;&#x672F;&#x8FD0;&#x7B97;&#x3001;&#x9664;&#x201C;<code>==</code>&#x201D;&#x5916;&#x7684;&#x903B;&#x8F91;&#x8FD0;&#x7B97;&#x3001;&#x4F4D;&#x8FD0;&#x7B97;&#x7B49;&#xFF0C;&#x5219;&#x7EDF;&#x4E00;&#x62C6;&#x7BB1;&#x4E3A;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x518D;&#x8FD0;&#x7B97;&#xFF1B;&#x6709;&#x629B;&#x51FA;NullPointerException&#x7684;&#x5371;&#x9669;&#x3002;</p>
]]></content>
    
    <summary type="html">
    
      &lt;ul&gt;
&lt;li&gt;&amp;#x88C5;&amp;#x7BB1;&amp;#xFF1A;&amp;#x5C06;&amp;#x57FA;&amp;#x672C;&amp;#x6570;&amp;#x636E;&amp;#x7C7B;&amp;#x578B;&amp;#x8F6C;&amp;#x6362;&amp;#x4E3A;&amp;#x5305;&amp;#x88C5;&amp;#x5668;&amp;#x7C7B;&amp;#x578B;&lt;/li&gt;
&lt;li&gt;&amp;#x62C6;&amp;#x7BB1;&amp;#xFF1A;&amp;#x5C06;&amp;#x5305;&amp;#x88C5;&amp;#x5668;&amp;#x7C7B;&amp;#x578B;&amp;#x8F6C;&amp;#x6362;&amp;#x4E3A;&amp;#x57FA;&amp;#x672C;&amp;#x6570;&amp;#x636E;&amp;#x7C7B;&amp;#x578B;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#x88C5;&amp;#x7BB1;&amp;#x4E0E;&amp;#x62C6;&amp;#x7BB1;&amp;#x7684;&amp;#x8FC7;&amp;#x7A0B;&amp;#x65F6;&amp;#x81EA;&amp;#x52A8;&amp;#x8FDB;&amp;#x884C;&amp;#x7684;&amp;#xFF0C;&amp;#x56E0;&amp;#x6B64;&amp;#x79F0;&amp;#x4E3A;&amp;#x201C;&amp;#x81EA;&amp;#x52A8;&amp;#x88C5;&amp;#x7BB1;&amp;#x201D;&amp;#x3001;&amp;#x201C;&amp;#x81EA;&amp;#x52A8;&amp;#x62C6;&amp;#x7BB1;&amp;#x201D;&amp;#xFF0C;&amp;#x5C5E;&amp;#x4E8E;&amp;#x7F16;&amp;#x8BD1;&amp;#x671F;&amp;#x7684;&amp;#x8BED;&amp;#x6CD5;&amp;#x7CD6;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Java" scheme="https://monkeysayhi.github.io/tags/Java/"/>
    
  </entry>
  
  <entry>
    <title>线程池ThreadPoolExecutor总结</title>
    <link href="https://monkeysayhi.github.io/2018/11/08/%E7%BA%BF%E7%A8%8B%E6%B1%A0ThreadPoolExecutor%E6%80%BB%E7%BB%93/"/>
    <id>https://monkeysayhi.github.io/2018/11/08/线程池ThreadPoolExecutor总结/</id>
    <published>2018-11-08T04:22:31.000Z</published>
    <updated>2018-11-08T04:22:58.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x4E4B;&#x524D;&#x5728;<a href="/2017/10/26/&#x6E90;&#x7801;|&#x4ECE;&#x4E32;&#x884C;&#x7EBF;&#x7A0B;&#x5C01;&#x95ED;&#x5230;&#x5BF9;&#x8C61;&#x6C60;&#x3001;&#x7EBF;&#x7A0B;&#x6C60;/">&#x6E90;&#x7801;|&#x4ECE;&#x4E32;&#x884C;&#x7EBF;&#x7A0B;&#x5C01;&#x95ED;&#x5230;&#x5BF9;&#x8C61;&#x6C60;&#x3001;&#x7EBF;&#x7A0B;&#x6C60;</a>&#x4E2D;&#x6316;&#x5751;&#x8BF4;&#x8981;&#x7CBE;&#x70BC;&#x4E00;&#x7BC7;&#x77ED;&#x6587;&#x3002;&#x672C;&#x6587;&#x586B;&#x5751;&#xFF0C;&#x603B;&#x7ED3;&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x79CD;&#x7C7B;&#x3001;&#x5E94;&#x7528;&#x573A;&#x666F;&#x3001;ThreadPoolExecutor&#x53C2;&#x6570;&#x542B;&#x4E49;&#xFF0C;&#x6700;&#x540E;&#x7B80;&#x5355;&#x4ECB;&#x7ECD;&#x5982;&#x4F55;&#x4F30;&#x7B97;&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>JDK&#x7248;&#x672C;&#xFF1A;oracle java 1.8.0_102</p>
<p>&#x4E0D;&#x540C;&#x8BED;&#x8A00;&#x3001;&#x540C;&#x4E00;&#x8BED;&#x8A00;&#x4E0D;&#x540C;&#x5E93;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#x5B9E;&#x73B0;&#x6709;&#x5DEE;&#x522B;&#xFF0C;&#x4E0D;&#x8981;&#x62D8;&#x6CE5;&#x4E8E;Java&#x8FD9;&#x4E00;&#x79CD;&#xFF0C;&#x6CA1;&#x4E8B;&#x770B;&#x770B;work stealing&#x7B49;&#x65B9;&#x5F0F;&#x4E5F;&#x633A;&#x6709;&#x610F;&#x601D;&#x7684;&#x3002;</p>
</blockquote>
<h1 id="&#x4E09;&#x53E5;&#x8BDD;&#x62FF;&#x4E0B;&#x7EBF;&#x7A0B;&#x6C60;"><a href="#&#x4E09;&#x53E5;&#x8BDD;&#x62FF;&#x4E0B;&#x7EBF;&#x7A0B;&#x6C60;" class="headerlink" title="&#x4E09;&#x53E5;&#x8BDD;&#x62FF;&#x4E0B;&#x7EBF;&#x7A0B;&#x6C60;"></a>&#x4E09;&#x53E5;&#x8BDD;&#x62FF;&#x4E0B;&#x7EBF;&#x7A0B;&#x6C60;</h1><p>&#x7EBF;&#x7A0B;&#x6C60;&#x5185;&#x90E8;&#x662F;&#x4E00;&#x4E2A;&#x751F;&#x4EA7;&#x8005;-&#x6D88;&#x8D39;&#x8005;&#x6A21;&#x578B;&#xFF1A;</p>
<ul>
<li>&#x7528;&#x6237;&#x662F;&#x751F;&#x4EA7;&#x8005;&#x3002;&#x63D0;&#x4EA4;&#x4EFB;&#x52A1;&#xFF08;task&#xFF09;&#x76F8;&#x5F53;&#x4E8E;&#x751F;&#x4EA7;&#x4EA7;&#x54C1;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#xFF08;worker&#xFF09;&#x662F;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x76F8;&#x5F53;&#x4E8E;&#x6D88;&#x8D39;&#x4EA7;&#x54C1;&#x3002;</li>
</ul>
<p>&#x8BE6;&#x89C1;<a href="/2017/10/26/&#x6E90;&#x7801;|&#x4ECE;&#x4E32;&#x884C;&#x7EBF;&#x7A0B;&#x5C01;&#x95ED;&#x5230;&#x5BF9;&#x8C61;&#x6C60;&#x3001;&#x7EBF;&#x7A0B;&#x6C60;/">&#x6E90;&#x7801;|&#x4ECE;&#x4E32;&#x884C;&#x7EBF;&#x7A0B;&#x5C01;&#x95ED;&#x5230;&#x5BF9;&#x8C61;&#x6C60;&#x3001;&#x7EBF;&#x7A0B;&#x6C60;</a>&#x3002;</p>
<h1 id="&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x79CD;&#x7C7B;"><a href="#&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x79CD;&#x7C7B;" class="headerlink" title="&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x79CD;&#x7C7B;"></a>&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x79CD;&#x7C7B;</h1><p>&#x53EF;&#x901A;&#x8FC7;Executors&#x4E2D;&#x7684;<code>&#x9759;&#x6001;&#x5DE5;&#x5382;&#x65B9;&#x6CD5;</code>&#x521B;&#x5EFA;&#x4E0D;&#x540C;&#x7279;&#x70B9;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x5305;&#x62EC;&#xFF1A;</p>
<ul>
<li>FixedThreadPool&#xFF1A;&#x7EF4;&#x6301;&#x56FA;&#x5B9A;nThreads&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#xFF1B;&#x4F7F;&#x7528;&#x65E0;&#x754C;&#x7684;&#x5F02;&#x6B65;&#x963B;&#x585E;&#x961F;&#x5217;LinkedBlockingQueue&#x4F5C;&#x4E3A;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x3002;</li>
<li>CachedThreadPool&#xFF1A;&#x7EF4;&#x6301;&#x6700;&#x5C11;0&#x3001;&#x6700;&#x591A;<code>Integer.MAX_VALUE</code>&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x9650;&#x5236;&#x7EBF;&#x7A0B;&#x53EF;&#x7F13;&#x5B58;60s&#xFF0C;&#x8D85;&#x65F6;&#x9500;&#x6BC1;&#xFF1B;&#x4F7F;&#x7528;&#x65E0;&#x754C;&#x7684;&#x540C;&#x6B65;&#x961F;&#x5217;SynchronousQueue&#x4F5C;&#x4E3A;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x3002;</li>
<li>SingleThreadExecutor&#xFF1A;&#x7EF4;&#x6301;&#x56FA;&#x5B9A;1&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;FixedThreadPool&#x3002;</li>
<li>ScheduledThreadPool&#xFF1A;&#x7EF4;&#x6301;&#x56FA;&#x5B9A;corePoolSize&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#xFF1B;&#x4F7F;&#x7528;&#x65E0;&#x754C;&#x7684;&#x5EF6;&#x8FDF;&#x961F;&#x5217;DelayedWorkQueue&#x4F5C;&#x4E3A;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x3002;</li>
<li>SingleThreadScheduledExecutor&#xFF1A;&#x7EF4;&#x6301;&#x56FA;&#x5B9A;1&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;ScheduledThreadPool&#x3002;</li>
<li>WorkStealingPool&#xFF1A;&#x5E76;&#x884C;&#x5EA6;&#x4E3A;parallelism&#x7684;ForkJoinPool&#xFF0C;&#x6682;&#x4E0D;&#x8BA8;&#x8BBA;&#x3002;</li>
</ul>
<p>&#x5FFD;&#x7565;WorkStealingPool&#xFF0C;&#x5219;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x6C60;&#x5E95;&#x5C42;&#x90FD;&#x4F7F;&#x7528;&#x4E86;ThreadPoolExecutor&#xFF0C;&#x53EA;&#x662F;&#x53C2;&#x6570;&#x4E0D;&#x540C;&#x3002;</p>
<h1 id="&#x5E94;&#x7528;&#x573A;&#x666F;"><a href="#&#x5E94;&#x7528;&#x573A;&#x666F;" class="headerlink" title="&#x5E94;&#x7528;&#x573A;&#x666F;"></a>&#x5E94;&#x7528;&#x573A;&#x666F;</h1><p>&#x7EBF;&#x7A0B;&#x6C60;&#x5C31;&#x50CF;&#x6C34;&#x7BA1;&#xFF0C;&#x4EFB;&#x52A1;&#x662F;&#x6C34;&#x3002;</p>
<ul>
<li>&#x5982;&#x679C;&#x671F;&#x671B;&#x6C34;&#x7BA1;&#x51FA;&#x6C34;&#x7684;&#x901F;&#x5EA6;&#x56FA;&#x5B9A;&#xFF0C;&#x5C31;&#x4F7F;&#x7528;FixedThreadPool&#x3002;</li>
<li>&#x5982;&#x679C;&#x671F;&#x671B;&#x6C34;&#x7BA1;&#x51FA;&#x6C34;&#x7684;&#x901F;&#x5EA6;&#x53EF;&#x4EE5;&#x5728;&#x6C34;&#x6D41;&#x5927;&#x65F6;&#x589E;&#x5927;&#xFF0C;&#x6C34;&#x6D41;&#x5C0F;&#x65F6;&#x53D8;&#x5C0F;&#xFF0C;&#x5C31;&#x4F7F;&#x7528;CachedThreadPool&#x3002;</li>
<li>&#x5982;&#x679C;&#x671F;&#x671B;&#x6C34;&#x7BA1;&#x51FA;&#x6C34;&#x901F;&#x5EA6;&#x6052;&#x5B9A;&#x4E3A;1&#xFF0C;&#x5C31;&#x4F7F;&#x7528;SingleThreadExecutor&#x3002;</li>
<li>&#x5982;&#x679C;&#x671F;&#x671B;&#x6C34;&#x7BA1;&#x5EF6;&#x8FDF;&#x51FA;&#x6C34;&#xFF08;&#x5EF6;&#x8FDF;&#x53EF;&#x63A7;&#xFF0C;&#x6216;&#x5468;&#x671F;&#x6027;&#xFF09;&#xFF0C;&#x5C31;&#x4F7F;&#x7528;ScheduledThreadPool&#x3002;</li>
</ul>
<h1 id="ThreadPoolExecutor&#x5404;&#x53C2;&#x6570;&#x7684;&#x610F;&#x4E49;"><a href="#ThreadPoolExecutor&#x5404;&#x53C2;&#x6570;&#x7684;&#x610F;&#x4E49;" class="headerlink" title="ThreadPoolExecutor&#x5404;&#x53C2;&#x6570;&#x7684;&#x610F;&#x4E49;"></a>ThreadPoolExecutor&#x5404;&#x53C2;&#x6570;&#x7684;&#x610F;&#x4E49;</h1><ul>
<li>corePoolSize&#xFF1A;&#x7EBF;&#x7A0B;&#x6C60;&#x7EF4;&#x6301;&#x7684;&#x6700;&#x5C0F;&#x7EBF;&#x7A0B;&#x6570;&#xFF08;ScheduledThreadPool&#x7684;&#x8BE5;&#x53C2;&#x6570;&#x8BBE;&#x8BA1;&#x6709;&#x8BEF;&#xFF09;&#xFF0C;&#x61D2;&#x521D;&#x59CB;&#x5316;&#x3002;</li>
<li>maximumPoolSize&#xFF1A;&#x7EBF;&#x7A0B;&#x6C60;&#x7EF4;&#x6301;&#x7684;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x3002;</li>
<li>keepAliveTime&#xFF0C;unit&#xFF1A;&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x5927;&#x4E8E;corePoolSize&#x5C0F;&#x4E8E;&#x7B49;&#x4E8E;maximumPoolSize&#xFF0C;&#x5219;&#x9009;&#x62E9;&#x95F2;&#x7F6E;&#x65F6;&#x95F4;&#x8D85;&#x8FC7;keepAliveTime&#xFF08;&#x5355;&#x4F4D;&#x4E3A;unit&#xFF09;&#x7684;&#x7EBF;&#x7A0B;&#x9500;&#x6BC1;&#xFF0C;&#x76F4;&#x5230;&#x65E0;&#x7EBF;&#x7A0B;&#x53EF;&#x9500;&#x6BC1;&#x6216;&#x7EBF;&#x7A0B;&#x6570;&#x7B49;&#x4E8E;corePoolSize&#x3002;</li>
<li>workQueue&#xFF1A;&#x5E94;&#x8BE5;&#x88AB;&#x79F0;&#x4E3A;taskQueue&#xFF0C;&#x7EF4;&#x62A4;&#x63D0;&#x4EA4;&#x5230;&#x7EBF;&#x7A0B;&#x6C60;&#x7684;task&#x3002;&#x5982;&#x679C;&#x8BBE;&#x7F6E;&#x4E3A;&#x65E0;&#x754C;&#x961F;&#x5217;&#xFF0C;&#x5219;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x5C06;&#x7EF4;&#x6301;&#x4E3A;corePoolSize&#xFF1B;&#x5426;&#x5219;&#xFF0C;&#x5F53;&#x961F;&#x5217;&#x6EE1;&#x65F6;&#xFF0C;&#x5C1D;&#x8BD5;&#x589E;&#x52A0;&#x7EBF;&#x7A0B;&#x6570;&#x76F4;&#x5230;maximumPoolSize&#x6216;&#x961F;&#x5217;&#x4E0D;&#x6EE1;&#x3002;</li>
<li>threadFactory&#xFF1A;&#x4EFB;&#x52A1;&#x4EE5;Runnable&#x3001;Callable&#x7684;&#x5F62;&#x5F0F;&#x63D0;&#x4EA4;&#xFF0C;&#x751F;&#x4EA7;&#x7EBF;&#x7A0B;&#x65F6;&#x4F7F;&#x7528;threadFactory&#x7684;&#x5DE5;&#x5382;&#x65B9;&#x6CD5;&#x3002;&#x9ED8;&#x8BA4;<code>Executors.defaultThreadFactory()</code>&#x3002;</li>
<li>handler&#xFF1A;&#x5982;&#x679C;workQueue&#x662F;&#x6709;&#x754C;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x5F53;workQueue&#x6EE1;&#x65F6;&#xFF0C;&#x4F7F;&#x7528;handler&#x5904;&#x7406;&#x65E0;&#x6CD5;&#x63D0;&#x4EA4;&#x7684;&#x65B0;&#x4EFB;&#x52A1;&#x3002;&#x9ED8;&#x8BA4;<code>Executors.defaultHandler</code>&#xFF0C;workQueue&#x6EE1;&#x65F6;&#x629B;&#x51FA;RejectedExecutionException&#x3002;</li>
</ul>
<p>&#x89C2;&#x5BDF;corePoolSize&#x3001;maximumPoolSize&#x3001;workQueue&#x4E09;&#x8005;&#x7684;&#x5173;&#x7CFB;&#x53EF;&#x77E5;&#xFF1A;</p>
<ul>
<li>&#x5982;&#x679C;&#x4F7F;&#x7528;&#x6709;&#x754C;&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x5219;&#x6700;&#x597D;&#x642D;&#x914D;&#x6709;&#x754C;&#x961F;&#x5217;&#xFF0C;&#x5426;&#x5219;maximumPoolSize&#x53C2;&#x6570;&#x65E0;&#x6548;&#x3002;</li>
<li>&#x76F8;&#x5BF9;&#x7684;&#xFF0C;CachedThreadPool&#x88AB;&#x8BBE;&#x8BA1;&#x4E3A;&#x4E00;&#x79CD;maximumPoolSize&#x65E0;&#x6548;&#x7684;&#x7F13;&#x51B2;&#x6C60;&#xFF0C;&#x540C;&#x65F6;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x65E0;&#x754C;&#x7684;&#x540C;&#x6B65;&#x961F;&#x5217;&#xFF0C;&#x8BA9;&#x201C;&#x5165;&#x961F;&#x201D;&#x76F4;&#x63A5;&#x53D8;&#x6210;&#x201C;&#x6267;&#x884C;&#x201D;&#x3002;</li>
</ul>
<h1 id="&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x7684;&#x4F30;&#x7B97;"><a href="#&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x7684;&#x4F30;&#x7B97;" class="headerlink" title="&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x7684;&#x4F30;&#x7B97;"></a>&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x7684;&#x4F30;&#x7B97;</h1><h2 id="&#x6700;&#x7B80;&#x5316;&#x516C;&#x5F0F;"><a href="#&#x6700;&#x7B80;&#x5316;&#x516C;&#x5F0F;" class="headerlink" title="&#x6700;&#x7B80;&#x5316;&#x516C;&#x5F0F;"></a>&#x6700;&#x7B80;&#x5316;&#x516C;&#x5F0F;</h2><ul>
<li>CPU &#x5BC6;&#x96C6;&#x578B;&#x5E94;&#x7528;&#xFF1A;&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x8BBE;&#x7F6E;&#x4E3A; <strong>N + 1</strong></li>
<li>IO &#x5BC6;&#x96C6;&#x578B;&#x5E94;&#x7528;&#xFF1A;&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x8BBE;&#x7F6E;&#x4E3A; <strong>2N</strong></li>
</ul>
<p>&#x516C;&#x5F0F;&#x7684;&#x610F;&#x4E49;&#x5728;&#x4E8E;<strong>&#x907F;&#x514D;&#x9677;&#x5165;&#x6781;&#x7AEF;&#x60C5;&#x51B5;</strong>&#x3002;&#x5176;&#x4E2D;&#xFF0C;&#x8BA1;&#x7B97;&#x5BC6;&#x96C6;&#x578B;&#x4EFB;&#x52A1;&#x5047;&#x8BBE;&#x201C;<code>&#x7B49;&#x5F85;&#x65F6;&#x95F4;/&#x8BA1;&#x7B97;&#x65F6;&#x95F4;</code>&#x201D;&#x7B49;&#x4E8E;0&#xFF0C;IO&#x5BC6;&#x96C6;&#x578B;&#x4EFB;&#x52A1;&#x5047;&#x8BBE;&#x201C;<code>&#x7B49;&#x5F85;&#x65F6;&#x95F4;/&#x8BA1;&#x7B97;&#x65F6;&#x95F4;</code>&#x201D;&#x7B49;&#x4E8E;1&#x3002;</p>
<p><strong>&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x6709;+1&#x5462;&#xFF1F;</strong></p>
<p>&#x8FD9;&#x662F;&#x56E0;&#x4E3A;&#xFF0C;<em>&#x5C31;&#x7B97;&#x662F;&#x8BA1;&#x7B97;&#x5BC6;&#x96C6;&#x578B;&#x4EFB;&#x52A1;&#xFF0C;&#x4E5F;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x7F3A;&#x9875;&#x7B49;&#x95EE;&#x9898;&#xFF08;&#x9700;&#x8981;&#x4E86;&#x89E3;&#x865A;&#x62DF;&#x5185;&#x5B58;&#x548C;&#x7269;&#x7406;&#x5185;&#x5B58;&#x7684;&#x5206;&#x914D;&#xFF09;&#xFF0C;&#x4EA7;&#x751F;&#x201C;&#x9690;&#x5F0F;&#x201D;&#x7684;IO</em>&#x3002;&#x591A;&#x4E00;&#x4E2A;&#x989D;&#x5916;&#x7684;&#x7EBF;&#x7A0B;&#x80FD;&#x786E;&#x4FDD;CPU&#x65F6;&#x949F;&#x5468;&#x671F;&#x4E0D;&#x4F1A;&#x88AB;&#x6D6A;&#x8D39;&#xFF0C;&#x53C8;&#x4E0D;&#x81F3;&#x4E8E;&#x589E;&#x52A0;&#x592A;&#x591A;&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#x6210;&#x672C;&#x3002;</p>
<h2 id="&#x4E25;&#x683C;&#x516C;&#x5F0F;&#xFF1A;"><a href="#&#x4E25;&#x683C;&#x516C;&#x5F0F;&#xFF1A;" class="headerlink" title="&#x4E25;&#x683C;&#x516C;&#x5F0F;&#xFF1A;"></a>&#x4E25;&#x683C;&#x516C;&#x5F0F;&#xFF1A;</h2><p>&#x5047;&#x8BBE;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x201C;<code>&#x7B49;&#x5F85;&#x65F6;&#x95F4; / &#x8BA1;&#x7B97;&#x65F6;&#x95F4;</code>&#x201D;&#x5927;&#x5C0F;&#x76F8;&#x7B49;&#xFF0C;&#x663E;&#x7136;&#xFF0C;&#x201C;<code>&#x8BA1;&#x7B97;&#x65F6;&#x95F4; / (&#x8BA1;&#x7B97;&#x65F6;&#x95F4; + &#x7B49;&#x5F85;&#x65F6;&#x95F4;)</code>&#x201D;&#x4E5F;&#x76F8;&#x7B49;&#x3002;&#x5BF9;1&#x4E2A;&#x7EBF;&#x7A0B;&#x800C;&#x8A00;&#xFF0C;&#x53EA;&#x6709;&#x8BA1;&#x7B97;&#x65F6;&#x95F4;&#x5360;&#x7528;&#x4E86;<code>&#x903B;&#x8F91;CPU</code>&#xFF0C;&#x5047;&#x8BBE;&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E00;&#x76F4;&#x8FD0;&#x884C;&#x5728;&#x540C;1&#x4E2A;&#x903B;&#x8F91;CPU&#x4E0A;&#xFF0C;&#x663E;&#x7136;&#xFF0C;&#x8BE5;&#x903B;&#x8F91;CPU&#x7684;<code>CPU&#x5229;&#x7528;&#x7387;</code>&#x5373;&#x7B49;&#x4E8E;&#x201C;<code>&#x8BA1;&#x7B97;&#x65F6;&#x95F4; / (&#x8BA1;&#x7B97;&#x65F6;&#x95F4; + &#x7B49;&#x5F85;&#x65F6;&#x95F4;)</code>&#x201D;&#x3002;</p>
<p>&#x5BF9;&#x4E8E;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x60C5;&#x51B5;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x5219;&#x6709;&#x516C;&#x5F0F;&#xFF1A;</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&#x903B;&#x8F91;CPU&#x6570; * CPU&#x5229;&#x7528;&#x7387; / &#x7EBF;&#x7A0B;&#x6570; = &#x8BA1;&#x7B97;&#x65F6;&#x95F4; / (&#x8BA1;&#x7B97;&#x65F6;&#x95F4; + &#x7B49;&#x5F85;&#x65F6;&#x95F4;)</div></pre></td></tr></table></figure>
<p>&#x5012;&#x817E;&#x5012;&#x817E;&#xFF0C;&#x5F97;&#x5230;&#xFF1A;</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&#x7EBF;&#x7A0B;&#x6570; = (1 + &#x7B49;&#x5F85;&#x65F6;&#x95F4;/&#x8BA1;&#x7B97;&#x65F6;&#x95F4;) * &#x903B;&#x8F91;CPU&#x6570; * CPU&#x5229;&#x7528;&#x7387;</div></pre></td></tr></table></figure>
<ul>
<li>&#x201C;<code>1 + &#x7B49;&#x5F85;&#x65F6;&#x95F4;/&#x8BA1;&#x7B97;&#x65F6;&#x95F4;</code>&#x201D; &#x53EA;&#x4E0E;&#x4EFB;&#x52A1;&#x672C;&#x8EAB;&#x6709;&#x5173;&#x3002;</li>
<li>&#x903B;&#x8F91;CPU&#x6570;&#x53EF;&#x901A;&#x8FC7;<code>cat /proc/cpuinfo | grep -c processor</code>&#x5F97;&#x5230;&#x3002;</li>
<li><strong>&#x6807;&#x51C6;&#x7684;CPU&#x5229;&#x7528;&#x7387;</strong>&#x8981;&#x901A;&#x8FC7;&#x5B9E;&#x9645;&#x76D1;&#x63A7;&#x5F97;&#x5230;&#xFF0C;&#x4F46;&#x5728;&#x4F30;&#x7B97;&#x7EBF;&#x7A0B;&#x6C60;&#x5927;&#x5C0F;&#x65F6;&#xFF0C;&#x5E94;&#x770B;&#x505A;&#x201C;<strong>&#x671F;&#x671B;&#x5F97;&#x5230;&#x7684;CPU&#x5229;&#x7528;&#x7387;</strong>&#x201D;&#xFF0C;&#x5373;<strong>&#x53EF;&#x5206;&#x914D;&#x7ED9;&#x8BE5;&#x4EFB;&#x52A1;&#x7684;CPU&#x6BD4;&#x4F8B;</strong>&#x3002;&#x5982;&#x679C;&#x53EA;&#x6253;&#x7B97;&#x5206;&#x914D;&#x4E00;&#x534A;CPU&#x7ED9;&#x4EFB;&#x52A1;&#x7684;&#x8BDD;&#xFF0C;&#x5C31;&#x662F;0.5&#x3002;</li>
</ul>
<p>&#x5982;&#x679C;&#x4F30;&#x7B97;&#x5F97;&#x5230;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x6BD4;&#x8F83;&#x591A;&#xFF0C;&#x90A3;&#x4E48;&#x8FD8;&#x8981;&#x9002;&#x5F53;&#x63D0;&#x9AD8;&#x53EF;&#x5206;&#x914D;&#x7684;CPU&#x6BD4;&#x4F8B;&#xFF0C;&#x56E0;&#x4E3A;&#x7EBF;&#x7A0B;&#x5207;&#x6362;&#x7684;&#x6210;&#x672C;&#x968F;&#x7EBF;&#x7A0B;&#x6570;&#x589E;&#x52A0;&#x800C;&#x589E;&#x52A0;&#x3002;&#x5982;&#x679C;&#x7ADE;&#x4E89;&#x8F83;&#x6FC0;&#x70C8;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x9002;&#x5F53;&#x964D;&#x4F4E;&#x53EF;&#x5206;&#x914D;&#x7684;CPU&#x6BD4;&#x4F8B;&#xFF0C;&#x56E0;&#x4E3A;&#x7ADE;&#x4E89;&#x901A;&#x5E38;&#x4E5F;&#x4F1A;&#x5BFC;&#x81F4;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#xFF0C;&#x4F7F;CPU&#x7A7A;&#x95F2;&#x3002;</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x4E4B;&amp;#x524D;&amp;#x5728;&lt;a href=&quot;/2017/10/26/&amp;#x6E90;&amp;#x7801;|&amp;#x4ECE;&amp;#x4E32;&amp;#x884C;&amp;#x7EBF;&amp;#x7A0B;&amp;#x5C01;&amp;#x95ED;&amp;#x5230;&amp;#x5BF9;&amp;#x8C61;&amp;#x6C60;&amp;#x3001;&amp;#x7EBF;&amp;#x7A0B;&amp;#x6C60;/&quot;&gt;&amp;#x6E90;&amp;#x7801;|&amp;#x4ECE;&amp;#x4E32;&amp;#x884C;&amp;#x7EBF;&amp;#x7A0B;&amp;#x5C01;&amp;#x95ED;&amp;#x5230;&amp;#x5BF9;&amp;#x8C61;&amp;#x6C60;&amp;#x3001;&amp;#x7EBF;&amp;#x7A0B;&amp;#x6C60;&lt;/a&gt;&amp;#x4E2D;&amp;#x6316;&amp;#x5751;&amp;#x8BF4;&amp;#x8981;&amp;#x7CBE;&amp;#x70BC;&amp;#x4E00;&amp;#x7BC7;&amp;#x77ED;&amp;#x6587;&amp;#x3002;&amp;#x672C;&amp;#x6587;&amp;#x586B;&amp;#x5751;&amp;#xFF0C;&amp;#x603B;&amp;#x7ED3;&amp;#x7EBF;&amp;#x7A0B;&amp;#x6C60;&amp;#x7684;&amp;#x79CD;&amp;#x7C7B;&amp;#x3001;&amp;#x5E94;&amp;#x7528;&amp;#x573A;&amp;#x666F;&amp;#x3001;ThreadPoolExecutor&amp;#x53C2;&amp;#x6570;&amp;#x542B;&amp;#x4E49;&amp;#xFF0C;&amp;#x6700;&amp;#x540E;&amp;#x7B80;&amp;#x5355;&amp;#x4ECB;&amp;#x7ECD;&amp;#x5982;&amp;#x4F55;&amp;#x4F30;&amp;#x7B97;&amp;#x7EBF;&amp;#x7A0B;&amp;#x6C60;&amp;#x5927;&amp;#x5C0F;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="并发" scheme="https://monkeysayhi.github.io/tags/%E5%B9%B6%E5%8F%91/"/>
    
      <category term="Java" scheme="https://monkeysayhi.github.io/tags/Java/"/>
    
  </entry>
  
  <entry>
    <title>Java中的final关键字</title>
    <link href="https://monkeysayhi.github.io/2018/11/06/Java%E4%B8%AD%E7%9A%84final%E5%85%B3%E9%94%AE%E5%AD%97/"/>
    <id>https://monkeysayhi.github.io/2018/11/06/Java中的final关键字/</id>
    <published>2018-11-06T10:42:08.000Z</published>
    <updated>2018-11-06T10:44:12.000Z</updated>
    
    <content type="html"><![CDATA[<p>final&#x5173;&#x952E;&#x5B57;&#x53EF;&#x4EE5;&#x4FEE;&#x9970;&#x7C7B;&#x3001;&#x65B9;&#x6CD5;&#x3001;&#x53D8;&#x91CF;&#x3002;&#x672C;&#x8D28;&#x4F5C;&#x7528;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#x201C;<strong>&#x58F0;&#x660E;&#x88AB;&#x4FEE;&#x9970;&#x5BF9;&#x8C61;&#x53EA;&#x8BFB;</strong>&#x201D;&#xFF0C;&#x4E0D;&#x540C;&#x7528;&#x6CD5;&#x5BF9;&#x5E94;&#x4E0D;&#x540C;&#x7684;&#x5177;&#x4F53;&#x89E3;&#x91CA;&#x3002;</p>
<a id="more"></a>
<h1 id="final&#x7C7B;"><a href="#final&#x7C7B;" class="headerlink" title="final&#x7C7B;"></a>final&#x7C7B;</h1><p><strong>final&#x7C7B;&#x8868;&#x793A;&#x8BE5;&#x7C7B;&#x662F;&#x5B8C;&#x6574;&#xFF08;&#x53EF;&#x7406;&#x89E3;&#x4E3A;&#x6700;&#x7EC8;&#x7248;&#x672C;&#xFF09;&#x7684;&#xFF0C;&#x7981;&#x6B62;&#x6269;&#x5C55;</strong>&#x3002;final&#x6807;&#x8BB0;&#x4F1A;&#x5199;&#x5165;class&#x6587;&#x4EF6;&#x7684;&#x7C7B;&#x5B9A;&#x4E49;&#x4E2D;&#xFF0C;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x73B0;&#x4E0A;&#x6E38;extends&#x4E86;&#x4E00;&#x4E2A;final&#x7C7B;&#x540E;&#xFF0C;&#x5219;&#x7F16;&#x8BD1;&#x5931;&#x8D25;&#xFF0C;&#x4ECE;&#x8BED;&#x6CD5;&#x4E0A;&#x4FDD;&#x8BC1;&#x4E0D;&#x80FD;extends&#x4E00;&#x4E2A;final&#x7C7B;&#x3002;</p>
<p>final&#x7C7B;&#x7ECF;&#x5E38;&#x7528;&#x4E8E;&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x7684;&#x6784;&#x9020;&#x4E2D;&#xFF1A;&#x5982;&#x679C;&#x4E0D;&#x4F7F;&#x7528;final&#x4FEE;&#x9970;&#xFF0C;&#x4E14;&#x6709;&#x5BF9;&#x5B50;&#x7C7B;&#x53EF;&#x89C1;&#x7684;&#x53EF;&#x53D8;&#x6210;&#x5458;&#x53D8;&#x91CF;&#xFF0C;&#x5219;extends&#x8BE5;&#x201C;&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x201D;&#x540E;&#xFF0C;&#x5B50;&#x7C7B;&#x5C31;&#x53D8;&#x6210;&#x4E86;&#x53EF;&#x53D8;&#x7C7B;&#x3002;&#x8003;&#x8651;&#x5230;&#x591A;&#x6001;&#x7684;&#x5B58;&#x5728;&#xFF0C;&#x8FD9;&#x79CD;&#x201C;&#x6B67;&#x4E49;&#x201D;&#x975E;&#x5E38;&#x5371;&#x9669;&#x3002;&#x8BE6;&#x89C1;&#xFF1A;<a href="/2017/09/20/&#x5B9E;&#x73B0;&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x65F6;&#x5982;&#x4F55;&#x7981;&#x6B62;&#x5B50;&#x7C7B;&#x5316;&#xFF1F;/">&#x5B9E;&#x73B0;&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x65F6;&#x5982;&#x4F55;&#x7981;&#x6B62;&#x5B50;&#x7C7B;&#x5316;&#xFF1F;</a>&#x3002;</p>
<p>&#x4F8B;&#xFF1A;String&#x7C7B;&#x3001;Interger&#x7C7B;&#x7B49;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="keyword">final</span> <span class="class"><span class="keyword">class</span> <span class="title">String</span></span></div></pre></td></tr></table></figure>
<h1 id="final&#x65B9;&#x6CD5;"><a href="#final&#x65B9;&#x6CD5;" class="headerlink" title="final&#x65B9;&#x6CD5;"></a>final&#x65B9;&#x6CD5;</h1><p>&#x4E0E;final&#x7C7B;&#x7684;&#x8BED;&#x4E49;&#x76F8;&#x4F3C;&#xFF0C;<strong>final&#x65B9;&#x6CD5;&#x8868;&#x793A;&#x8BE5;&#x65B9;&#x6CD5;&#x662F;&#x5B8C;&#x6574;&#x7684;&#xFF0C;&#x7981;&#x6B62;&#x91CD;&#x5199;</strong>&#x3002;final&#x6807;&#x8BB0;&#x4F1A;&#x5199;&#x5165;class&#x6587;&#x4EF6;&#x7684;&#x6210;&#x5458;&#x65B9;&#x6CD5;&#x5B9A;&#x4E49;&#x4E2D;&#xFF0C;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x73B0;&#x7EE7;&#x627F;&#x94FE;&#x4E0A;&#x6E38;&#x6709;&#x51FD;&#x6570;&#x7B7E;&#x540D;&#x76F8;&#x540C;&#x7684;final&#x65B9;&#x6CD5;&#xFF08;&#x91CD;&#x5199;&#xFF09;&#xFF0C;&#x5219;&#x7F16;&#x8BD1;&#x5931;&#x8D25;&#xFF0C;&#x4ECE;&#x8BED;&#x6CD5;&#x4E0A;&#x4FDD;&#x8BC1;&#x4E0D;&#x80FD;&#x91CD;&#x5199;&#x4E00;&#x4E2A;final&#x65B9;&#x6CD5;&#xFF1B;&#x540C;&#x65F6;&#xFF0C;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x5B8C;&#x6210;&#x5BF9;final&#x65B9;&#x6CD5;&#x7684;&#x89E3;&#x6790;&#xFF08;<code>&#x9759;&#x6001;&#x7ED1;&#x5B9A;</code>&#xFF09;&#x3002;</p>
<p>&#x4F8B;&#xFF1A;com.sun.org.apache.bcel.internal.classfile.Signature&#x4E2D;&#x7684;dump&#x65B9;&#x6CD5;&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">void</span> <span class="title">dump</span><span class="params">(DataOutputStream file)</span> <span class="keyword">throws</span> IOException</span></div><div class="line">{</div><div class="line">  <span class="keyword">super</span>.dump(file);</div><div class="line">  file.writeShort(signature_index);</div><div class="line">}</div></pre></td></tr></table></figure>
<h1 id="final&#x53D8;&#x91CF;"><a href="#final&#x53D8;&#x91CF;" class="headerlink" title="final&#x53D8;&#x91CF;"></a>final&#x53D8;&#x91CF;</h1><h2 id="final&#x6210;&#x5458;&#x53D8;&#x91CF;"><a href="#final&#x6210;&#x5458;&#x53D8;&#x91CF;" class="headerlink" title="final&#x6210;&#x5458;&#x53D8;&#x91CF;"></a>final&#x6210;&#x5458;&#x53D8;&#x91CF;</h2><p>final&#x6210;&#x5458;&#x53D8;&#x91CF;&#x4F53;&#x73B0;&#x4E86;&#x6700;&#x76F4;&#x89C2;&#x7684;final&#x8BED;&#x4E49;&#xFF1A;<strong>final&#x6210;&#x5458;&#x53D8;&#x91CF;&#x8868;&#x793A;&#x8BE5;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x53EA;&#x8BFB;</strong>&#xFF08;&#x5728;&#x7B2C;&#x4E00;&#x6B21;&#x8D4B;&#x503C;&#x540E;&#x5C31;&#x4E0D;&#x80FD;&#x518D;&#x4FEE;&#x6539;&#xFF09;&#x3002;final&#x6807;&#x8BB0;&#x4F1A;&#x5199;&#x5165;class&#x6587;&#x4EF6;&#x7684;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x5B9A;&#x4E49;&#x4E2D;&#xFF0C;&#x5728;&#x7F16;&#x8BD1;&#x5668;&#x548C;&#x8FD0;&#x884C;&#x671F;&#x90FD;&#x4F1A;&#x8FDB;&#x884C;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x73B0;&#x7B2C;&#x4E8C;&#x6B21;&#x4FEE;&#x6539;&#x5C31;&#x7F16;&#x8BD1;&#x5931;&#x8D25;&#x6216;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#x3002;</p>
<p>&#x5982;&#x679C;&#x60F3;&#x5B9E;&#x73B0;&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#xFF0C;&#x901A;&#x5E38;&#x5EFA;&#x8BAE;&#x5C3D;&#x91CF;&#x4F7F;&#x7528;final&#x4FEE;&#x9970;&#x6BCF;&#x4E00;&#x4E2A;&#x6210;&#x5458;&#x53D8;&#x91CF;&#xFF08;&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;&#x7B49;&#x4F1A;&#x8FDD;&#x80CC;&#x8FD9;&#x4E00;&#x5EFA;&#x8BAE;&#xFF09;&#x3002;</p>
<p>&#x5982;&#x679C;final&#x6210;&#x5458;&#x53D8;&#x91CF;&#x7684;&#x521D;&#x59CB;&#x5316;&#x88AB;&#x6536;&#x96C6;&#x5230;&#x8BE5;&#x7C7B;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x5219;final&#x6210;&#x5458;&#x53D8;&#x91CF;&#x521D;&#x59CB;&#x5316;&#x4E4B;&#x524D;&#x7684;&#x53D8;&#x91CF;&#x901A;&#x5E38;&#x5177;&#x6709;&#x5185;&#x5B58;&#x53EF;&#x89C1;&#x6027;&#xFF0C;&#x4F46;&#x8FD9;&#x4E00;&#x6027;&#x8D28;&#x5E76;&#x4E0D;&#x5BB9;&#x6613;&#x5E94;&#x7528;&#xFF0C;&#x4E0D;&#x5EFA;&#x8BAE;&#x5229;&#x7528;&#x3002;&#x8BE6;&#x89C1;&#xFF1A;<a href="/2017/12/28/&#x4E00;&#x6587;&#x89E3;&#x51B3;&#x5185;&#x5B58;&#x5C4F;&#x969C;/#final&#x5173;&#x952E;&#x5B57;">&#x4E00;&#x6587;&#x89E3;&#x51B3;&#x5185;&#x5B58;&#x5C4F;&#x969C;</a>&#x3002;</p>
<p>&#x4F8B;&#xFF1A;Integer#value&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> value;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">public</span> <span class="title">Integer</span><span class="params">(<span class="keyword">int</span> value)</span> </span>{</div><div class="line">    <span class="keyword">this</span>.value = value;</div><div class="line">}</div></pre></td></tr></table></figure>
<blockquote>
<p>&#x663E;&#x5F0F;&#x7684;&#x7528;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x521D;&#x59CB;&#x5316;final&#x6210;&#x5458;&#x53D8;&#x91CF;&#x3002;</p>
</blockquote>
<h3 id="&#x5E38;&#x91CF;"><a href="#&#x5E38;&#x91CF;" class="headerlink" title="&#x5E38;&#x91CF;"></a>&#x5E38;&#x91CF;</h3><p>&#x5982;&#x679C;&#x5728;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x58F0;&#x660E;&#x65F6;&#x5B8C;&#x6210;&#x521D;&#x59CB;&#x5316;&#xFF08;&#x7B2C;&#x4E00;&#x6B21;&#x8D4B;&#x503C;&#xFF09;&#xFF0C;&#x5219;&#x8BE5;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x88AB;JVM&#x89C6;&#x4F5C;&#x5E38;&#x91CF;&#x3002;</p>
<p>&#x5BF9;&#x4E8E;&#x7F16;&#x8BD1;&#x671F;&#x80FD;&#x786E;&#x5B9A;&#x521D;&#x59CB;&#x503C;&#x7684;&#x5E38;&#x91CF;&#xFF08;&#x5982;<code>final int a = 1;</code>&#xFF09;&#xFF0C;&#x901A;&#x5E38;&#x80FD;&#x901A;&#x8FC7;<code>&#x5E38;&#x91CF;&#x6298;&#x53E0;</code>&#x3001;<code>&#x5E38;&#x91CF;&#x4F20;&#x64AD;</code>&#x7B49;&#x6280;&#x672F;&#xFF0C;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x5B8C;&#x6210;&#x5E38;&#x91CF;&#x7684;&#x4F18;&#x5316;&#x548C;&#x89E3;&#x6790;&#x3002;</p>
<p>&#x4F8B;&#xFF1A;<code>Integer.SIZE</code>&#x548C;<code>Integer.BYTES</code>&#xFF1A;</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="meta">@Native</span> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> SIZE = <span class="number">32</span>;</div><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> BYTES = SIZE / Byte.SIZE;</div></pre></td></tr></table></figure>
<h2 id="final&#x5C40;&#x90E8;&#x53D8;&#x91CF;"><a href="#final&#x5C40;&#x90E8;&#x53D8;&#x91CF;" class="headerlink" title="final&#x5C40;&#x90E8;&#x53D8;&#x91CF;"></a>final&#x5C40;&#x90E8;&#x53D8;&#x91CF;</h2><p><strong>final&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x4E5F;&#x8868;&#x793A;&#x8BE5;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x53EA;&#x8BFB;</strong>&#xFF0C;&#x4F46;&#x4E0E;final&#x6210;&#x5458;&#x53D8;&#x91CF;&#x4E0D;&#x540C;&#xFF0C;final&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x53EA;&#x662F;java&#x4E2D;&#x7684;&#x8BED;&#x6CD5;&#x7CD6;&#xFF0C;<em>&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x4E0A;&#x7684;final&#x4FEE;&#x9970;&#x5E76;&#x4E0D;&#x4F1A;&#x5199;&#x5165;class&#x6587;&#x4EF6;&#xFF0C;&#x66F4;&#x65E0;&#x6CD5;&#x51FA;&#x73B0;&#x5728;&#x8FD0;&#x884C;&#x671F;</em>&#x3002;&#x5982;&#x679C;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x88AB;final&#x4FEE;&#x9970;&#xFF0C;&#x5219;<em>&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x7F16;&#x8BD1;&#x65F6;&#x4F1A;&#x68C0;&#x67E5;&#x8BE5;&#x53D8;&#x91CF;&#x662F;&#x5426;&#x6709;&#x53EF;&#x80FD;&#x53D1;&#x751F;&#x7B2C;&#x4E8C;&#x6B21;&#x4FEE;&#x6539;</em>&#xFF0C;&#x6709;&#x53EF;&#x80FD;&#x5C31;&#x7F16;&#x8BD1;&#x5931;&#x8D25;&#xFF1B;&#x5426;&#x5219;&#xFF0C;&#x6D88;&#x9664;final&#x4FEE;&#x9970;&#x3002;</p>
<p>&#x4F8B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/Java&#x4E2D;&#x7684;final&#x5173;&#x952E;&#x5B57;/final&#x5C40;&#x90E8;&#x53D8;&#x91CF;.png" alt="final&#x5C40;&#x90E8;&#x53D8;&#x91CF;"></p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;final&amp;#x5173;&amp;#x952E;&amp;#x5B57;&amp;#x53EF;&amp;#x4EE5;&amp;#x4FEE;&amp;#x9970;&amp;#x7C7B;&amp;#x3001;&amp;#x65B9;&amp;#x6CD5;&amp;#x3001;&amp;#x53D8;&amp;#x91CF;&amp;#x3002;&amp;#x672C;&amp;#x8D28;&amp;#x4F5C;&amp;#x7528;&amp;#x53EF;&amp;#x4EE5;&amp;#x7406;&amp;#x89E3;&amp;#x4E3A;&amp;#x201C;&lt;strong&gt;&amp;#x58F0;&amp;#x660E;&amp;#x88AB;&amp;#x4FEE;&amp;#x9970;&amp;#x5BF9;&amp;#x8C61;&amp;#x53EA;&amp;#x8BFB;&lt;/strong&gt;&amp;#x201D;&amp;#xFF0C;&amp;#x4E0D;&amp;#x540C;&amp;#x7528;&amp;#x6CD5;&amp;#x5BF9;&amp;#x5E94;&amp;#x4E0D;&amp;#x540C;&amp;#x7684;&amp;#x5177;&amp;#x4F53;&amp;#x89E3;&amp;#x91CA;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Java" scheme="https://monkeysayhi.github.io/tags/Java/"/>
    
      <category term="JVM" scheme="https://monkeysayhi.github.io/tags/JVM/"/>
    
  </entry>
  
  <entry>
    <title>Java中的常见OOM及原因</title>
    <link href="https://monkeysayhi.github.io/2018/11/05/Java%E4%B8%AD%E7%9A%84%E5%B8%B8%E8%A7%81OOM%E5%8F%8A%E5%8E%9F%E5%9B%A0/"/>
    <id>https://monkeysayhi.github.io/2018/11/05/Java中的常见OOM及原因/</id>
    <published>2018-11-05T10:41:44.000Z</published>
    <updated>2018-11-05T10:41:55.000Z</updated>
    
    <content type="html"><![CDATA[<p>Java&#x4E2D;&#x7684;OOM&#xFF08;Out of Memory&#xFF09;&#x6307;java.lang.OutOfMemoryError&#x9519;&#x8BEF;&#x3002;&#x4E86;&#x89E3;JVM&#x7684;&#x57FA;&#x672C;&#x539F;&#x7406;&#x540E;&#xFF0C;&#x5F88;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#x4EE5;&#x4E0B;&#x51E0;&#x79CD;&#x5E38;&#x89C1;&#x7684;OOM&#x3002;</p>
<a id="more"></a>
<h1 id="java-lang-OutOfMemoryError-Java-heap-space"><a href="#java-lang-OutOfMemoryError-Java-heap-space" class="headerlink" title="java.lang.OutOfMemoryError:Java heap space"></a>java.lang.OutOfMemoryError:Java heap space</h1><p>&#x8FD9;&#x662F;&#x6700;&#x5E38;&#x89C1;&#x7684;OOM&#x539F;&#x56E0;&#x3002;</p>
<p>&#x5806;&#x4E2D;&#x4E3B;&#x8981;&#x5B58;&#x653E;&#x5404;&#x79CD;&#x5BF9;&#x8C61;&#x5B9E;&#x4F8B;&#xFF0C;&#x8FD8;&#x6709;&#x5E38;&#x91CF;&#x6C60;&#x7B49;&#x7ED3;&#x6784;&#x3002;&#x5F53;JVM&#x53D1;&#x73B0;&#x5806;&#x4E2D;&#x6CA1;&#x6709;&#x8DB3;&#x591F;&#x7684;&#x7A7A;&#x95F4;&#x5206;&#x914D;&#x7ED9;&#x65B0;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x629B;&#x51FA;&#x8BE5;&#x5F02;&#x5E38;&#x3002;&#x5177;&#x4F53;&#x6765;&#x8BB2;&#xFF0C;&#x5728;&#x521A;&#x53D1;&#x73B0;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#x65F6;&#xFF0C;&#x4F1A;&#x5148;&#x8FDB;&#x884C;&#x4E00;&#x6B21;Full GC&#xFF0C;&#x5982;&#x679C;GC&#x540E;&#x8FD8;&#x662F;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#xFF0C;&#x518D;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#x3002;</p>
<p>&#x5F15;&#x8D77;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#x7684;&#x539F;&#x56E0;&#x4E3B;&#x8981;&#x6709;&#xFF1A;</p>
<ul>
<li>&#x4E1A;&#x52A1;&#x9AD8;&#x5CF0;&#xFF0C;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x8FC7;&#x591A;</li>
<li>&#x5185;&#x5B58;&#x6CC4;&#x9732;</li>
<li>&#x5185;&#x5B58;&#x788E;&#x7247;&#x4E25;&#x91CD;&#xFF0C;&#x65E0;&#x6CD5;&#x5206;&#x914D;&#x7ED9;&#x5927;&#x5BF9;&#x8C61;</li>
</ul>
<h1 id="java-lang-OutOfMemoryError-Metaspace"><a href="#java-lang-OutOfMemoryError-Metaspace" class="headerlink" title="java.lang.OutOfMemoryError:Metaspace"></a>java.lang.OutOfMemoryError:Metaspace</h1><p>&#x65B9;&#x6CD5;&#x533A;&#x4E3B;&#x8981;&#x5B58;&#x50A8;&#x7C7B;&#x7684;&#x5143;&#x4FE1;&#x606F;&#xFF0C;&#x5B9E;&#x73B0;&#x5728;&#x5143;&#x6570;&#x636E;&#x533A;&#x3002;&#x5F53;JVM&#x53D1;&#x73B0;&#x5143;&#x6570;&#x636E;&#x533A;&#x6CA1;&#x6709;&#x8DB3;&#x591F;&#x7684;&#x7A7A;&#x95F4;&#x5206;&#x914D;&#x7ED9;&#x52A0;&#x8F7D;&#x7684;&#x7C7B;&#x65F6;&#xFF0C;&#x629B;&#x51FA;&#x8BE5;&#x5F02;&#x5E38;&#x3002;</p>
<p>&#x5F15;&#x8D77;&#x5143;&#x6570;&#x636E;&#x533A;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#x7684;&#x539F;&#x56E0;&#x4E3B;&#x8981;&#x6709;&#xFF1A;</p>
<ul>
<li>&#x52A0;&#x8F7D;&#x7684;&#x7C7B;&#x592A;&#x591A;&#xFF0C;&#x5E38;&#x89C1;&#x4E8E;Tomcat&#x7B49;&#x5BB9;&#x5668;&#x4E2D;</li>
</ul>
<p>&#x4F46;&#x662F;&#x5143;&#x6570;&#x636E;&#x533A;&#x88AB;&#x5B9E;&#x73B0;&#x5728;&#x5806;&#x5916;&#xFF0C;&#x4E3B;&#x8981;&#x53D7;&#x5230;&#x8FDB;&#x7A0B;&#x672C;&#x8EAB;&#x7684;&#x5185;&#x5B58;&#x9650;&#x5236;&#xFF0C;&#x8FD9;&#x79CD;&#x5B9E;&#x73B0;&#x4E0B;&#x5F88;&#x96BE;&#x6EA2;&#x51FA;&#x3002;</p>
<h2 id="java-lang-OutOfMemoryError-Permgen-space"><a href="#java-lang-OutOfMemoryError-Permgen-space" class="headerlink" title="java.lang.OutOfMemoryError:Permgen space"></a>java.lang.OutOfMemoryError:Permgen space</h2><p>jdk7&#x4E2D;&#xFF0C;&#x65B9;&#x6CD5;&#x533A;&#x88AB;&#x5B9E;&#x73B0;&#x5728;&#x6C38;&#x4E45;&#x4EE3;&#x4E2D;&#xFF0C;&#x9519;&#x8BEF;&#x539F;&#x56E0;&#x540C;&#x4E0A;&#x3002;</p>
<p>&#x6C38;&#x4E45;&#x4EE3;&#x975E;&#x5E38;&#x5C0F;&#xFF0C;&#x800C;&#x4E14;&#x4E0D;&#x4F1A;&#x88AB;&#x56DE;&#x6536;&#xFF0C;&#x5F88;&#x5BB9;&#x6613;&#x6EA2;&#x51FA;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;jdk8&#x5F7B;&#x5E95;&#x5E9F;&#x9664;&#x4E86;&#x6C38;&#x4E45;&#x4EE3;&#xFF0C;&#x5C06;&#x65B9;&#x6CD5;&#x533A;&#x5B9E;&#x73B0;&#x5728;&#x5143;&#x6570;&#x636E;&#x533A;&#x3002;</p>
<h1 id="java-lang-OutOfMemoryError-Unable-to-create-new-native-thread"><a href="#java-lang-OutOfMemoryError-Unable-to-create-new-native-thread" class="headerlink" title="java.lang.OutOfMemoryError:Unable to create new native thread"></a>java.lang.OutOfMemoryError:Unable to create new native thread</h1><p>&#x4EE5;Linux&#x7CFB;&#x7EDF;&#x4E3A;&#x4F8B;&#xFF0C;JVM&#x521B;&#x5EFA;&#x7684;&#x7EBF;&#x7A0B;&#x4E0E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x4E00;&#x4E00;&#x5BF9;&#x5E94;&#xFF0C;&#x53D7;&#x5230;&#x4EE5;&#x4E0B;&#x9650;&#x5236;&#xFF1A;</p>
<ul>
<li>&#x8FDB;&#x7A0B;&#x548C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x5185;&#x5B58;&#x8D44;&#x6E90;&#x9650;&#x5236;&#x3002;&#x5176;&#x4E2D;&#xFF0C;&#x4E00;&#x4E2A;JVM&#x7EBF;&#x7A0B;&#x81F3;&#x5C11;&#x8981;&#x5360;&#x7528;OS&#x7684;&#x7EBF;&#x7A0B;&#x6808;+JVM&#x7684;&#x865A;&#x62DF;&#x673A;&#x6808; = 8MB + 1MB = 9MB&#xFF08;&#x5F53;&#x7136;JVM&#x5B9E;&#x73B0;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4E0D;&#x4F7F;&#x7528;&#x8FD9;1MB&#x7684;JVM&#x865A;&#x62DF;&#x673A;&#x6808;&#xFF09;&#x3002;</li>
<li>&#x8FDB;&#x7A0B;&#x548C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x9650;&#x5236;&#x3002;</li>
<li>Linux&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x88AB;&#x5B9E;&#x73B0;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x8FDB;&#x7A0B;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x8FD8;&#x53D7;&#x5230;pid&#x6570;&#x91CF;&#x7684;&#x9650;&#x5236;&#x3002;</li>
</ul>
<p>&#x5F53;&#x65E0;&#x6CD5;&#x5728;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E2D;&#x7EE7;&#x7EED;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x65F6;&#xFF0C;&#x629B;&#x51FA;&#x4E0A;&#x8FF0;&#x5F02;&#x5E38;&#x3002;</p>
<p>&#x89E3;&#x51B3;&#x529E;&#x6CD5;&#x4ECE;&#x539F;&#x56E0;&#x4E2D;&#x627E;&#xFF1A;</p>
<ul>
<li>&#x5185;&#x5B58;&#x8D44;&#x6E90;&#xFF1A;&#x8C03;&#x5C0F;OS&#x7684;&#x7EBF;&#x7A0B;&#x6808;&#x3001;JVM&#x7684;&#x865A;&#x62DF;&#x673A;&#x6808;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;&#x6570;&#xFF1A;&#x589E;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x9650;&#x5236;&#x3002;</li>
<li>pid&#xFF1A;&#x589E;&#x5927;pid&#x8303;&#x56F4;&#x3002;</li>
</ul>
<h1 id="&#x5176;&#x4ED6;&#x5F02;&#x5E38;"><a href="#&#x5176;&#x4ED6;&#x5F02;&#x5E38;" class="headerlink" title="&#x5176;&#x4ED6;&#x5F02;&#x5E38;"></a>&#x5176;&#x4ED6;&#x5F02;&#x5E38;</h1><h2 id="java-lang-OutOfMemoryError-GC-overhead-limit-exceeded"><a href="#java-lang-OutOfMemoryError-GC-overhead-limit-exceeded" class="headerlink" title="java.lang.OutOfMemoryError:GC overhead limit exceeded"></a>java.lang.OutOfMemoryError:GC overhead limit exceeded</h2><p>&#x9ED8;&#x8BA4;&#x914D;&#x7F6E;&#x4E0B;&#xFF0C;&#x5982;&#x679C;GC&#x82B1;&#x8D39;&#x4E86;98%&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x56DE;&#x6536;&#x7684;&#x5185;&#x5B58;&#x90FD;&#x4E0D;&#x8DB3;2%&#x7684;&#x8BDD;&#xFF0C;&#x629B;&#x51FA;&#x8BE5;&#x5F02;&#x5E38;&#x3002;</p>
<h2 id="java-lang-OutOfMemoryError-Out-of-swap-space"><a href="#java-lang-OutOfMemoryError-Out-of-swap-space" class="headerlink" title="java.lang.OutOfMemoryError:Out of swap space"></a>java.lang.OutOfMemoryError:Out of swap space</h2><p>&#x5982;&#x679C;JVM&#x7533;&#x8BF7;&#x7684;&#x5185;&#x5B58;&#x5927;&#x4E8E;&#x53EF;&#x7528;&#x7269;&#x7406;&#x5185;&#x5B58;&#xFF0C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4F1A;&#x5C06;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x4EA4;&#x6362;&#x5230;&#x78C1;&#x76D8;&#x4E0A;&#x53BB;&#xFF08;&#x4EA4;&#x6362;&#x533A;&#xFF09;&#x3002;&#x5982;&#x679C;&#x4EA4;&#x6362;&#x533A;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#xFF0C;&#x629B;&#x51FA;&#x8BE5;&#x5F02;&#x5E38;&#x3002;</p>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;:</p>
<ul>
<li><a href="https://www.jianshu.com/p/2fdee831ed03" target="_blank" rel="external">Java&#x5185;&#x5B58;&#x6EA2;&#x51FA;(OOM)&#x5F02;&#x5E38;&#x5B8C;&#x5168;&#x6307;&#x5357;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;Java&amp;#x4E2D;&amp;#x7684;OOM&amp;#xFF08;Out of Memory&amp;#xFF09;&amp;#x6307;java.lang.OutOfMemoryError&amp;#x9519;&amp;#x8BEF;&amp;#x3002;&amp;#x4E86;&amp;#x89E3;JVM&amp;#x7684;&amp;#x57FA;&amp;#x672C;&amp;#x539F;&amp;#x7406;&amp;#x540E;&amp;#xFF0C;&amp;#x5F88;&amp;#x5BB9;&amp;#x6613;&amp;#x7406;&amp;#x89E3;&amp;#x4EE5;&amp;#x4E0B;&amp;#x51E0;&amp;#x79CD;&amp;#x5E38;&amp;#x89C1;&amp;#x7684;OOM&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Java" scheme="https://monkeysayhi.github.io/tags/Java/"/>
    
      <category term="JVM" scheme="https://monkeysayhi.github.io/tags/JVM/"/>
    
  </entry>
  
  <entry>
    <title>类加载（初始化）时机</title>
    <link href="https://monkeysayhi.github.io/2018/11/03/%E7%B1%BB%E5%8A%A0%E8%BD%BD%EF%BC%88%E5%88%9D%E5%A7%8B%E5%8C%96%EF%BC%89%E6%97%B6%E6%9C%BA/"/>
    <id>https://monkeysayhi.github.io/2018/11/03/类加载（初始化）时机/</id>
    <published>2018-11-03T07:07:05.000Z</published>
    <updated>2018-11-03T07:09:10.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x9762;&#x8BD5;&#x4E2D;&#x5E38;&#x8003;&#x7684;&#x201C;&#x7C7B;&#x52A0;&#x8F7D;&#x65F6;&#x673A;&#x201D;&#x4E25;&#x683C;&#x6765;&#x8BF4;&#x6307;&#x201C;&#x7C7B;&#x7684;&#x521D;&#x59CB;&#x5316;&#x65F6;&#x673A;&#x201D;&#x3002;</p>
<a id="more"></a>
<h1 id="&#x89E3;&#x91CA;&#x7C7B;&#x52A0;&#x8F7D;&#x4E0E;&#x521D;&#x59CB;&#x5316;"><a href="#&#x89E3;&#x91CA;&#x7C7B;&#x52A0;&#x8F7D;&#x4E0E;&#x521D;&#x59CB;&#x5316;" class="headerlink" title="&#x89E3;&#x91CA;&#x7C7B;&#x52A0;&#x8F7D;&#x4E0E;&#x521D;&#x59CB;&#x5316;"></a>&#x89E3;&#x91CA;&#x7C7B;&#x52A0;&#x8F7D;&#x4E0E;&#x521D;&#x59CB;&#x5316;</h1><p>&#x9996;&#x5148;&#xFF0C;&#x533A;&#x5206;&#x7C7B;&#x52A0;&#x8F7D;classloading&#x4E0E;&#x7C7B;&#x751F;&#x547D;&#x5468;&#x671F;&#x4E2D;&#x7684;&#x52A0;&#x8F7D;loading&#x9636;&#x6BB5;&#xFF1A;</p>
<p>&#x7C7B;&#x52A0;&#x8F7D;classloading&#x901A;&#x5E38;&#x4E0D;&#x5355;&#x5355;&#x6307;&#x7C7B;&#x7684;&#x52A0;&#x8F7D;loading&#x9636;&#x6BB5;&#xFF0C;&#x800C;&#x6307;&#x7C7B;&#x4ECE;&#x52A0;&#x8F7D;loading&#x5230;&#x521D;&#x59CB;&#x5316;initialization&#x9636;&#x6BB5;&#x7684;&#x8FD9;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#x7684;&#x884C;&#x4E3A;&#x3002;</p>
<p>&#x90A3;&#x4E48;&#xFF0C;&#x4EC0;&#x4E48;&#x60C5;&#x51B5;&#x4E0B;&#x9700;&#x8981;&#x5F00;&#x59CB;&#x52A0;&#x8F7D;loading&#x5462;&#xFF1F;JVM&#x89C4;&#x8303;&#x4E2D;&#x5E76;&#x6CA1;&#x6709;&#x5F3A;&#x5236;&#x7EA6;&#x675F;&#xFF0C;&#x53D6;&#x51B3;&#x4E8E;&#x865A;&#x62DF;&#x673A;&#x7684;&#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x3002;&#x4F46;&#x662F;&#x5BF9;&#x4E8E;&#x521D;&#x59CB;&#x5316;initialization&#x9636;&#x6BB5;&#xFF0C;JVM&#x89C4;&#x8303;&#x5219;&#x4E25;&#x683C;&#x89C4;&#x5B9A;&#x4E86;&#x6709;&#x4E14;&#x53EA;&#x6709;5&#x79CD;&#x60C5;&#x51B5;&#x5FC5;&#x987B;&#x7ACB;&#x5373;&#x5BF9;&#x7C7B;&#x8FDB;&#x884C;&#x201C;&#x521D;&#x59CB;&#x5316;&#x201D;&#xFF08;&#x56E0;&#x6B64;&#xFF0C;&#x52A0;&#x8F7D;&#x3001;&#x9A8C;&#x8BC1;&#x3001;&#x51C6;&#x5907;&#x3001;&#x89E3;&#x6790;&#x81EA;&#x7136;&#x9700;&#x8981;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#x5F00;&#x59CB;&#xFF09;&#x3002;</p>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x9762;&#x8BD5;&#x4E2D;&#x5E38;&#x8003;&#x7684;&#x201C;&#x7C7B;&#x52A0;&#x8F7D;&#x65F6;&#x673A;&#x201D;&#x4E25;&#x683C;&#x6765;&#x8BF4;&#x6307;&#x201C;&#x7C7B;&#x7684;&#x521D;&#x59CB;&#x5316;&#x65F6;&#x673A;&#x201D;&#x3002;&#x7528;&#x4E8E;&#x6F14;&#x793A;&#x7C7B;&#x52A0;&#x8F7D;&#x987A;&#x5E8F;&#x7684;&#x9759;&#x6001;&#x8BED;&#x53E5;&#x5757;&#x3001;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x8D4B;&#x503C;&#x7B49;&#x64CD;&#x4F5C;&#x4E5F;&#x662F;&#x5728;&#x521D;&#x59CB;&#x5316;&#x65F6;&#x673A;&#x5B8C;&#x6210;&#x7684;&#x3002;</p>
<p>&#x7C7B;&#x7684;&#x5B8C;&#x6574;&#x751F;&#x547D;&#x5468;&#x671F;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x7C7B;&#x52A0;&#x8F7D;&#xFF08;&#x521D;&#x59CB;&#x5316;&#xFF09;&#x65F6;&#x673A;/class-loading.png" alt="class-loading"></p>
<h1 id="&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x521D;&#x59CB;&#x5316;"><a href="#&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x521D;&#x59CB;&#x5316;" class="headerlink" title="&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x521D;&#x59CB;&#x5316;"></a>&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x521D;&#x59CB;&#x5316;</h1><p>4&#x79CD;&#x5E38;&#x89C1;&#x573A;&#x666F;&#xFF1A;</p>
<ol>
<li>&#x5F53;&#x865A;&#x62DF;&#x673A;&#x542F;&#x52A8;&#x65F6;&#xFF0C;&#x7528;&#x6237;&#x9700;&#x8981;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x8981;&#x6267;&#x884C;&#x7684;&#x4E3B;&#x7C7B;<code>MainClass</code>&#xFF08;&#x5373;&#x5305;&#x542B;psvm&#x65B9;&#x6CD5;&#x7684;&#x90A3;&#x4E2A;&#x7C7B;&#xFF09;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x4F1A;&#x5148;&#x521D;&#x59CB;&#x5316;&#x8FD9;&#x4E2A;&#x4E3B;&#x7C7B;&#x3002;</li>
<li>&#x9047;&#x5230;<code>new</code>&#x3001;<code>getstatic</code>&#x3001;<code>putstatic</code>&#x6216;<code>invokestatic</code>&#x8FD9;4&#x6761;&#x5B57;&#x8282;&#x7801;&#x6307;&#x4EE4;&#x65F6;&#x3002;&#x751F;&#x6210;&#x8FD9;4&#x6761;&#x6307;&#x4EE4;&#x7684;&#x5178;&#x578B;Java&#x4EE3;&#x7801;&#x573A;&#x666F;&#x662F;&#xFF1A;<ol>
<li>&#x4F7F;&#x7528;<code>new</code>&#x5173;&#x952E;&#x5B57;&#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;&#x3002;</li>
<li>&#x8BFB;&#x53D6;&#x6216;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x9759;&#x6001;&#x5B57;&#x6BB5;&#x2014;&#x2014;&#x88AB;<code>final</code>&#x4FEE;&#x9970;&#x3001;&#x5DF2;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x628A;&#x7ED3;&#x679C;&#x653E;&#x5165;&#x5E38;&#x91CF;&#x6C60;&#x7684;&#x9759;&#x6001;&#x5B57;&#x6BB5;&#x9664;&#x5916;&#x3002;</li>
<li>&#x8C03;&#x7528;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x9759;&#x6001;&#x65B9;&#x6CD5;&#x3002;</li>
</ol>
</li>
<li>&#x5F53;&#x521D;&#x59CB;&#x5316;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x73B0;&#x5176;&#x7236;&#x7C7B;&#x8FD8;&#x6CA1;&#x6709;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x5148;&#x89E6;&#x53D1;&#x5176;&#x7236;&#x7C7B;&#x7684;&#x521D;&#x59CB;&#x5316;&#x3002;</li>
<li>&#x4F7F;&#x7528;<code>java.lang.reflect</code>&#x5305;&#x7684;&#x65B9;&#x6CD5;&#x5BF9;&#x7C7B;&#x8FDB;&#x884C;&#x53CD;&#x5C04;&#x8C03;&#x7528;&#x65F6;&#x3002;</li>
</ol>
<blockquote>
<p>&#x9664;&#x6B64;&#x4E4B;&#x5916;&#xFF0C;&#x6BD4;&#x8F83;&#x5E38;&#x7528;&#x7684;&#x53E6;&#x4E00;&#x4E2A;&#x573A;&#x666F;&#x662F;&#x8C03;&#x7528;<code>Class.forName()</code>&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x53EF;&#x6307;&#x5B9A;<code>initialize</code>&#x53C2;&#x6570;&#x4E3A;true&#xFF0C;&#x6700;&#x540E;&#x901A;&#x8FC7;JNI&#x52A0;&#x8F7D;&#x7C7B;&#x5E76;&#x521D;&#x59CB;&#x5316;&#x3002;</p>
</blockquote>
<p>1&#x79CD;&#x4E0D;&#x5E38;&#x89C1;&#x573A;&#x666F;&#xFF1A;</p>
<ol>
<li>&#x5F53;&#x4F7F;&#x7528;JDK 1.7&#x7684;&#x52A8;&#x6001;&#x8BED;&#x8A00;&#x652F;&#x6301;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x4E00;&#x4E2A;<code>java.lang.invoke.MethodHandle</code>&#x5B9E;&#x4F8B;&#x6700;&#x540E;&#x7684;&#x89E3;&#x6790;&#x7ED3;&#x679C;<code>REF_getStatic</code>&#x3001;<code>REF_putStatic</code>&#x3001;<code>REF_invokeStatic</code>&#x7684;&#x65B9;&#x6CD5;&#x53E5;&#x67C4;&#xFF0C;&#x5E76;&#x4E14;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x53E5;&#x67C4;&#x6240;&#x5BF9;&#x5E94;&#x7684;&#x7C7B;&#x6CA1;&#x6709;&#x8FDB;&#x884C;&#x8FC7;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x5148;&#x89E6;&#x53D1;&#x5176;&#x521D;&#x59CB;&#x5316;&#x3002;</li>
</ol>
<blockquote>
<p>&#x5BF9;&#x4E8E;&#x8FD9;5&#x79CD;&#x573A;&#x666F;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x89C4;&#x8303;&#x4E2D;&#x4F7F;&#x7528;&#x4E86;&#x4E00;&#x4E2A;&#x5F88;&#x5F3A;&#x70C8;&#x7684;&#x9650;&#x5B9A;&#x8BED;&#xFF1A;&#x201C;<strong>&#x6709;&#x4E14;&#x53EA;&#x6709;</strong>&#x201D;&#x3002;</p>
</blockquote>
<p>&#x8FD9;5&#x79CD;&#x573A;&#x666F;&#x4E2D;&#x7684;&#x884C;&#x4E3A;&#x79F0;&#x4E3A;&#x5BF9;&#x4E00;&#x4E2A;&#x7C7B;&#x8FDB;&#x884C;<code>&#x4E3B;&#x52A8;&#x5F15;&#x7528;</code>&#x3002;&#x9664;&#x6B64;&#x4E4B;&#x5916;&#xFF0C;&#x6240;&#x6709;&#x5F15;&#x7528;&#x7C7B;&#x7684;&#x65B9;&#x5F0F;&#x90FD;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x79F0;&#x4E3A;<code>&#x88AB;&#x52A8;&#x5F15;&#x7528;</code>&#x3002;</p>
<blockquote>
<p>&#x6211;&#x4EEC;&#x4E0D;&#x9700;&#x8981;&#x53BB;&#x5173;&#x6CE8;&#x88AB;&#x52A8;&#x5F15;&#x7528;&#x3002;&#x88AB;&#x52A8;&#x5F15;&#x7528;&#x4EC5;&#x4EC5;&#x6307;&#x90A3;&#x4E9B;&#x770B;&#x4E0A;&#x53BB;&#x5411;&#x4E3B;&#x52A8;&#x5F15;&#x7528;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x5374;&#x4E0D;&#x662F;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5982;&#xFF1A;</p>
<ul>
<li>&#x901A;&#x8FC7;&#x5B50;&#x7C7B;&#x5F15;&#x7528;&#x7236;&#x7C7B;&#x7684;&#x9759;&#x6001;&#x5B57;&#x6BB5;&#xFF0C;&#x4E0D;&#x4F1A;&#x5BFC;&#x81F4;&#x5B50;&#x7C7B;&#x521D;&#x59CB;&#x5316;&#xFF08;<font color="red">&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#xFF1F;</font>&#xFF09;</li>
<li>&#x901A;&#x8FC7;&#x6570;&#x7EC4;&#x5B9A;&#x4E49;&#x7C7B;&#x5F15;&#x7528;&#x7C7B;&#xFF0C;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x6B64;&#x7C7B;&#x7684;&#x521D;&#x59CB;&#x5316;&#xFF08;JVM&#x4E3A;&#x6BCF;&#x4E2A;&#x6570;&#x7EC4;&#x751F;&#x6210;&#x4E13;&#x6709;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x6BD4;&#x5982;&#x6570;&#x7EC4;<code>A[]</code>&#x7684;&#x7C7B;&#x578B;&#x662F;<code>[A</code>&#xFF09;</li>
<li>&#x5F15;&#x7528;&#x5E38;&#x91CF;&#xFF0C;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x6B64;&#x7C7B;&#x7684;&#x521D;&#x59CB;&#x5316;&#xFF08;&#x5E38;&#x91CF;&#x5728;&#x7F16;&#x8BD1;&#x9636;&#x6BB5;&#x4F1A;&#x5B58;&#x5165;&#x8C03;&#x7528;&#x7C7B;&#x7684;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#xFF08;<code>&#x5E38;&#x91CF;&#x4F20;&#x64AD;</code>&#xFF09;&#xFF0C;&#x8FD0;&#x884C;&#x671F;&#x4E5F;&#x5C31;&#x6CA1;&#x6709;&#x76F4;&#x63A5;&#x5F15;&#x7528;&#x5230;&#x5B9A;&#x4E49;&#x5E38;&#x91CF;&#x7684;&#x7C7B;&#xFF09;</li>
</ul>
</blockquote>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;:</p>
<ul>
<li><a href="https://blog.csdn.net/anialy/article/details/8175213" target="_blank" rel="external">Java &#x4E2D;&#x5BF9;&#x7C7B;&#x7684;&#x4E3B;&#x52A8;&#x5F15;&#x7528;&#x548C;&#x88AB;&#x52A8;&#x5F15;&#x7528;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x9762;&amp;#x8BD5;&amp;#x4E2D;&amp;#x5E38;&amp;#x8003;&amp;#x7684;&amp;#x201C;&amp;#x7C7B;&amp;#x52A0;&amp;#x8F7D;&amp;#x65F6;&amp;#x673A;&amp;#x201D;&amp;#x4E25;&amp;#x683C;&amp;#x6765;&amp;#x8BF4;&amp;#x6307;&amp;#x201C;&amp;#x7C7B;&amp;#x7684;&amp;#x521D;&amp;#x59CB;&amp;#x5316;&amp;#x65F6;&amp;#x673A;&amp;#x201D;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Java" scheme="https://monkeysayhi.github.io/tags/Java/"/>
    
      <category term="JVM" scheme="https://monkeysayhi.github.io/tags/JVM/"/>
    
  </entry>
  
  <entry>
    <title>浅谈CMS原理</title>
    <link href="https://monkeysayhi.github.io/2018/11/02/%E6%B5%85%E8%B0%88CMS%E5%8E%9F%E7%90%86/"/>
    <id>https://monkeysayhi.github.io/2018/11/02/浅谈CMS原理/</id>
    <published>2018-11-02T02:47:14.000Z</published>
    <updated>2018-11-02T03:04:20.000Z</updated>
    
    <content type="html"><![CDATA[<p><code>CMS</code>&#xFF08;Concurrent Mark Sweep&#xFF09;&#x6536;&#x96C6;&#x5668;&#x4EE5;&#x83B7;&#x53D6;&#x6700;&#x77ED;&#x56DE;&#x6536;&#x505C;&#x987F;&#x65F6;&#x95F4;&#x4E3A;&#x76EE;&#x6807;&#xFF0C;&#x662F;HotSpot&#x865A;&#x62DF;&#x673A;&#x4E2D;&#x7B2C;&#x4E00;&#x6B3E;&#x771F;&#x6B63;&#x610F;&#x4E49;&#x4E0A;&#x7684;&#x5E76;&#x53D1;&#x6536;&#x96C6;&#x5668;&#xFF0C;&#x7B2C;&#x4E00;&#x6B21;&#x5B9E;&#x73B0;&#x4E86;&#x8BA9;&#x5783;&#x573E;&#x6536;&#x96C6;&#x7EBF;&#x7A0B;&#x4E0E;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#xFF08;&#x57FA;&#x672C;&#x4E0A;&#xFF09;&#x540C;&#x65F6;&#x5DE5;&#x4F5C;&#x3002;</p>
<blockquote>
<p>&#x79CB;&#x62DB;&#x4E5F;&#x5FEB;&#x7ED3;&#x675F;&#x4E86;&#x3002;&#x4ECE;&#x4ECA;&#x5929;&#x5F00;&#x59CB;&#xFF0C;&#x6162;&#x6162;&#x6574;&#x7406;&#x9762;&#x8BD5;&#x65F6;&#x51C6;&#x5907;&#x7684;&#x8D44;&#x6599;&#x548C;&#x4E4B;&#x524D;&#x770B;&#x4E66;&#x505A;&#x7684;&#x7B14;&#x8BB0;&#x3002;&#x90E8;&#x5206;&#x5185;&#x5BB9;&#x5355;&#x7EAF;&#x9762;&#x5411;&#x9762;&#x8BD5;&#x6574;&#x7406;&#xFF0C;&#x727A;&#x7272;&#x6DF1;&#x5EA6;&#x6362;&#x53D6;&#x5E7F;&#x5EA6;&#xFF0C;&#x4E0D;&#x8FC7;&#x5DF2;&#x7ECF;&#x80FD;&#x591F;&#x4E86;&#x89E3;&#x5F88;&#x591A;&#x57FA;&#x672C;&#x95EE;&#x9898;&#x4E86;&#x3002;</p>
</blockquote>
<a id="more"></a>
<h1 id="&#x8FC7;&#x7A0B;"><a href="#&#x8FC7;&#x7A0B;" class="headerlink" title="&#x8FC7;&#x7A0B;"></a>&#x8FC7;&#x7A0B;</h1><ol>
<li><code>&#x521D;&#x59CB;&#x6807;&#x8BB0;</code>&#xFF08;CMS initial mark&#xFF09;&#xFF1A;&#x6807;&#x8BB0;&#x4E00;&#x4E0B;GC Roots&#x80FD;&#x76F4;&#x63A5;&#x5173;&#x8054;&#x5230;&#x7684;&#x5BF9;&#x8C61;&#x3002;&#x9700;&#x8981;STW&#xFF0C;&#x901F;&#x5EA6;&#x5F88;&#x5FEB;&#x3002;</li>
<li><code>&#x5E76;&#x53D1;&#x6807;&#x8BB0;</code>&#xFF08;CMS concurrent mark&#xFF09;&#xFF1A;&#x8FDB;&#x884C;GC Roots Tracing&#x3002;&#x4E0D;&#x9700;&#x8981;STW&#x3002;&#x4F1A;&#x4EA7;&#x751F;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#x3002;</li>
<li><code>&#x91CD;&#x65B0;&#x6807;&#x8BB0;</code>&#xFF08;CMS remark&#xFF09;&#xFF1A;&#x627E;&#x5230;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x671F;&#x95F4;&#x4EA7;&#x751F;&#x7684;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#x3002;&#x9700;&#x8981;STW&#xFF0C;&#x505C;&#x987F;&#x65F6;&#x95F4;&#x4E00;&#x822C;&#x4F1A;&#x6BD4;&#x521D;&#x59CB;&#x6807;&#x8BB0;&#x7A0D;&#x957F;&#xFF0C;&#x4F46;&#x8FDC;&#x6BD4;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x77ED;&#x3002;</li>
<li><code>&#x5E76;&#x53D1;&#x6E05;&#x9664;</code>&#xFF08;CMS concurrent sweep&#xFF09;&#xFF1A;&#x6E05;&#x9664;&#x5DF2;&#x6807;&#x8BB0;&#x7684;&#x5783;&#x573E;&#x3002;&#x4E0D;&#x9700;&#x8981;STW&#x3002;&#x4F1A;&#x4EA7;&#x751F;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#xFF0C;&#x53EA;&#x80FD;&#x7B49;&#x4E0B;&#x4E00;&#x6B21;GC&#x6E05;&#x7406;&#x3002;</li>
</ol>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;CMS&#x539F;&#x7406;/cms.png" alt="cms"></p>
<h2 id="&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x4E3A;&#x4EC0;&#x4E48;&#x6BD4;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x7684;&#x65F6;&#x95F4;&#x77ED;&#xFF1F;"><a href="#&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x4E3A;&#x4EC0;&#x4E48;&#x6BD4;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x7684;&#x65F6;&#x95F4;&#x77ED;&#xFF1F;" class="headerlink" title="&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x4E3A;&#x4EC0;&#x4E48;&#x6BD4;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x7684;&#x65F6;&#x95F4;&#x77ED;&#xFF1F;"></a>&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x4E3A;&#x4EC0;&#x4E48;&#x6BD4;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x7684;&#x65F6;&#x95F4;&#x77ED;&#xFF1F;</h2><p>&#x4E0D;&#x8003;&#x8651;&#x6807;&#x8BB0;&#x5BF9;&#x8C61;&#x5E74;&#x9F84;&#x7B49;&#x64CD;&#x4F5C;&#xFF0C;&#x6700;&#x5BB9;&#x6613;&#x60F3;&#x5230;&#x7684;&#x539F;&#x56E0;&#x662F;&#xFF1A;</p>
<ul>
<li>&#x5BF9;&#x8C61;&#x6570;&#x7684;&#x533A;&#x522B;&#xFF1A;&#x201C;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x201D;&#x8FC7;&#x7A0B;&#x9700;&#x8981;&#x626B;&#x63CF;&#x6240;&#x6709;&#x5BF9;&#x8C61;&#xFF0C;&#x6807;&#x8BB0;&#x51FA;&#x4E0D;&#x53EF;&#x8FBE;&#x7684;&#x5BF9;&#x8C61;&#xFF08;&#x8BE5;&#x6E05;&#x9664;&#xFF09;&#x548C;&#x53EF;&#x8FBE;&#x7684;&#x5BF9;&#x8C61;&#xFF08;&#x4E0D;&#x8BE5;&#x6E05;&#x9664;&#xFF09;&#xFF1B;&#x201C;&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x201D;&#x53EA;&#x9700;&#x8981;&#x626B;&#x63CF;&#x5728;&#x201C;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x201D;&#x8FC7;&#x7A0B;&#x4E2D;&#x88AB;&#x6807;&#x8BB0;&#x4E3A;&#x53EF;&#x8FBE;&#x6216;&#x65B0;&#x521B;&#x5EFA;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x68C0;&#x67E5;&#x5176;&#x662F;&#x5426;&#x5728;&#x201C;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x201D;&#x8FC7;&#x7A0B;&#x4E2D;&#x88AB;&#x6807;&#x8BB0;&#x4E3A;&#x53EF;&#x8FBE;&#x4E4B;&#x540E;&#xFF0C;&#x7531;&#x4E8E;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x53D8;&#x7684;&#x4E0D;&#x53EF;&#x8FBE;&#x4E86;</li>
<li>&#x5E76;&#x53D1;&#x73AF;&#x5883;&#x7684;&#x533A;&#x522B;&#xFF1A;&#x201C;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x201D;&#x662F;&#x4E0E;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x4E00;&#x8D77;&#x5DE5;&#x4F5C;&#x7684;&#xFF0C;&#x5E76;&#x53D1;&#x74F6;&#x9888;&#x8F83;&#x7A84;&#xFF08;&#x5DE5;&#x4F5C;&#x7EBF;&#x7A0B;&#x5C11;+&#x5B89;&#x5168;&#x68C0;&#x67E5;&#xFF09;&#xFF1B;&#x201C;&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x201D;&#x9700;&#x8981;stop the world&#xFF0C;&#x4E4B;&#x540E;&#x4EC5;&#x6709;&#x201C;&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x201D;&#x7684;&#x7EBF;&#x7A0B;&#x5728;&#x5DE5;&#x4F5C;&#xFF0C;&#x5E76;&#x53D1;&#x74F6;&#x9888;&#x5BBD;&#x7684;&#x591A;</li>
</ul>
<blockquote>
<p>PS&#xFF1A;&#x5173;&#x4E8E;&#x5BF9;&#x8C61;&#x6570;&#x7684;&#x533A;&#x522B;&#x8981;&#x60F3;&#x6E05;&#x695A;&#xFF0C;&#x5728;&#x5BF9;&#x8C61;&#x5206;&#x914D;&#x540E;&#xFF0C;&#x5982;&#x679C;&#x5BF9;&#x8C61;&#x6709;&#x4E00;&#x77AC;&#x95F4;&#x4E0D;&#x53EF;&#x8FBE;&#xFF0C;&#x5219;&#x8BE5;&#x5BF9;&#x8C61;&#x4EE5;&#x540E;&#x90FD;&#x5C06;&#x4E0D;&#x53EF;&#x8FBE;&#xFF0C;&#x53EF;&#x5BF9;&#x5176;&#x6E05;&#x7406;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x65F6;&#x4E0D;&#x9700;&#x8981;&#x68C0;&#x67E5;&#x8FD9;&#x90E8;&#x5206;&#x5BF9;&#x8C61;&#x3002;</p>
</blockquote>
<h2 id="&#x5E76;&#x53D1;&#x6E05;&#x9664;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x5982;&#x4F55;&#x624D;&#x80FD;&#x8BA9;&#x7528;&#x6237;&#x8FB9;&#x4F7F;&#x7528;&#xFF0C;&#x8FB9;&#x6E05;&#x9664;&#xFF1F;"><a href="#&#x5E76;&#x53D1;&#x6E05;&#x9664;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x5982;&#x4F55;&#x624D;&#x80FD;&#x8BA9;&#x7528;&#x6237;&#x8FB9;&#x4F7F;&#x7528;&#xFF0C;&#x8FB9;&#x6E05;&#x9664;&#xFF1F;" class="headerlink" title="&#x5E76;&#x53D1;&#x6E05;&#x9664;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x5982;&#x4F55;&#x624D;&#x80FD;&#x8BA9;&#x7528;&#x6237;&#x8FB9;&#x4F7F;&#x7528;&#xFF0C;&#x8FB9;&#x6E05;&#x9664;&#xFF1F;"></a>&#x5E76;&#x53D1;&#x6E05;&#x9664;&#x7684;&#x8FC7;&#x7A0B;&#xFF1F;&#x5982;&#x4F55;&#x624D;&#x80FD;&#x8BA9;&#x7528;&#x6237;&#x8FB9;&#x4F7F;&#x7528;&#xFF0C;&#x8FB9;&#x6E05;&#x9664;&#xFF1F;</h2><p>&#x8FD8;&#x662F;&#x90A3;&#x53E5;&#x8BDD;&#xFF1A;</p>
<blockquote>
<p>&#x5728;&#x5BF9;&#x8C61;&#x5206;&#x914D;&#x540E;&#xFF0C;&#x5982;&#x679C;&#x5BF9;&#x8C61;&#x6709;&#x4E00;&#x77AC;&#x95F4;&#x4E0D;&#x53EF;&#x8FBE;&#xFF0C;&#x5219;&#x8BE5;&#x5BF9;&#x8C61;&#x4EE5;&#x540E;&#x90FD;&#x5C06;&#x4E0D;&#x53EF;&#x8FBE;&#xFF0C;&#x53EF;&#x5BF9;&#x5176;&#x6E05;&#x7406;&#x3002;</p>
</blockquote>
<p>&#x6240;&#x4EE5;&#xFF0C;&#x5DF2;&#x7ECF;&#x5728;&#x201C;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x201D;&#x548C;&#x201C;&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x201D;&#x8FC7;&#x7A0B;&#x88AB;&#x6807;&#x8BB0;&#x4E3A;&#x4E0D;&#x53EF;&#x8FBE;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x4EE5;&#x540E;&#x90FD;&#x4E0D;&#x4F1A;&#x518D;&#x88AB;&#x7528;&#x6237;&#x4F7F;&#x7528;&#xFF0C;&#x6E05;&#x9664;&#x8FD9;&#x4E9B;&#x5BF9;&#x8C61;&#x5BF9;&#x7528;&#x6237;&#x5B8C;&#x5168;&#x65E0;&#x5F71;&#x54CD;&#x3002;</p>
<p>&#x552F;&#x4E00;&#x53EF;&#x80FD;&#x6709;&#x5F71;&#x54CD;&#x7684;&#x662F;&#x6574;&#x7406;&#x5185;&#x5B58;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x4E0D;&#x8FC7;&#x4E5F;&#x53EA;&#x9700;&#x8981;&#x540C;&#x6B65;&#x4F7F;&#x7528;&#x5BF9;&#x8C61;&#x548C;&#x6574;&#x7406;&#x5BF9;&#x8C61;&#x4E24;&#x4E2A;&#x52A8;&#x4F5C;&#x3002;</p>
<h1 id="CMS&#x7684;&#x4F18;&#x70B9;&#x3001;&#x7F3A;&#x70B9;&#xFF1F;"><a href="#CMS&#x7684;&#x4F18;&#x70B9;&#x3001;&#x7F3A;&#x70B9;&#xFF1F;" class="headerlink" title="CMS&#x7684;&#x4F18;&#x70B9;&#x3001;&#x7F3A;&#x70B9;&#xFF1F;"></a>CMS&#x7684;&#x4F18;&#x70B9;&#x3001;&#x7F3A;&#x70B9;&#xFF1F;</h1><p>&#x4F18;&#x70B9;&#xFF1A;</p>
<ol>
<li>&#x5927;&#x90E8;&#x5206;&#x65F6;&#x95F4;&#x53EF;&#x4E0E;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x5E76;&#x53D1;&#x5DE5;&#x4F5C;</li>
<li>&#x4F4E;&#x505C;&#x987F;</li>
</ol>
<p>&#x7F3A;&#x70B9;&#xFF1A;</p>
<ol>
<li>&#x5BF9;CPU&#x8D44;&#x6E90;&#x975E;&#x5E38;&#x654F;&#x611F;&#x3002;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x548C;&#x5E76;&#x53D1;&#x6E05;&#x7406;&#x4E0E;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x4E00;&#x8D77;&#x5DE5;&#x4F5C;&#xFF0C;&#x5982;&#x679C;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x4E5F;&#x662F;CPU&#x654F;&#x611F;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x5FC5;&#x7136;&#x5F71;&#x54CD;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x3002;</li>
<li>&#x65E0;&#x6CD5;&#x5904;&#x7406;<code>&#x6D6E;&#x52A8;&#x5783;&#x573E;</code>&#xFF08;Floating Garbage&#xFF09;&#x3002;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x4E0E;&#x5E76;&#x53D1;&#x6E05;&#x9664;&#x8FC7;&#x7A0B;&#x4F1A;&#x4EA7;&#x751F;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#xFF0C;&#x5982;&#x679C;CMS&#x4E4B;&#x524D;&#x9884;&#x7559;&#x7684;&#x5185;&#x5B58;&#x65E0;&#x6CD5;&#x6EE1;&#x8DB3;&#x7A0B;&#x5E8F;&#x9700;&#x8981;&#xFF0C;&#x5C31;&#x4F1A;&#x51FA;&#x73B0;&#x4E00;&#x6B21;&#x201C;Concurrent Mode Failure&#x201D;&#x5931;&#x8D25;&#xFF0C;&#x8FD9;&#x65F6;&#x865A;&#x62DF;&#x673A;&#x5C06;&#x9000;&#x5316;&#x4F7F;&#x7528;Serial Old&#x6536;&#x96C6;&#x5668;&#xFF0C;&#x91CD;&#x65B0;&#x8FDB;&#x884C;&#x8001;&#x5E74;&#x4EE3;&#x7684;&#x5783;&#x573E;&#x6536;&#x96C6;&#xFF0C;&#x8FD9;&#x6837;&#x505C;&#x987F;&#x65F6;&#x95F4;&#x5C31;&#x5F88;&#x957F;&#x4E86;&#x3002;&#x53EF;&#x4F7F;&#x7528;XX:CMSInitiatingOccupancyFraction&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x89E6;&#x53D1;CMS&#x65F6;&#x7684;&#x8001;&#x5E74;&#x4EE3;&#x7A7A;&#x95F4;&#x6BD4;&#x4F8B;&#xFF08;&#x5269;&#x4F59;&#x7A7A;&#x95F4;&#x5C31;&#x662F;&#x9884;&#x7559;&#x7A7A;&#x95F4;&#xFF09;&#xFF0C;&#x5728;JDK1.6&#x4E2D;&#x9ED8;&#x8BA4;&#x4E3A;92%&#x3002;</li>
<li>&#x57FA;&#x4E8E;&#x201C;&#x6807;&#x8BB0;-&#x6E05;&#x9664;&#x7B97;&#x6CD5;&#x201D;&#xFF0C;&#x6536;&#x96C6;&#x7ED3;&#x675F;&#x65F6;&#x4F1A;&#x6709;&#x5927;&#x91CF;&#x7A7A;&#x95F4;<code>&#x788E;&#x7247;</code>&#x4EA7;&#x751F;&#xFF0C;&#x5BFC;&#x81F4;&#x660E;&#x660E;&#x5269;&#x4F59;&#x7A7A;&#x95F4;&#x5145;&#x8DB3;&#xFF0C;&#x5374;&#x65E0;&#x6CD5;&#x4E3A;&#x5927;&#x5BF9;&#x8C61;&#x5206;&#x914D;&#x8DB3;&#x591F;&#x7684;&#x8FDE;&#x7EED;&#x5185;&#x5B58;&#x3002;&#x53EF;&#x6253;&#x5F00;-XX&#xFF1A;+UseCMSCompactAtFullCollection&#x5F00;&#x5173;&#x53C2;&#x6570;&#xFF08;&#x9ED8;&#x8BA4;&#x6253;&#x5F00;&#xFF09;&#x5728;&#x8FDB;&#x884C;Full GC&#x4E4B;&#x524D;&#x6574;&#x7406;&#x5185;&#x5B58;&#x788E;&#x7247;&#xFF08;&#x79F0;&#x4E3A;&#x201C;&#x538B;&#x7F29;&#x201D;&#xFF09;&#xFF1B;&#x4F7F;&#x7528;-XX:CMSFullGCsBeforeCompaction&#x53C2;&#x6570;&#xFF08;&#x9ED8;&#x8BA4;0&#xFF09;&#x8BBE;&#x7F6E;&#x591A;&#x5C11;&#x6B21;&#x4E0D;&#x5E26;&#x538B;&#x7F29;&#x7684;Full CG&#x4E4B;&#x540E;&#x624D;&#x8FDB;&#x884C;&#x4E00;&#x6B21;&#x5E26;&#x538B;&#x7F29;&#x7684;Full GC&#x3002;&#x5185;&#x5B58;&#x6574;&#x7406;&#x65E0;&#x6CD5;&#x5E76;&#x884C;&#xFF0C;&#x8FD8;&#x9700;&#x8981;STW&#xFF0C;&#x9700;&#x8981;&#x9002;&#x5F53;&#x8C03;&#x6574;&#x5185;&#x5B58;&#x6574;&#x7406;&#x7684;&#x9891;&#x7387;&#xFF0C;&#x5728;GC&#x6027;&#x80FD;&#x4E0E;&#x7A7A;&#x95F4;&#x5229;&#x7528;&#x7387;&#x4E4B;&#x95F4;&#x5E73;&#x8861;&#x3002;</li>
</ol>
<blockquote>
<p>PS&#xFF1A;  </p>
<ul>
<li>&#x6D6E;&#x52A8;&#x5783;&#x573E;&#xFF1A;&#x7531;&#x4E8E;CMS&#x5E76;&#x53D1;&#x6E05;&#x7406;&#x9636;&#x6BB5;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x8FD8;&#x5728;&#x8FD0;&#x884C;&#x7740;&#xFF0C;&#x4F34;&#x968F;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x81EA;&#x7136;&#x5C31;&#x8FD8;&#x4F1A;&#x6709;&#x65B0;&#x7684;&#x5783;&#x573E;&#x4E0D;&#x65AD;&#x4EA7;&#x751F;&#xFF0C;&#x8FD9;&#x4E00;&#x90E8;&#x5206;&#x5783;&#x573E;&#x51FA;&#x73B0;&#x5728;&#x6807;&#x8BB0;&#x8FC7;&#x7A0B;&#x4E4B;&#x540E;&#xFF0C;CMS&#x65E0;&#x6CD5;&#x5728;&#x5F53;&#x6B21;&#x6536;&#x96C6;&#x4E2D;&#x5904; &#x7406;&#x6389;&#x5B83;&#x4EEC;&#xFF0C;&#x53EA;&#x597D;&#x7559;&#x5F85;&#x4E0B;&#x4E00;&#x6B21;GC&#x65F6;&#x518D;&#x6E05;&#x7406;&#x6389;&#x3002;&#x8FD9;&#x4E00;&#x90E8;&#x5206;&#x5783;&#x573E;&#x5C31;&#x79F0;&#x4E3A;&#x201C;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#x201D;&#x3002;&#x5728;&#x8FD9;&#x671F;&#x95F4;&#x7528;&#x6237;&#x53EF;&#x80FD;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x5BF9;&#x8C61;&#x3002;&#x4E3A;&#x4E86;&#x5904;&#x7406;&#x8FD9;&#x90E8;&#x5206;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#x548C;&#x5BF9;&#x8C61;&#xFF0C;CMS&#x5728;&#x5E76;&#x53D1;&#x6E05;&#x7406;&#x4E4B;&#x524D;&#xFF0C;&#x9700;&#x8981;&#x9884;&#x7559;&#x51FA;&#x8DB3;&#x591F;&#x7A7A;&#x95F4;&#x7ED9;&#x5E76;&#x53D1;&#x6E05;&#x7406;&#x671F;&#x95F4;&#x7684;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#x3002;&#x4E00;&#x822C;&#x4F1A;&#x663E;&#x793A;&#x4F7F;&#x7528;-XX:CMSInitiatingOccupancyFraction&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x89E6;&#x53D1;CMS&#x65F6;&#x7684;&#x8001;&#x5E74;&#x4EE3;&#x7A7A;&#x95F4;&#x6BD4;&#x4F8B;&#xFF0C;&#x5982;&#x679C;&#x8001;&#x5E74;&#x4EE3;&#x589E;&#x957F;&#x4E0D;&#x662F;&#x592A;&#x5FEB;&#xFF0C;&#x53EF;&#x4EE5;&#x9002;&#x5F53;&#x63D0;&#x9AD8;&#x6BD4;&#x4F8B;&#xFF0C;&#x4EE5;&#x51CF;&#x5C11;Full GC&#x7684;&#x6B21;&#x6570;&#x3002;</li>
</ul>
<p>&#x5173;&#x4E8E;&#x6D6E;&#x52A8;&#x5783;&#x573E;&#x548C;&#x5185;&#x5B58;&#x788E;&#x7247;&#x7684;&#x95EE;&#x9898;&#x3002;HDFS namenode&#x5728;&#x5806;&#x5185;&#x5B58;&#x8FBE;&#x5230;100G&#x89C4;&#x6A21;&#x65F6;&#xFF0C;&#x901A;&#x5E38;&#x8BBE;&#x7F6E;75%&#x89E6;&#x53D1;Full GC&#xFF0C;&#x4E0D;&#x5F00;&#x542F;&#x538B;&#x7F29;&#xFF0C;&#x4F18;&#x5148;&#x8003;&#x8651;STW&#x9020;&#x6210;&#x7684;&#x5EF6;&#x8FDF;&#x3002;</p>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;code&gt;CMS&lt;/code&gt;&amp;#xFF08;Concurrent Mark Sweep&amp;#xFF09;&amp;#x6536;&amp;#x96C6;&amp;#x5668;&amp;#x4EE5;&amp;#x83B7;&amp;#x53D6;&amp;#x6700;&amp;#x77ED;&amp;#x56DE;&amp;#x6536;&amp;#x505C;&amp;#x987F;&amp;#x65F6;&amp;#x95F4;&amp;#x4E3A;&amp;#x76EE;&amp;#x6807;&amp;#xFF0C;&amp;#x662F;HotSpot&amp;#x865A;&amp;#x62DF;&amp;#x673A;&amp;#x4E2D;&amp;#x7B2C;&amp;#x4E00;&amp;#x6B3E;&amp;#x771F;&amp;#x6B63;&amp;#x610F;&amp;#x4E49;&amp;#x4E0A;&amp;#x7684;&amp;#x5E76;&amp;#x53D1;&amp;#x6536;&amp;#x96C6;&amp;#x5668;&amp;#xFF0C;&amp;#x7B2C;&amp;#x4E00;&amp;#x6B21;&amp;#x5B9E;&amp;#x73B0;&amp;#x4E86;&amp;#x8BA9;&amp;#x5783;&amp;#x573E;&amp;#x6536;&amp;#x96C6;&amp;#x7EBF;&amp;#x7A0B;&amp;#x4E0E;&amp;#x7528;&amp;#x6237;&amp;#x7EBF;&amp;#x7A0B;&amp;#xFF08;&amp;#x57FA;&amp;#x672C;&amp;#x4E0A;&amp;#xFF09;&amp;#x540C;&amp;#x65F6;&amp;#x5DE5;&amp;#x4F5C;&amp;#x3002;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#x79CB;&amp;#x62DB;&amp;#x4E5F;&amp;#x5FEB;&amp;#x7ED3;&amp;#x675F;&amp;#x4E86;&amp;#x3002;&amp;#x4ECE;&amp;#x4ECA;&amp;#x5929;&amp;#x5F00;&amp;#x59CB;&amp;#xFF0C;&amp;#x6162;&amp;#x6162;&amp;#x6574;&amp;#x7406;&amp;#x9762;&amp;#x8BD5;&amp;#x65F6;&amp;#x51C6;&amp;#x5907;&amp;#x7684;&amp;#x8D44;&amp;#x6599;&amp;#x548C;&amp;#x4E4B;&amp;#x524D;&amp;#x770B;&amp;#x4E66;&amp;#x505A;&amp;#x7684;&amp;#x7B14;&amp;#x8BB0;&amp;#x3002;&amp;#x90E8;&amp;#x5206;&amp;#x5185;&amp;#x5BB9;&amp;#x5355;&amp;#x7EAF;&amp;#x9762;&amp;#x5411;&amp;#x9762;&amp;#x8BD5;&amp;#x6574;&amp;#x7406;&amp;#xFF0C;&amp;#x727A;&amp;#x7272;&amp;#x6DF1;&amp;#x5EA6;&amp;#x6362;&amp;#x53D6;&amp;#x5E7F;&amp;#x5EA6;&amp;#xFF0C;&amp;#x4E0D;&amp;#x8FC7;&amp;#x5DF2;&amp;#x7ECF;&amp;#x80FD;&amp;#x591F;&amp;#x4E86;&amp;#x89E3;&amp;#x5F88;&amp;#x591A;&amp;#x57FA;&amp;#x672C;&amp;#x95EE;&amp;#x9898;&amp;#x4E86;&amp;#x3002;&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Java" scheme="https://monkeysayhi.github.io/tags/Java/"/>
    
      <category term="JVM" scheme="https://monkeysayhi.github.io/tags/JVM/"/>
    
  </entry>
  
  <entry>
    <title>给vim小白的快捷键速成手册</title>
    <link href="https://monkeysayhi.github.io/2018/11/01/%E7%BB%99vim%E5%B0%8F%E7%99%BD%E7%9A%84%E5%BF%AB%E6%8D%B7%E9%94%AE%E9%80%9F%E6%88%90%E6%89%8B%E5%86%8C/"/>
    <id>https://monkeysayhi.github.io/2018/11/01/给vim小白的快捷键速成手册/</id>
    <published>2018-11-01T03:48:20.000Z</published>
    <updated>2018-11-01T13:23:44.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x5B9E;&#x4E60;&#x7EC4;&#x7684;&#x4EE3;&#x7801;&#x4FDD;&#x5BC6;&#x7EA7;&#x522B;&#x9AD8;&#xFF0C;&#x8981;&#x6C42;&#x4EE3;&#x7801;&#x4E0D;&#x80FD;&#x62C9;&#x5230;&#x672C;&#x5730;&#xFF08;&#x5F53;&#x7136;&#x4E5F;&#x4E0D;&#x80FD;&#x8FDC;&#x7A0B;&#x8FDE;&#x63A5;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x7684;git&#x4ED3;&#x5E93;&#xFF09;&#xFF0C;&#x4E00;&#x5F8B;&#x5728;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x8FDB;&#x884C;&#x5F00;&#x53D1;&#x3001;&#x6D4B;&#x8BD5;&#x3002;CLion&#x767D;&#x5B66;&#x4E86;&#xFF0C;&#x6295;&#x5954;vim&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x5BF9;&#x4E8E;&#x5927;&#x90E8;&#x5206;&#x4EBA;&#x800C;&#x8A00;&#xFF0C;&#x5982;&#x679C;&#x7EFC;&#x5408;&#x5B66;&#x4E60;&#x6210;&#x672C;&#x548C;&#x5F00;&#x53D1;&#x6548;&#x7387;&#xFF0C;&#x80FD;&#x7528;IDE&#x8FD8;&#x662F;&#x7528;IDE&#x5427;&#x3002;</p>
</blockquote>
<h1 id="vim&#x8FD8;&#x662F;emacs"><a href="#vim&#x8FD8;&#x662F;emacs" class="headerlink" title="vim&#x8FD8;&#x662F;emacs"></a>vim&#x8FD8;&#x662F;emacs</h1><p><strong>&#x4E0D;&#x8981;&#x7EA0;&#x7ED3;&#xFF0C;&#x6293;&#x8D77;&#x4E00;&#x4E2A;&#x5C31;&#x662F;&#x5E72;&#x3002;</strong></p>
<h1 id="&#x57FA;&#x672C;&#x6982;&#x5FF5;"><a href="#&#x57FA;&#x672C;&#x6982;&#x5FF5;" class="headerlink" title="&#x57FA;&#x672C;&#x6982;&#x5FF5;"></a>&#x57FA;&#x672C;&#x6982;&#x5FF5;</h1><p>&#x5BF9;&#x4E8E;&#x6211;&#x7B49;vim&#x5C0F;&#x767D;&#x800C;&#x8A00;&#xFF0C;&#x5728;&#x4F7F;&#x7528;vim&#x4E4B;&#x524D;&#xFF0C;&#x52A1;&#x5FC5;&#x8981;&#x6E05;&#x695A;<code>&#x201C;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x201D;</code>&#xFF08;Command mode&#xFF09;&#x3001;<code>&#x201C;&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x201D;</code>&#xFF08;Last line mode&#xFF09;&#x3001;<code>&#x201C;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x201D;</code>&#xFF08;Insert mode&#xFF0C;&#x4E5F;&#x53EB;&#x505A;&#x201C;&#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x201D;&#xFF09;&#x4E09;&#x4E2A;&#x6982;&#x5FF5;&#xFF0C;&#x548C;&#x4E24;&#x4E09;&#x4E2A;&#x5E38;&#x7528;&#x7684;<code>&#x201C;&#x547D;&#x4EE4;&#x201D;</code>&#x3002;</p>
<p>&#x9996;&#x5148;&#xFF0C;&#x4FDD;&#x8BC1;&#x4F60;&#x5904;&#x4E8E;unix-style&#x7684;&#x7CFB;&#x7EDF;&#xFF08;&#x5982;&#x5404;&#x79CD;linux&#x53D1;&#x884C;&#x7248;&#xFF0C;macOS&#x7B49;&#x3002;windows&#x672A;&#x5B9E;&#x9A8C;&#xFF09;&#xFF0C;&#x8F93;&#x5165;&#x6CD5;&#x5904;&#x4E8E;&#x82F1;&#x6587;&#x7684;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x3002;&#x7136;&#x540E;&#xFF0C;&#x7528;vim&#x547D;&#x4EE4;&#x6253;&#x5F00;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ vim hello_world.txt</div></pre></td></tr></table></figure>
<blockquote>
<p>&#x5982;&#x679C;&#x6587;&#x4EF6;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;vim&#x4F1A;&#x5E2E;&#x6211;&#x4EEC;&#x521B;&#x5EFA;&#x6587;&#x4EF6;&#x3002;</p>
</blockquote>
<p>&#x4EC0;&#x4E48;&#x90FD;&#x4E0D;&#x505A;&#x3002;&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x5904;&#x4E8E;&#x201C;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x201D;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x7ED9;vim&#x5C0F;&#x767D;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;/&#x547D;&#x4EE4;&#x6A21;&#x5F0F;-01.png" alt="&#x547D;&#x4EE4;&#x6A21;&#x5F0F;-01"></p>
<p>&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x6572;&#x51FB;&#x952E;&#x76D8;&#x8FDB;&#x884C;&#x64CD;&#x4F5C;&#xFF0C;&#x4F46;&#x4E0D;&#x80FD;&#x7F16;&#x8F91;&#x3002;&#x6CA1;&#x5185;&#x5BB9;&#x6CA1;&#x6CD5;&#x64CD;&#x4F5C;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x5148;&#x6572;&#x51FB;&#x5B57;&#x6BCD;<code>&#x201C;i&#x201D;</code>&#xFF0C;&#x8FDB;&#x5165;&#x201C;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x201D;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x7ED9;vim&#x5C0F;&#x767D;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;/&#x8F93;&#x5165;&#x6A21;&#x5F0F;-01.png" alt="&#x8F93;&#x5165;&#x6A21;&#x5F0F;-01"></p>
<p>&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x7684;&#x7279;&#x70B9;&#x662F;&#xFF0C;&#x7A97;&#x53E3;&#x6700;&#x4E0B;&#x65B9;&#x6709;&#x201C;INSERT&#x201D;&#x5B57;&#x6837;&#x3002;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x5C31;&#x53EF;&#x4EE5;&#x8F93;&#x5165;&#x5185;&#x5BB9;&#x4E86;&#xFF0C;&#x8F93;&#x5165;&#x201C;hello world&#x201D;&#x3002;&#x5B57;&#x6BCD;<code>&#x201C;i&#x201D;</code>&#x5728;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x4E0B;&#x662F;&#x4E00;&#x4E2A;&#x201C;&#x547D;&#x4EE4;&#x201D;&#xFF0C;&#x5728;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x4E0B;&#x5C31;&#x662F;&#x4E2A;&#x5355;&#x7EAF;&#x7684;&#x5B57;&#x6BCD;&#x4E86;&#x2014;&#x2014;&#x6572;&#x51FB;<code>&#x201C;&lt;Enter&gt;&#x201D;</code>&#x952E;&#x6362;&#x5230;&#x4E0B;&#x4E00;&#x884C;&#xFF0C;&#x6572;&#x51FB;&#x5B57;&#x6BCD;&#x201C;i&#x201D;&#x5C31;&#x8F93;&#x5165;&#x4E86;&#x4E00;&#x4E2A;&#x201C;i&#x201D;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x7ED9;vim&#x5C0F;&#x767D;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;/&#x8F93;&#x5165;&#x6A21;&#x5F0F;-02.png" alt="&#x8F93;&#x5165;&#x6A21;&#x5F0F;-02"></p>
<p>&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6572;&#x51FB;<code>&quot;&lt;Esc&gt;&quot;</code>&#x952E;&#xFF08;&#x952E;&#x76D8;&#x5DE6;&#x4E0A;&#x89D2;&#xFF09;&#x9000;&#x51FA;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x3002;&#x9000;&#x51FA;&#x540E;&#xFF0C;&#x5C06;&#x56DE;&#x5230;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#xFF0C;&#x5C31;&#x4E0D;&#x80FD;&#x7F16;&#x8F91;&#x4E86;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x7ED9;vim&#x5C0F;&#x767D;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;/&#x547D;&#x4EE4;&#x6A21;&#x5F0F;-02.png" alt="&#x547D;&#x4EE4;&#x6A21;&#x5F0F;-02"></p>
<blockquote>
<p>&#x770B;&#xFF0C;&#x56DE;&#x5230;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x540E;&#xFF0C;&#x7A97;&#x53E3;&#x6700;&#x4E0B;&#x65B9;&#x5C31;&#x6CA1;&#x6709;&#x6709;&#x201C;INSERT&#x201D;&#x5B57;&#x6837;&#x4E86;&#x3002;</p>
</blockquote>
<p>&#x6700;&#x540E;&#xFF0C;&#x6572;&#x51FB;&#x7B26;&#x53F7;<code>&#x201C;:&#x201D;</code>&#xFF08;&#x5207;&#x8BB0;&#xFF0C;<strong>&#x82F1;&#x6587;&#x7B26;&#x53F7;</strong>&#xFF09;&#x8FDB;&#x5165;&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x7ED9;vim&#x5C0F;&#x767D;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;/&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;-01.png" alt="&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;-01"></p>
<p>&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x7684;&#x7279;&#x70B9;&#x662F;&#xFF0C;&#x7A97;&#x53E3;&#x6700;&#x4E0B;&#x65B9;&#x6709;&#x4E00;&#x4E2A;&#x201C;:&#x201D;&#x3002;&#x5728;&#x201C;:&#x201D;&#x4E4B;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x8F93;&#x5165;&#x547D;&#x4EE4;&#xFF1B;&#x7136;&#x800C;&#x8FD9;&#x91CC;&#x7684;&#x547D;&#x4EE4;&#x4E0E;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x4E0B;&#x7684;&#x547D;&#x4EE4;&#x6709;&#x6240;&#x4E0D;&#x540C;&#xFF0C;&#x6BD4;&#x5982;&#x521A;&#x624D;&#x7684;&#x5B57;&#x6BCD;&#x201C;i&#x201D;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;&#x8F93;&#x5165;&#x662F;&#x65E0;&#x6548;&#x7684;&#x3002;&#x6211;&#x4EEC;&#x5148;&#x6572;&#x51FB;<code>&#x201C;&lt;Esc&gt;&#x201D;</code>&#x952E;&#x9000;&#x51FA;&#x8F93;&#x5165;&#x6A21;&#x5F0F;&#x6216;&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#xFF0C;&#x4EE5;&#x56DE;&#x5230;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x3002;&#x7136;&#x540E;&#xFF0C;&#x518D;&#x6B21;&#x6572;&#x51FB;&#x7B26;&#x53F7;<code>&#x201C;:&#x201D;</code>&#xFF0C;&#x91CD;&#x65B0;&#x8FDB;&#x5165;&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x3002;&#x8FD9;&#x6B21;&#xFF0C;&#x6211;&#x4EEC;&#x8F93;&#x5165;<code>&#x201C;wq&#x201D;</code>&#xFF0C;&#x6572;&#x51FB;<code>&#x201C;&lt;Enter&gt;&#x201D;</code>&#x952E;&#x2014;&#x2014;&#x201C;wq&#x201D;&#x7684;&#x610F;&#x601D;&#x662F;&#x201C;&#x4FDD;&#x5B58;&#x5E76;&#x9000;&#x51FA;&#x201D;&#xFF0C;&#x5728;&#x8FD9;&#x4E4B;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x4FDD;&#x5B58;&#x5185;&#x5BB9;&#x5E76;&#x9000;&#x51FA;&#x4E86;vim&#x3002;</p>
<blockquote>
<p>&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x201C;wq&#x201D;&#x662F;&#x8FDE;&#x7EED;&#x7684;&#x4E24;&#x4E2A;&#x547D;&#x4EE4;&#xFF1A;&#x201C;w&#x201D;&#x662F;&#x4FDD;&#x5B58;&#x201C;write&#x201D;&#x7684;&#x7F29;&#x5199;&#xFF0C;&#x201C;q&#x201D;&#x662F;&#x9000;&#x51FA;&#x201C;quit&#x201D;&#x7684;&#x7F29;&#x5199;&#xFF0C;unix-style&#x9F13;&#x52B1;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x7F29;&#x5199;&#x3002;</p>
</blockquote>
<p>&#x8BA9;&#x6211;&#x4EEC;&#x9A8C;&#x8BC1;&#x6587;&#x4EF6;&#x5185;&#x5BB9;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">$ cat hello_world.txt</div><div class="line">hello world</div><div class="line">i</div></pre></td></tr></table></figure>
<p>good job&#xFF01;</p>
<h1 id="&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;"><a href="#&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;" class="headerlink" title="&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;"></a>&#x5FEB;&#x6377;&#x952E;&#x901F;&#x6210;&#x624B;&#x518C;</h1><p>vim&#x7684;&#x7B80;&#x5355;&#x5728;&#x4E8E;&#xFF0C;&#x638C;&#x63E1;&#x4E86;&#x4E09;&#x4E2A;&#x6A21;&#x5F0F;&#x540E;&#xFF0C;&#x5269;&#x4E0B;&#x7684;&#x5C31;&#x662F;&#x67E5;&#x9605;&#x5404;&#x79CD;&#x725B;&#x903C;&#x7684;&#x5FEB;&#x6377;&#x952E;&#xFF0C;&#x7136;&#x540E;&#x719F;&#x7EC3;&#x64CD;&#x4F5C;&#x3002;&#x4E0D;&#x8FC7;&#xFF0C;&#x4E0E;&#x5176;&#x4ED6;&#x957F;&#x7BC7;&#x7D2F;&#x724D;&#x4ECB;&#x7ECD;vim&#x5FEB;&#x6377;&#x952E;&#x7684;&#x6587;&#x7AE0;&#x4E0D;&#x540C;&#xFF0C;&#x7334;&#x5B50;&#x5D07;&#x5C1A;&#x201C;less is more&#x201D;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x5217;&#x51FA;&#x4E86;&#x7334;&#x5B50;&#x6700;&#x5E38;&#x7528;&#x7684;&#x5FEB;&#x6377;&#x952E;&#xFF0C;&#x53EF;&#x4EE5;&#x50CF;&#x7334;&#x5B50;&#x4E00;&#x6837;&#xFF0C;&#x628A;&#x5B83;&#x5F53;&#x505A;&#x6781;&#x7B80;&#x7248;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x624B;&#x518C;&#xFF0C;&#x76F4;&#x63A5;&#x914D;&#x7F6E;&#x5728;<code>&#x201C;.vimrc&#x201D;</code>&#xFF08;vim&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5728;&#x7528;&#x6237;&#x76EE;&#x5F55;<code>&quot;~&quot;</code>&#x4E0B;&#xFF09;&#x4E2D;&#xFF1A;</p>
<blockquote>
<ul>
<li><code>&quot;</code>&#x5F00;&#x5934;&#x7684;&#x884C;&#x662F;&#x6CE8;&#x91CA;&#xFF0C;&#x5176;&#x4ED6;&#x662F;vim&#x811A;&#x672C;&#xFF0C;vim&#x542F;&#x52A8;&#x65F6;&#x6267;&#x884C;<code>&#x201C;.vimrc&#x201D;</code>&#x4E2D;&#x7684;&#x5168;&#x90E8;vim&#x811A;&#x672C;</li>
<li>&#x7EDD;&#x5927;&#x90E8;&#x5206;&#x662F;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x7684;&#x547D;&#x4EE4;</li>
<li>&#x4EE5;&#x201C;:&#x201D;&#x5F00;&#x5934;&#x7684;&#x662F;&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x7684;&#x547D;&#x4EE4;</li>
</ul>
</blockquote>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div></pre></td><td class="code"><pre><div class="line">&quot; &#x4E00;&#x4E9B;&#x7279;&#x6B8A;&#x7684;vim&#x811A;&#x672C;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x6267;&#x884C;&#xFF0C;&#x6682;&#x65F6;&#x5FFD;&#x7565;&#x5B83;&#x4EEC;</div><div class="line">syntax on	&quot; &#x6839;&#x636E;&#x8BED;&#x6CD5;&#x6E32;&#x67D3;</div><div class="line">set nu	&quot; &#x663E;&#x793A;&#x884C;&#x53F7;</div><div class="line">&quot; set nu!	&quot; &#x4E0D;&#x663E;&#x793A;&#x884C;&#x53F7;</div><div class="line">set colorcolumn=100</div><div class="line">set tabstop=4</div><div class="line">set expandtab</div><div class="line">set autoindent</div><div class="line">set paste!</div><div class="line"></div><div class="line">&quot; &#x6781;&#x7B80;&#x7248;&#x901F;&#x6210;&#x624B;&#x518C;</div><div class="line"></div><div class="line">&quot; &#x5404;&#x79CD;&#x79FB;&#x52A8;&#x5149;&#x6807;</div><div class="line">&quot; vim&#x5EFA;&#x8BAE;&#x5149;&#x6807;&#x79FB;&#x52A8;&#x4F7F;&#x7528;&quot;hjkl&quot;&#xFF0C;&#x8BA9;&#x624B;&#x4FDD;&#x6301;&#x5728;&#x952E;&#x76D8;&#x4E2D;&#x5FC3;&#x3002;&#x4F46;&#x7334;&#x5B50;&#x6682;&#x65F6;&#x8FD8;&#x662F;&#x4E60;&#x60EF;&#x4F7F;&#x7528;&#x65B9;&#x5411;&#x952E;</div><div class="line">&quot; h &#x5411;&#x5DE6;&#x79FB;&#x52A8;&#x4E00;&#x6B21;&#x5149;&#x6807;</div><div class="line">&quot; j &#x5411;&#x4E0B;&#x79FB;&#x52A8;&#x4E00;&#x6B21;&#x5149;&#x6807;</div><div class="line">&quot; k &#x5411;&#x4E0A;&#x79FB;&#x52A8;&#x4E00;&#x6B21;&#x5149;&#x6807;</div><div class="line">&quot; l &#x5411;&#x53F3;&#x79FB;&#x52A8;&#x4E00;&#x6B21;&#x5149;&#x6807;</div><div class="line">&quot; b &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x4E0A;&#x4E00;&#x8BCD;&#x9996;</div><div class="line">&quot; &#x672A;&#x5B9A;&#x4E49;&#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x4E0B;&#x4E00;&#x8BCD;&#x5C3E;</div><div class="line">&quot; w &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x4E0B;&#x4E00;&#x8BCD;&#x9996;</div><div class="line">&quot; e &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x4E0B;&#x4E00;&#x8BCD;&#x5C3E;</div><div class="line">&quot; &lt;ctrl&gt; + u &#x5411;&#x4E0A;&#x6EDA;&#x52A8;10&#x884C;&#xFF08;&#x884C;&#x6570;&#x53EF;&#x914D;&#x7F6E;&#xFF09;</div><div class="line">&quot; &lt;ctrl&gt; + d &#x5411;&#x4E0B;&#x6EDA;&#x52A8;10&#x884C;</div><div class="line">&quot; &lt;ctrl&gt; + f &#x5411;&#x4E0B;&#x6EDA;&#x52A8;&#x4E00;&#x5C4F;</div><div class="line">&quot; &lt;ctrl&gt; + b &#x5411;&#x4E0A;&#x6EDA;&#x52A8;&#x4E00;&#x5C4F;</div><div class="line">&quot; gg &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x6587;&#x4EF6;&#x9996;</div><div class="line">&quot; G &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x6587;&#x4EF6;&#x5C3E;</div><div class="line">&quot; &#x5C06;&#x6570;&#x5B57;&#x548C;&#x65B9;&#x5411;&#x547D;&#x4EE4;&#x7EC4;&#x5408;&#x5728;&#x4E00;&#x8D77;&#xFF0C;vim&#x5927;&#x6CD5;&#x597D;</div><div class="line">&quot; 10k &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x5411;&#x4E0A;10&#x884C;&#xFF0C;10&#x53EF;&#x4EE5;&#x662F;&#x4EFB;&#x610F;&#x6B63;&#x6570;&#x3002;&#x81EA;&#x7136;10j&#x5C31;&#x662F;&#x5149;&#x6807;&#x5411;&#x4E0B;&#x79FB;&#x52A8;10&#x884C;</div><div class="line">&quot; 10h &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x5411;&#x5DE6;10&#x4E2A;&#x5B57;&#x7B26;&#xFF0C;10l&#x540C;&#x7406;</div><div class="line">&quot; &lt;ctrl&gt; + o &#x79FB;&#x52A8;&#x5149;&#x6807;&#x5230;&#x4E0A;&#x4E00;&#x4F4D;&#x7F6E;</div><div class="line"></div><div class="line">&quot; &#x8FDB;&#x5165;&#x8F93;&#x5165;&#x6A21;&#x5F0F;</div><div class="line">&quot; i &#x5728;&#x5F53;&#x524D;&#x4F4D;&#x7F6E;&#x540E;&#x63D2;&#x5165;&#x5B57;&#x7B26;</div><div class="line">&quot; I &#x5728;&#x5F53;&#x524D;&#x4F4D;&#x7F6E;&#x524D;&#x63D2;&#x5165;&#x5B57;&#x7B26;</div><div class="line">&quot; o &#x5728;&#x5F53;&#x524D;&#x884C;&#x540E;&#x63D2;&#x5165;&#x884C;</div><div class="line">&quot; O &#x5728;&#x5F53;&#x524D;&#x884C;&#x524D;&#x63D2;&#x5165;&#x884C;</div><div class="line"></div><div class="line">&quot; &#x590D;&#x5236;</div><div class="line">&quot; y &#x590D;&#x5236;&#x9009;&#x4E2D;&#x8303;&#x56F4;&#xFF08;&#x914D;&#x5408;&#x540E;&#x9762;&#x7684;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;&#x64CD;&#x4F5C;&#xFF09;</div><div class="line">&quot; yy &#x590D;&#x5236;&#x884C;</div><div class="line">&quot; y10 &#x4ECE;&#x5F53;&#x524D;&#x884C;&#x5F00;&#x59CB;&#x5411;&#x4E0B;&#x6570;&#xFF0C;&#x5171;&#x590D;&#x5236;11&#x884C;</div><div class="line">&quot; ye &#x590D;&#x5236;&#x5230;&#x8BCD;&#x5C3E;&#xFF08;&#x542B;&#x8BCD;&#x5C3E;&#xFF09;&#xFF0C;&#x5176;&#x4ED6;&#x7EC4;&#x5408;&#x540C;&#x7406;</div><div class="line"></div><div class="line">&quot; &#x7C98;&#x8D34;</div><div class="line">&quot; p &#x5728;&#x5F53;&#x524D;&#x4F4D;&#x7F6E;&#x540E;&#x63D2;&#x5165;</div><div class="line">&quot; P &#x5728;&#x5F53;&#x524D;&#x4F4D;&#x7F6E;&#x524D;&#x63D2;&#x5165;</div><div class="line"></div><div class="line">&quot; &#x526A;&#x5207;&#xFF08;&#x590D;&#x5236; + &#x5220;&#x9664;&#xFF09;</div><div class="line">&quot; d &#x526A;&#x5207;&#x9009;&#x4E2D;&#x8303;&#x56F4;</div><div class="line">&quot; dd &#x526A;&#x5207;&#x884C;</div><div class="line">&quot; d10 &#x4ECE;&#x5F53;&#x524D;&#x884C;&#x5F00;&#x59CB;&#x5411;&#x4E0B;&#x6570;&#xFF0C;&#x5171;&#x526A;&#x5207;11&#x884C;</div><div class="line">&quot; de &#x5220;&#x9664;&#x5230;&#x8BCD;&#x5C3E;&#xFF08;&#x542B;&#x8BCD;&#x5C3E;&#xFF09;&#xFF0C;&#x5176;&#x4ED6;&#x7EC4;&#x5408;&#x540C;&#x7406;</div><div class="line">&quot; x &#x526A;&#x5207;&#x9009;&#x4E2D;&#x8303;&#x56F4;&#x3002;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x81F3;&#x5C11;&#x9009;&#x4E2D;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#xFF0C;&#x56E0;&#x6B64;x&#x66F4;&#x5E38;&#x7528;&#x4E8E;&#x526A;&#x5207;&#x5355;&#x4E2A;&#x7684;&#x5B57;&#x7B26;&#xFF0C;&#x5176;&#x4ED6;&#x8303;&#x56F4;&#x7C7B;&#x64CD;&#x4F5C;&#x5EFA;&#x8BAE;&#x4F7F;&#x7528;d</div><div class="line">&quot; &#x526A;&#x5207; = &#x590D;&#x5236; + &#x5220;&#x9664;, &#x610F;&#x5473;&#x7740;&#x63A5;&#x4E0B;&#x6765;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x7C98;&#x8D34;</div><div class="line"></div><div class="line">&quot; v &#x5B57;&#x7B26;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;&#xFF08;&#x4E00;&#x79CD;&#x7279;&#x6B8A;&#x7684;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#xFF09;</div><div class="line">&quot; V &#x884C;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;</div><div class="line">&quot; &lt;ctrl&gt; + v &#x5217;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;&#x3002;&#x8FDB;&#x5165;&#x5217;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;&#x540E;&#xFF0C;&#x53EF;&#x914D;&#x5408;I&#x6307;&#x4EE4;&#x8FDB;&#x884C;&#x5217;&#x7F16;&#x8F91;</div><div class="line">&quot; &#x53EF;&#x89C6;&#x6A21;&#x5F0F;&#x9009;&#x62E9;&#x201C;&#x5757;&#x201D;&#x540E;&#xFF0C;&#x65B9;&#x4FBF;&#x8FDB;&#x884C;&#x53EF;&#x89C6;&#x5316;&#x7684;&#x526A;&#x5207;&#x548C;&#x590D;&#x5236;&#xFF0C;&#x6267;&#x884C;&#x6307;&#x4EE4;&#x6216;&#x6572;&#x51FB;&lt;Esc&gt;&#x952E;&#x9000;&#x51FA;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;</div><div class="line">&quot; &#x9009;&#x62E9;&#x201C;&#x5757;&#x201D;&#x65F6;&#xFF0C;&#x547D;&#x4EE4;&#x6A21;&#x5F0F;&#x4E0B;&#x5404;&#x79CD;&#x5149;&#x6807;&#x79FB;&#x52A8;&#x65B9;&#x5F0F;&#x4ECD;&#x7136;&#x6709;&#x6548;&#xFF0C;&#x4F7F;&#x5F97;&#x7528;&#x6237;&#x80FD;&#x591F;&#x9AD8;&#x6548;&#x9009;&#x62E9;&#x4ECE;&#x5149;&#x6807;&#x8D77;&#x70B9;&#xFF08;&#x8FDB;&#x5165;&#x53EF;&#x89C6;&#x6A21;&#x5F0F;&#x7684;&#x4F4D;&#x7F6E;&#xFF09;&#x5230;&#x5149;&#x6807;&#x7EC8;&#x70B9;&#xFF08;&#x5149;&#x6807;&#x79FB;&#x52A8;&#x540E;&#x7684;&#x4F4D;&#x7F6E;&#xFF09;&#x7684;&#x5757;</div><div class="line"></div><div class="line">&quot; r &#x8986;&#x76D6;&#xFF0C;&#x53EF;&#x4EE5;&#x7B80;&#x5316;&#x201C;&#x5148;&#x5220;&#x9664;&#x518D;&#x8F93;&#x5165;&#x201D;&#x7684;&#x64CD;&#x4F5C;&#x987A;&#x5E8F;</div><div class="line"></div><div class="line">&quot; u undo</div><div class="line">&quot; &lt;ctrl&gt; + r redo</div><div class="line"></div><div class="line">&quot; :w &#x5199;&#x5165;</div><div class="line">&quot; :q &#x9000;&#x51FA;</div><div class="line">&quot; :wq &#x5199;&#x5165;+&#x9000;&#x51FA;&#xFF0C;&#x547D;&#x4EE4;&#x7684;&#x7075;&#x6D3B;&#x7EC4;&#x5408;&#x662F;vim&#x6548;&#x7387;&#x6240;&#x5728;</div><div class="line">&quot; :10 &#x5149;&#x6807;&#x79FB;&#x52A8;&#x5230;&#x7B2C;10&#x884C;&#xFF08;&#x884C;&#x53F7;&#x4ECE;1&#x5F00;&#x59CB;&#xFF09;</div></pre></td></tr></table></figure>
<p>just do it!</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x5B9E;&amp;#x4E60;&amp;#x7EC4;&amp;#x7684;&amp;#x4EE3;&amp;#x7801;&amp;#x4FDD;&amp;#x5BC6;&amp;#x7EA7;&amp;#x522B;&amp;#x9AD8;&amp;#xFF0C;&amp;#x8981;&amp;#x6C42;&amp;#x4EE3;&amp;#x7801;&amp;#x4E0D;&amp;#x80FD;&amp;#x62C9;&amp;#x5230;&amp;#x672C;&amp;#x5730;&amp;#xFF08;&amp;#x5F53;&amp;#x7136;&amp;#x4E5F;&amp;#x4E0D;&amp;#x80FD;&amp;#x8FDC;&amp;#x7A0B;&amp;#x8FDE;&amp;#x63A5;&amp;#x670D;&amp;#x52A1;&amp;#x5668;&amp;#x4E0A;&amp;#x7684;git&amp;#x4ED3;&amp;#x5E93;&amp;#xFF09;&amp;#xFF0C;&amp;#x4E00;&amp;#x5F8B;&amp;#x5728;&amp;#x670D;&amp;#x52A1;&amp;#x5668;&amp;#x4E0A;&amp;#x8FDB;&amp;#x884C;&amp;#x5F00;&amp;#x53D1;&amp;#x3001;&amp;#x6D4B;&amp;#x8BD5;&amp;#x3002;CLion&amp;#x767D;&amp;#x5B66;&amp;#x4E86;&amp;#xFF0C;&amp;#x6295;&amp;#x5954;vim&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="猿工" scheme="https://monkeysayhi.github.io/tags/%E7%8C%BF%E5%B7%A5/"/>
    
  </entry>
  
  <entry>
    <title>Linux文件系统：inode&amp;block，文件&amp;目录，硬链&amp;软链</title>
    <link href="https://monkeysayhi.github.io/2018/03/10/Linux%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%9Ainode&amp;block%EF%BC%8C%E6%96%87%E4%BB%B6&amp;%E7%9B%AE%E5%BD%95%EF%BC%8C%E7%A1%AC%E9%93%BE&amp;%E8%BD%AF%E9%93%BE/"/>
    <id>https://monkeysayhi.github.io/2018/03/10/Linux文件系统：inode&amp;block，文件&amp;目录，硬链&amp;软链/</id>
    <published>2018-03-09T16:10:13.000Z</published>
    <updated>2018-09-02T10:47:18.000Z</updated>
    
    <content type="html"><![CDATA[<p><code>inode</code>&#x4E0E;<code>block</code>&#x662F;&#x7406;&#x89E3;Linux&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x7684;&#x57FA;&#x7840;&#x6982;&#x5FF5;&#x3002;&#x5728;&#x6B64;&#x57FA;&#x7840;&#x4E0A;&#x5B9E;&#x73B0;&#x4E86;<code>&#x6587;&#x4EF6;</code>&#x3001;<code>&#x76EE;&#x5F55;</code>&#x3001;<code>&#x786C;&#x94FE;</code>&#x3001;<code>&#x8F6F;&#x94FE;</code>&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF1A;CentOS 6.5&#xFF08;Linux 2.6&#xFF09;&#x3002;</p>
</blockquote>
<h1 id="inode-amp-block"><a href="#inode-amp-block" class="headerlink" title="inode &amp; block"></a>inode &amp; block</h1><h2 id="block&#x548C;inode&#x7684;&#x610F;&#x4E49;"><a href="#block&#x548C;inode&#x7684;&#x610F;&#x4E49;" class="headerlink" title="block&#x548C;inode&#x7684;&#x610F;&#x4E49;"></a>block&#x548C;inode&#x7684;&#x610F;&#x4E49;</h2><p>&#x7406;&#x89E3;inode&#xFF0C;&#x8981;&#x4ECE;&#x6587;&#x4EF6;&#x50A8;&#x5B58;&#x8BF4;&#x8D77;&#x3002;</p>
<p>&#x6587;&#x4EF6;&#x50A8;&#x5B58;&#x5728;&#x786C;&#x76D8;&#x4E0A;&#xFF0C;<strong>&#x786C;&#x76D8;&#x7684;&#x6700;&#x5C0F;&#x5B58;&#x50A8;&#x5355;&#x4F4D;&#x53EB;&#x505A;&#x201D;<code>&#x6247;&#x533A;</code>&#x201C;</strong>&#xFF08;Sector&#xFF0C;&#x5E38;&#x89C1;512B&#xFF09;&#xFF0C;<strong>&#x591A;&#x4E2A;&#x6247;&#x533A;&#x7EC4;&#x6210;&#x7684;&#x4E00;&#x4E2A;&#x201D;<code>&#x5757;</code>&#x201C;</strong>&#xFF08;block&#xFF0C;&#x5E38;&#x89C1;4096B&#xFF0C;&#x5373;&#x8FDE;&#x7EED;8&#x4E2A;sector&#x7EC4;&#x6210;&#x4E00;&#x4E2A;block&#xFF09;&#x3002;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E00;&#x6B21;&#x6027;&#x8BFB;&#x53D6;&#x4E00;&#x4E2A;&#x5757;&#xFF08;8&#x4E2A;&#x8FDE;&#x7EED;8&#x4E2A;&#x6247;&#x533A;&#xFF09;&#xFF0C;&#x4EE5;&#x63D0;&#x9AD8;&#x78C1;&#x76D8;IO&#x6548;&#x7387;&#x3002;&#x56E0;&#x6B64;&#xFF0C;<strong>&#x5757;&#x662F;&#x78C1;&#x76D8;&#x8BFB;&#x5199;&#x7684;&#x6700;&#x5C0F;&#x5355;&#x4F4D;</strong>&#x3002;</p>
<p>&#x540C;&#x65F6;&#xFF0C;<strong>&#x5757;&#x662F;&#x6587;&#x4EF6;&#x5B58;&#x53D6;&#x7684;&#x6700;&#x5C0F;&#x5355;&#x4F4D;</strong>&#xFF0C;&#x591A;&#x4E2A;&#x5757;&#x7EC4;&#x6210;<code>&#x6587;&#x4EF6;&#x5185;&#x5BB9;</code>&#x3002;&#x663E;&#x7136;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x7ED3;&#x6784;&#x5B58;&#x50A8;<code>&#x6587;&#x4EF6;&#x5143;&#x4FE1;&#x606F;</code>&#xFF08;&#x6587;&#x4EF6;&#x7684;&#x521B;&#x5EFA;&#x8005;&#x3001;&#x521B;&#x5EFA;&#x65E5;&#x671F;&#x3001;&#x5185;&#x5BB9;&#x5927;&#x5C0F;&#x7B49;&#xFF09;&#xFF0C;&#x4E5F;&#x5C31;&#x5F15;&#x51FA;&#x4E86;<code>&#x7D22;&#x5F15;&#x8282;&#x70B9;</code>&#xFF08;inode&#xFF0C;Index Node&#xFF09;&#x3002;<strong>&#x7D22;&#x5F15;&#x8282;&#x70B9;&#x7528;&#x4E8E;&#x7D22;&#x5F15;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x6240;&#x6709;&#x5757;</strong>&#x3002;</p>
<h2 id="inode&#x7684;&#x5185;&#x5BB9;"><a href="#inode&#x7684;&#x5185;&#x5BB9;" class="headerlink" title="inode&#x7684;&#x5185;&#x5BB9;"></a>inode&#x7684;&#x5185;&#x5BB9;</h2><p>inode&#x7EF4;&#x62A4;&#x6587;&#x4EF6;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x3002;&#x53EF;&#x4EE5;&#x7528;<code>stat &lt;path&gt;</code>&#x547D;&#x4EE4;&#x67E5;&#x770B;&#x67D0;&#x4E2A;&#x6587;&#x4EF6;&#x7684;inode&#x4FE1;&#x606F;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test <span class="built_in">stat</span> example.txt</div><div class="line">  File: <span class="string">&quot;example.txt&quot;</span></div><div class="line">  Size: 4847      	Blocks: 16         IO Block: 4096   &#x666E;&#x901A;&#x6587;&#x4EF6;</div><div class="line">Device: fd00h/64768d	Inode: 261774      Links: 1</div><div class="line">Access: (0664/-rw-rw-r--)  Uid: (  500/    lauo)   Gid: (  500/    lauo)</div><div class="line">Access: 2018-03-09 22:55:01.306013501 +0800</div><div class="line">Modify: 2018-03-09 22:55:01.307013501 +0800</div><div class="line">Change: 2018-03-09 22:55:31.796013501 +0800</div></pre></td></tr></table></figure>
<p><strong>&#x9664;&#x4E86;&#x6587;&#x4EF6;&#x540D;</strong>&#x4EE5;&#x5916;&#x7684;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x4FE1;&#x606F;&#xFF0C;&#x90FD;&#x5B58;&#x5728;inode&#x4E4B;&#x4E2D;&#x3002;</p>
<blockquote>
<p>&#x81F3;&#x4E8E;&#x4E3A;&#x4EC0;&#x4E48;&#x6CA1;&#x6709;&#x6587;&#x4EF6;&#x540D;&#xFF0C;&#x4E0B;&#x9762;&#x4F1A;&#x6709;&#x8BE6;&#x7EC6;&#x89E3;&#x91CA;&#x3002;</p>
</blockquote>
<h2 id="inode&#x5927;&#x5C0F;&#x4E0E;inode&#x6570;&#x91CF;&#x4E0A;&#x9650;"><a href="#inode&#x5927;&#x5C0F;&#x4E0E;inode&#x6570;&#x91CF;&#x4E0A;&#x9650;" class="headerlink" title="inode&#x5927;&#x5C0F;&#x4E0E;inode&#x6570;&#x91CF;&#x4E0A;&#x9650;"></a>inode&#x5927;&#x5C0F;&#x4E0E;inode&#x6570;&#x91CF;&#x4E0A;&#x9650;</h2><p>inode&#x4E5F;&#x4F1A;&#x6D88;&#x8017;&#x786C;&#x76D8;&#x7A7A;&#x95F4;&#xFF0C;&#x6240;&#x4EE5;<em><strong>&#x786C;&#x76D8;&#x683C;&#x5F0F;&#x5316;&#x7684;&#x65F6;&#x5019;</strong>&#xFF0C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x81EA;&#x52A8;&#x5C06;&#x786C;&#x76D8;&#x5206;&#x6210;&#x4E24;&#x4E2A;&#x533A;&#x57DF;&#xFF1A;&#x4E00;&#x4E2A;&#x662F;<code>&#x6570;&#x636E;&#x533A;</code>&#xFF08;data area&#xFF09;&#xFF0C;&#x5B58;&#x653E;block&#xFF1B;&#x53E6;&#x4E00;&#x4E2A;&#x662F;<code>inode&#x533A;</code>&#xFF08;&#x4E5F;&#x4EA4;inode&#x8868;&#xFF0C;inode table&#xFF09;&#xFF0C;&#x5B58;&#x653E;inode</em>&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#x8FD8;&#x6709;&#x5176;&#x4ED6;&#x533A;&#xFF0C;&#x6682;&#x65F6;&#x4E0D;&#x8003;&#x8651;&#x3002;</p>
<p>&#x6BCF;&#x4E2A;inode&#x8282;&#x70B9;&#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x4E00;&#x822C;&#x662F;128B&#x6216;256B&#x3002;&#x53EF;&#x4EE5;&#x7528;&#x5982;&#x4E0B;<code>dumpe2fs -h &lt;disk_path&gt;</code>&#x547D;&#x4EE4;&#x67E5;&#x770B;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test sudo dumpe2fs -h /dev/sda1 | grep <span class="string">&quot;Inode size&quot;</span></div><div class="line">dumpe2fs 1.41.12 (17-May-2010)</div><div class="line">Inode size:	          128</div></pre></td></tr></table></figure>
<blockquote>
<p><code>/dev/sda1</code>&#x6307;&#x6302;&#x8F7D;&#x7684;SATA&#x76D8;&#x3002;&#x81F3;&#x4E8E;SATA&#x76D8;&#x662F;&#x4EC0;&#x4E48;&#xFF0C;&#x7334;&#x5B50;&#x6682;&#x65F6;&#x6728;&#x6709;&#x5173;&#x5FC3;&#x3002;</p>
</blockquote>
<p><strong>inode&#x8282;&#x70B9;&#x7684;&#x6700;&#x5927;&#x6570;&#x91CF;&#xFF0C;&#x5728;&#x683C;&#x5F0F;&#x5316;&#x65F6;&#x5C31;&#x7ED9;&#x5B9A;</strong>&#x3002;&#x5728;&#x521D;&#x59CB;&#x5316;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x65F6;&#xFF0C;inode table&#x521D;&#x59CB;&#x5927;&#x5C0F;&#x4E3A;0&#xFF0C;&#x7136;&#x540E;&#xFF0C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x6BCF;&#x5206;&#x914D;1024B&#x6216;2048B&#x7ED9;data area&#xFF0C;&#x5C31;&#x5206;&#x914D;inode&#x5927;&#x5C0F;&#x7684;&#x7A7A;&#x95F4;&#xFF08;128B&#x6216;256B&#xFF09;&#x7ED9;inode table&#xFF0C;&#x4FDD;&#x6301;2048 : 256 = 8 : 1&#x7684;&#x5206;&#x914D;&#x6BD4;&#x4F8B;&#x3002;&#x6CE8;&#x610F;&#xFF0C;&#x6B64;&#x5904;&#x4EC5;&#x4EC5;&#x662F;<strong>&#x4FDD;&#x6301;data area&#x4E0E;inode table&#x7684;&#x5206;&#x914D;&#x6BD4;&#x4F8B;&#xFF08;&#x5982;8:1&#xFF09;</strong>&#xFF0C;&#x4E0E;&#x672A;&#x6765;&#x4E00;&#x4E2A;inode&#x6307;&#x5411;&#x591A;&#x5C11;block&#x65E0;&#x5173;&#x3002;</p>
<p>&#x5047;&#x5B9A;&#x5728;&#x4E00;&#x5757;2GB&#x7684;&#x786C;&#x76D8;&#x4E2D;&#xFF0C;data area&#x4E0E;inode table&#x7684;&#x5206;&#x914D;&#x6BD4;&#x4F8B;&#x4E3A;8 : 1&#xFF0C;&#x5219;inode table&#x5360;&#x7528;11.11%&#x7684;&#x78C1;&#x76D8;&#x7A7A;&#x95F4;&#xFF0C;&#x5373;227.56MB&#xFF1B;inode size 256B&#xFF0C;&#x5219;inode&#x6570;&#x91CF;&#x7684;&#x4E0A;&#x9650;&#x4E3A;932067&#x3002;</p>
<p>&#x4F7F;&#x7528;&#x5982;&#x4E0B;<code>df -i</code>&#x547D;&#x4EE4;&#x67E5;&#x770B;&#x6BCF;&#x4E2A;&#x786C;&#x76D8;&#x5206;&#x533A;&#x7684;inode&#x6570;&#x91CF;&#x4E0A;&#x9650;&#x3001;&#x5DF2;&#x7528;&#x6570;&#x91CF;&#x3001;&#x5269;&#x4F59;&#x6570;&#x91CF;&#x7B49;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test df -i</div><div class="line">Filesystem                   Inodes IUsed  IFree IUse% Mounted on</div><div class="line">/dev/mapper/VolGroup-lv_root 912128 33668 878460    4% /</div><div class="line">tmpfs                         63627     1  63626    1% /dev/shm</div><div class="line">/dev/sda1                    128016    38 127978    1% /boot</div></pre></td></tr></table></figure>
<p>&#x65E2;&#x7136;inode&#x8282;&#x70B9;&#x7684;&#x6570;&#x91CF;&#x5B58;&#x5728;&#x4E0A;&#x9650;&#xFF0C;&#x800C;&#x6BCF;&#x4E2A;&#x6587;&#x4EF6;&#x53C8;&#x5FC5;&#x987B;&#x6709;&#x4E00;&#x4E2A;inode&#xFF0C;&#x56E0;&#x6B64;<strong>&#x6709;&#x53EF;&#x80FD;&#x53D1;&#x751F;inode&#x5DF2;&#x7ECF;&#x7528;&#x5149;&#xFF0C;&#x4F46;&#x662F;&#x786C;&#x76D8;&#x8FD8;&#x672A;&#x5B58;&#x6EE1;&#x7684;&#x60C5;&#x51B5;</strong>&#xFF08;&#x5982;&#x6BCF;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x5927;&#x5C0F;&#x90FD;&#x5C0F;&#x4E8E;2048B&#xFF09;&#x3002;&#x8FD9;&#x65F6;&#xFF0C;&#x5C31;&#x65E0;&#x6CD5;&#x5728;&#x786C;&#x76D8;&#x4E0A;&#x521B;&#x5EFA;&#x65B0;&#x6587;&#x4EF6;&#x4E86;&#x3002;</p>
<h2 id="inode&#x53F7;"><a href="#inode&#x53F7;" class="headerlink" title="inode&#x53F7;"></a>inode&#x53F7;</h2><p>Linux&#x7CFB;&#x7EDF;<strong>&#x4F7F;&#x7528;inode&#x53F7;&#x6765;&#x8BC6;&#x522B;&#x6587;&#x4EF6;</strong>&#xFF0C;&#x6587;&#x4EF6;&#x540D;&#x4EC5;&#x4EC5;&#x662F;&#x6587;&#x4EF6;&#x7684;&#x522B;&#x540D;&#x3002;</p>
<p>&#x8868;&#x9762;&#x4E0A;&#xFF0C;&#x7528;&#x6237;&#x901A;&#x8FC7;&#x6587;&#x4EF6;&#x540D;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x2014;&#x2014;&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x7CFB;&#x7EDF;&#x5185;&#x90E8;&#x5206;&#x4E09;&#x6B65;&#x5B8C;&#x6210;&#x8FD9;&#x4E00;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<ol>
<li>&#x627E;&#x5230;&#x6587;&#x4EF6;&#x540D;&#x5BF9;&#x5E94;&#x7684;inode&#x53F7;&#xFF08;&#x5185;&#x5B58;&#xFF09;&#x3002;</li>
<li>&#x901A;&#x8FC7;inode&#x53F7;&#x7801;&#xFF0C;&#x83B7;&#x53D6;inode&#x5185;&#x5BB9;&#xFF08;&#x78C1;&#x76D8;&#xFF09;&#x3002;</li>
<li>&#x6700;&#x540E;&#xFF0C;&#x6839;&#x636E;inode&#x5185;&#x5BB9;&#xFF0C;&#x627E;&#x5230;&#x6587;&#x4EF6;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x7684;&#x6240;&#x6709;block&#xFF0C;&#x8BFB;&#x51FA;&#x6570;&#x636E;&#xFF08;&#x78C1;&#x76D8;&#xFF09;&#x3002;</li>
</ol>
<blockquote>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x5982;&#x679C;&#x53EA;&#x83B7;&#x53D6;&#x6587;&#x4EF6;&#x540D;&#x4E0E;inode&#x53F7;&#x7801;&#xFF0C;&#x662F;&#x4E0D;&#x9700;&#x8981;&#x8BFB;&#x53D6;&#x78C1;&#x76D8;&#x7684;&#x3002;</p>
</blockquote>
<p>&#x4F7F;&#x7528;<code>ls -i &lt;path&gt;</code>&#x547D;&#x4EE4;&#x67E5;&#x770B;&#x6587;&#x4EF6;&#x540D;&#x5BF9;&#x5E94;&#x7684;inode&#x53F7;&#x7801;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test ls -i example.txt</div><div class="line">261774 example.txt</div></pre></td></tr></table></figure>
<h2 id="inode&#x5230;block&#x7684;&#x6620;&#x5C04;"><a href="#inode&#x5230;block&#x7684;&#x6620;&#x5C04;" class="headerlink" title="inode&#x5230;block&#x7684;&#x6620;&#x5C04;"></a>inode&#x5230;block&#x7684;&#x6620;&#x5C04;</h2><blockquote>
<p><font color="red">// TODO: &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x8BB2;&#x8FC7;&#xFF0C;&#x5F85;&#x8003;&#x8BC1;</font>&#x3002;</p>
</blockquote>
<h1 id="&#x6587;&#x4EF6;-amp-&#x76EE;&#x5F55;"><a href="#&#x6587;&#x4EF6;-amp-&#x76EE;&#x5F55;" class="headerlink" title="&#x6587;&#x4EF6; &amp; &#x76EE;&#x5F55;"></a>&#x6587;&#x4EF6; &amp; &#x76EE;&#x5F55;</h1><h2 id="&#x6587;&#x4EF6;"><a href="#&#x6587;&#x4EF6;" class="headerlink" title="&#x6587;&#x4EF6;"></a>&#x6587;&#x4EF6;</h2><p>&#x4ECB;&#x7ECD;inode&#x65F6;&#xFF0C;&#x5DF2;&#x7ECF;&#x8BF4;&#x660E;&#x4E86;&#x6587;&#x4EF6;&#x7684;&#x5B9E;&#x73B0;&#x2014;&#x2014;&#x6BCF;&#x4E2A;&#x6587;&#x4EF6;&#x90FD;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;inode&#xFF0C;&#x6587;&#x4EF6;&#x540D;&#x662F;&#x6587;&#x4EF6;&#x7684;&#x522B;&#x540D;&#xFF0C;inode&#x662F;&#x6587;&#x4EF6;&#x7684;&#x672C;&#x4F53;&#xFF1B;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7EF4;&#x62A4;&#x6587;&#x4EF6;&#x540D;&#x5230;inode&#x7684;&#x6620;&#x5C04;&#x3002;</p>
<p>Linux&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;<strong>&#x4E00;&#x5207;&#x7686;&#x6587;&#x4EF6;</strong>&#xFF0C;&#x5305;&#x62EC;&#x540E;&#x9762;&#x8981;&#x89E3;&#x91CA;&#x7684;&#x76EE;&#x5F55;&#x3001;&#x786C;&#x94FE;&#x63A5;&#x3001;&#x8F6F;&#x94FE;&#x63A5;&#xFF0C;&#x5305;&#x62EC;socket&#x3001;&#x8BBE;&#x5907;&#x3001;&#x5185;&#x5B58;&#x7B49;&#x3002;&#x7406;&#x89E3;&#x8FD9;&#x4E00;&#x70B9;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x3002;</p>
<h2 id="&#x76EE;&#x5F55;&#x6587;&#x4EF6;"><a href="#&#x76EE;&#x5F55;&#x6587;&#x4EF6;" class="headerlink" title="&#x76EE;&#x5F55;&#x6587;&#x4EF6;"></a>&#x76EE;&#x5F55;&#x6587;&#x4EF6;</h2><p>Linux&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;<code>&#x76EE;&#x5F55;</code>&#xFF08;directory&#xFF09;&#x4E5F;&#x662F;&#x4E00;&#x79CD;&#x6587;&#x4EF6;&#x3002;&#x6253;&#x5F00;&#x76EE;&#x5F55;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x5C31;&#x662F;&#x6253;&#x5F00;<code>&#x76EE;&#x5F55;&#x6587;&#x4EF6;</code>&#x3002;</p>
<p>&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#x7684;&#x7ED3;&#x6784;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF0C;&#x5C31;&#x662F;&#x4E00;&#x7CFB;&#x5217;<code>&#x76EE;&#x5F55;&#x9879;</code>&#xFF08;dirent&#xFF09;&#x7684;&#x5217;&#x8868;&#x3002;<strong>&#x76EE;&#x5F55;&#x9879;&#x662F;&#x4E00;&#x4E2A;&#x4E8C;&#x5143;&#x7EC4;<code>&lt;&#x6587;&#x4EF6;&#x540D;, inode&#x53F7;&#x7801;&gt;</code></strong>&#x3002;</p>
<p><code>ls &lt;path&gt;</code>&#x547D;&#x4EE4;&#x53EA;&#x5217;&#x51FA;&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x540D;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test ls exp_dir</div><div class="line">example_1.txt  ex_dir_1</div></pre></td></tr></table></figure>
<p><code>ls -i &lt;path&gt;</code>&#x547D;&#x4EE4;&#x5217;&#x51FA;&#x6574;&#x4E2A;&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#xFF0C;&#x5373;&#x6587;&#x4EF6;&#x540D;&#x548C;inode&#x53F7;&#x7801;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test ls -i exp_dir</div><div class="line">261780 example_1.txt  261781 ex_dir_1</div></pre></td></tr></table></figure>
<blockquote>
<p>&#x524D;&#x9762;<code>ls -i &lt;file&gt;</code>&#x7684;&#x65F6;&#x5019;&#x53EA;&#x9700;&#x8981;&#x67E5;&#x8BE2;&#x6587;&#x4EF6;&#x540D;&#x5230;inode&#x7684;map&#xFF1B;&#x800C;&#x6B64;&#x5904;<code>ls -i &lt;dir&gt;</code>&#x5219;&#x591A;&#x4E00;&#x6B21;&#x8BFB;&#x53D6;&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#x7684;&#x5F00;&#x9500;&#x3002;</p>
</blockquote>
<p>&#x5982;&#x679C;&#x8981;&#x67E5;&#x770B;&#x6587;&#x4EF6;&#x7684;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF0C;&#x5C31;&#x5FC5;&#x987B;&#x6839;&#x636E;inode&#x53F7;&#x7801;&#xFF0C;&#x8BFB;&#x53D6;inode&#x5185;&#x5BB9;&#xFF08;&#x78C1;&#x76D8;&#xFF09;&#x3002;<code>ls -l &lt;path&gt;</code>&#x547D;&#x4EE4;&#x5217;&#x51FA;&#x6587;&#x4EF6;&#x7684;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test ls <span class="_">-l</span> exp_dir</div><div class="line">&#x603B;&#x7528;&#x91CF; 12</div><div class="line">-rw-rw-r--. 1 msh msh 4847 3&#x6708;   9 23:15 example_1.txt</div><div class="line">drwxrwxr-x. 2 msh msh 4096 3&#x6708;   9 23:16 ex_dir_1</div></pre></td></tr></table></figure>
<p>&#x7406;&#x89E3;&#x4E86;&#x4E0A;&#x9762;&#x8FD9;&#x4E9B;&#x77E5;&#x8BC6;&#xFF0C;&#x5C31;&#x80FD;&#x7406;&#x89E3;&#x76EE;&#x5F55;&#x7684;&#x6743;&#x9650;&#xFF1A;</p>
<ul>
<li>&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#x7684;&#x8BFB;&#x6743;&#x9650;&#xFF08;r&#xFF09;&#x548C;&#x5199;&#x6743;&#x9650;&#xFF08;w&#xFF09;&#x9488;&#x5BF9;&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#x672C;&#x8EAB;</li>
<li>&#x7531;&#x4E8E;&#x76EE;&#x5F55;&#x6587;&#x4EF6;&#x5185;&#x53EA;&#x6709;&#x6587;&#x4EF6;&#x540D;&#x548C;inode&#x53F7;&#x7801;&#xFF0C;<strong>&#x5982;&#x679C;&#x60F3;&#x8BFB;&#x53D6;&#x76EE;&#x5F55;&#x9879;&#x7684;inode&#x5185;&#x5BB9;&#xFF0C;Linux&#x89C4;&#x5B9A;&#x9700;&#x8981;&#x7528;&#x6237;&#x62E5;&#x6709;&#x76EE;&#x5F55;&#x7684;&#x53EF;&#x6267;&#x884C;&#x6743;&#x9650;&#xFF08;x&#xFF09;</strong>&#x3002;</li>
</ul>
<h1 id="&#x786C;&#x94FE;-amp-&#x8F6F;&#x94FE;"><a href="#&#x786C;&#x94FE;-amp-&#x8F6F;&#x94FE;" class="headerlink" title="&#x786C;&#x94FE; &amp; &#x8F6F;&#x94FE;"></a>&#x786C;&#x94FE; &amp; &#x8F6F;&#x94FE;</h1><h2 id="&#x786C;&#x94FE;&#x63A5;"><a href="#&#x786C;&#x94FE;&#x63A5;" class="headerlink" title="&#x786C;&#x94FE;&#x63A5;"></a>&#x786C;&#x94FE;&#x63A5;</h2><p>&#x4E00;&#x822C;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6587;&#x4EF6;&#x540D;&#x548C;inode&#x53F7;&#x7801;&#x662F;&#x201D;&#x4E00;&#x4E00;&#x5BF9;&#x5E94;&#x201D;&#x7684;&#x3002;&#x4F46;&#x662F;&#xFF0C;Linux&#x7CFB;&#x7EDF;&#x5141;&#x8BB8;<strong>&#x591A;&#x4E2A;&#x6587;&#x4EF6;&#x540D;&#x6307;&#x5411;&#x540C;&#x4E00;&#x4E2A;inode&#x53F7;&#x7801;</strong>&#xFF0C;&#x4E5F;&#x5C31;&#x662F;<code>&#x786C;&#x94FE;&#x63A5;</code>&#xFF08;hard link&#xFF09;&#x3002;</p>
<p>&#x4E00;&#x65E6;&#x5EFA;&#x7ACB;&#x786C;&#x94FE;&#xFF0C;&#x5C31;&#x4E0D;&#x518D;&#x533A;&#x5206;&#x5219;&#x6E90;&#x6587;&#x4EF6;&#x4E0E;&#x786C;&#x94FE;&#x6587;&#x4EF6;&#x7684;&#x6982;&#x5FF5;&#xFF0C;&#x4E8C;&#x8005;&#x662F;&#x6307;&#x5411;&#x76F8;&#x540C;inode&#x7684;&#x201C;&#x5E73;&#x7B49;&#x7684;&#x4E24;&#x4E2A;&#x6587;&#x4EF6;&#x201D;&#xFF08;&#x5982;&#x679C;&#x4EE5;&#x6587;&#x4EF6;&#x540D;&#x533A;&#x5206;&#xFF09;&#x3002;&#x7531;&#x4E8E;&#x6307;&#x5411;&#x76F8;&#x540C;&#x7684;inode&#xFF0C;&#x786C;&#x94FE;&#x63A5;&#x7684;&#x884C;&#x4E3A;&#x5C31;&#x5F88;&#x597D;&#x7406;&#x89E3;&#x4E86;&#xFF1A;</p>
<ul>
<li>&#x5982;&#x679C;&#x4FEE;&#x6539;&#x6587;&#x4EF6;&#x5185;&#x5BB9;&#xFF0C;&#x5219;&#x901A;&#x8FC7;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x540D;&#x8BBF;&#x95EE;&#x7684;&#x5185;&#x5BB9;&#x4E5F;&#x968F;&#x4E4B;&#x4FEE;&#x6539;&#x3002;</li>
<li>&#x5982;&#x679C;&#x5220;&#x9664;&#x6587;&#x4EF6;&#xFF0C;&#x5219;&#x7CFB;&#x7EDF;&#x68C0;&#x67E5;&#x662F;&#x5426;&#x8FD8;&#x6709;&#x5176;&#x4ED6;&#x6587;&#x4EF6;&#x540D;&#x6307;&#x5411;inode&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#xFF0C;&#x5219;&#x5220;&#x9664;inode&#x4E0E;block&#xFF1B;&#x5426;&#x5219;&#xFF0C;&#x4EC5;&#x5220;&#x9664;&#x5F53;&#x524D;&#x6587;&#x4EF6;&#x540D;&#x5230;inode&#x7684;&#x6620;&#x5C04;&#x3002;</li>
</ul>
<p>&#x4F7F;&#x7528;<code>ln &lt;src&gt; &lt;hard_link&gt;</code>&#x547D;&#x4EE4;&#x521B;&#x5EFA;&#x786C;&#x94FE;&#x63A5;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test ln example.txt example_2.txt</div><div class="line">&#x279C;  fs_test ls -li</div><div class="line">&#x603B;&#x7528;&#x91CF; 20</div><div class="line">261774 -rw-rw-r--. 2 msh msh 4847 3&#x6708;   9 22:55 example_2.txt</div><div class="line">261774 -rw-rw-r--. 2 msh msh 4847 3&#x6708;   9 22:55 example.txt</div><div class="line">261779 drwxrwxr-x. 3 msh msh 4096 3&#x6708;   9 23:16 exp_dir</div></pre></td></tr></table></figure>
<p>&#x7B2C;&#x4E00;&#x5217;&#x662F;inode&#x53F7;&#xFF0C;&#x7B2C;3&#x5217;&#x662F;&#x6307;&#x5411;&#x8BE5;inode&#x7684;&#x6587;&#x4EF6;&#x540D;&#x7684;&#x6570;&#x91CF;&#xFF0C;&#x5373;<code>&#x94FE;&#x63A5;&#x6570;</code>&#x3002;&#x53EF;&#x89C1;&#xFF0C;<code>example.txt</code>&#x3001;<code>example_2.txt</code>&#x7684;inode&#x53F7;&#x90FD;&#x4E3A;261774&#xFF1B;&#x516C;&#x6709;2&#x4E2A;&#x6587;&#x4EF6;&#x540D;&#x6307;&#x5411;inode 261774&#x3002;</p>
<p>&#x987A;&#x4FBF;&#x8BF4;&#x4E00;&#x4E0B;&#xFF0C;<strong>&#x201C;<code>.</code>&#x201C;&#x548C;&#x201D;<code>..</code>&#x201C;&#x4E5F;&#x662F;&#x76EE;&#x5F55;&#xFF0C;&#x901A;&#x8FC7;&#x786C;&#x94FE;&#x5206;&#x522B;&#x6307;&#x5411;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x548C;&#x7236;&#x76EE;&#x5F55;</strong>&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x6240;&#x6709;&#x76EE;&#x5F55;&#x7684;&#x94FE;&#x63A5;&#x6570;&#x5FC5;&#x7136;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;2&#xFF0C;&#x5373;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x548C;&#x201D;.&#x201D;&#x76EE;&#x5F55;&#x3002;&#x5982;&#x4E0A;&#xFF0C;<code>exp_dir</code>&#x76EE;&#x5F55;&#x7684;&#x94FE;&#x63A5;&#x6570;&#x4E3A;3&#x3002;</p>
<h2 id="&#x8F6F;&#x94FE;&#x63A5;"><a href="#&#x8F6F;&#x94FE;&#x63A5;" class="headerlink" title="&#x8F6F;&#x94FE;&#x63A5;"></a>&#x8F6F;&#x94FE;&#x63A5;</h2><p>&#x786C;&#x94FE;&#x4F7F;&#x7528;&#x8D77;&#x6765;&#x4E0D;&#x662F;&#x90A3;&#x4E48;&#x65B9;&#x4FBF;&#xFF0C;&#x7BA1;&#x7406;&#x8D77;&#x6765;&#x4E5F;&#x6BD4;&#x8F83;&#x9EBB;&#x70E6;&#x3002;&#x4E8E;&#x662F;&#x4F7F;&#x7528;&#x53E6;&#x4E00;&#x79CD;&#x66F4;&#x7B80;&#x5355;&#x7684;&#x65B9;&#x5F0F;&#x5B9E;&#x73B0;&#x4E86;<code>&#x8F6F;&#x94FE;</code>&#xFF08;soft link&#xFF0C;&#x6216;&#x79F0;&#x7B26;&#x53F7;&#x94FE;&#x63A5;symbolic link&#xFF09;&#xFF1A;<strong>&#x5982;&#x679C;&#x6587;&#x4EF6;A&#x8F6F;&#x94FE;&#x6307;&#x5411;&#x6587;&#x4EF6;B&#xFF0C;&#x5219;&#x6807;&#x8BB0;&#x6587;&#x4EF6;A&#x4E3A;&#x8F6F;&#x94FE;&#x6587;&#x4EF6;&#xFF0C;&#x5E76;&#x5728;&#x6587;&#x4EF6;A&#x4E2D;&#x8BB0;&#x5F55;&#x6587;&#x4EF6;B&#x7684;&#x8DEF;&#x5F84;</strong>&#x3002;</p>
<p>&#x6B64;&#x65F6;&#xFF0C;&#x6587;&#x4EF6;A&#x4E0E;&#x6587;&#x4EF6;B&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684;inode&#x3002;&#x90A3;&#x4E48;&#xFF0C;&#x5982;&#x4F55;&#x901A;&#x8FC7;&#x6587;&#x4EF6;A&#x8BBF;&#x95EE;&#x5230;&#x6587;&#x4EF6;B&#x7684;&#x5185;&#x5BB9;&#x5462;&#xFF1F;<em>&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4F1A;&#x5728;&#x6211;&#x4EEC;&#x8BBF;&#x95EE;&#x6587;&#x4EF6;A&#x65F6;&#xFF0C;&#x53D1;&#x73B0;&#x6587;&#x4EF6;A&#x662F;&#x8F6F;&#x94FE;&#x6587;&#x4EF6;&#xFF0C;&#x5219;&#x81EA;&#x52A8;&#x5C06;&#x8BBF;&#x95EE;&#x8005;&#x5BFC;&#x5411;&#x6587;&#x4EF6;B</em>&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x65E0;&#x8BBA;&#x6253;&#x5F00;&#x54EA;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x6700;&#x7EC8;&#x8BFB;&#x53D6;&#x7684;&#x90FD;&#x662F;&#x6587;&#x4EF6;B&#x3002;</p>
<p>&#x5BF9;&#x4E8E;&#x8BFB;&#x3001;&#x4FEE;&#x6539;&#x64CD;&#x4F5C;&#xFF0C;&#x786C;&#x94FE;&#x63A5;&#x4E0E;&#x8F6F;&#x8FDE;&#x63A5;&#x5B9E;&#x73B0;&#x7684;&#x6548;&#x679C;&#x76F8;&#x540C;&#x3002;&#x4F46;&#x5220;&#x9664;&#xFF08;&#x5305;&#x62EC;rename&#xFF09;&#x64CD;&#x4F5C;&#x4E0A;&#x7684;&#x8868;&#x73B0;&#x4E0D;&#x540C;&#xFF1A;</p>
<ul>
<li>&#x5982;&#x679C;&#x5220;&#x9664;&#x6587;&#x4EF6;A&#xFF0C;&#x5219;&#x6587;&#x4EF6;B&#x65E0;&#x5F71;&#x54CD;&#x3002;</li>
<li>&#x5982;&#x679C;&#x5220;&#x9664;&#x6587;&#x4EF6;B&#xFF0C;&#x5219;&#x6587;&#x4EF6;A&#x4F9D;&#x7136;&#x5B58;&#x5728;&#xFF0C;&#x4F46;&#x8BBF;&#x95EE;&#x6587;&#x4EF6;A&#x65F6;&#x4F1A;&#x62A5;&#x9519;&#x201D;&#x6CA1;&#x6709;&#x90A3;&#x4E2A;&#x6587;&#x4EF6;&#x6216;&#x76EE;&#x5F55;&#x201D;&#x3002;</li>
</ul>
<p>&#x4F7F;&#x7528;<code>ln -s &lt;src&gt; &lt;soft_link&gt;</code>&#x547D;&#x4EE4;&#x521B;&#x5EFA;&#x8F6F;&#x94FE;&#x63A5;&#xFF1A;</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">&#x279C;  fs_test ln <span class="_">-s</span> example.txt example_3.txt</div><div class="line">&#x279C;  fs_test ls -li</div><div class="line">&#x603B;&#x7528;&#x91CF; 20</div><div class="line">261774 -rw-rw-r--. 2 msh msh 4847 3&#x6708;   9 22:55 example_2.txt</div><div class="line">261782 lrwxrwxrwx. 1 msh msh   11 3&#x6708;  10 00:05 example_3.txt -&gt; example.txt</div><div class="line">261774 -rw-rw-r--. 2 msh msh 4847 3&#x6708;   9 22:55 example.txt</div><div class="line">261779 drwxrwxr-x. 3 msh msh 4096 3&#x6708;   9 23:16 exp_dir</div></pre></td></tr></table></figure>
<p>&#x53EF;&#x89C1;&#xFF0C; <code>example_3.txt</code>&#x662F;&#x8F6F;&#x94FE;&#x63A5;&#x6587;&#x4EF6;&#xFF0C;&#x6307;&#x5411;<code>example.txt</code>&#xFF0C;&#x4E8C;&#x8005;&#x7684;inode&#x53F7;&#x7801;&#x4E0D;&#x540C;&#xFF0C;&#x94FE;&#x63A5;&#x6570;&#x4E5F;&#x6CA1;&#x6709;&#x5173;&#x7CFB;&#x3002;</p>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="http://www.ruanyifeng.com/blog/2011/12/inode.html" target="_blank" rel="external">&#x7406;&#x89E3;inode</a></li>
<li><a href="http://blog.csdn.net/zollty/article/details/7001950" target="_blank" rel="external">&#x786C;&#x76D8;&#x7C7B;&#x578B;&#x548C;Linux&#x5206;&#x533A;</a></li>
<li><a href="http://blog.csdn.net/lidan3959/article/details/16981137" target="_blank" rel="external">linux&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x2014;inode&#x53CA;&#x76F8;&#x5173;&#x6982;&#x5FF5; inode&#x5927;&#x5C0F;&#x7684;&#x6700;&#x4F73;&#x8BBE;&#x7F6E;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;code&gt;inode&lt;/code&gt;&amp;#x4E0E;&lt;code&gt;block&lt;/code&gt;&amp;#x662F;&amp;#x7406;&amp;#x89E3;Linux&amp;#x6587;&amp;#x4EF6;&amp;#x7CFB;&amp;#x7EDF;&amp;#x7684;&amp;#x57FA;&amp;#x7840;&amp;#x6982;&amp;#x5FF5;&amp;#x3002;&amp;#x5728;&amp;#x6B64;&amp;#x57FA;&amp;#x7840;&amp;#x4E0A;&amp;#x5B9E;&amp;#x73B0;&amp;#x4E86;&lt;code&gt;&amp;#x6587;&amp;#x4EF6;&lt;/code&gt;&amp;#x3001;&lt;code&gt;&amp;#x76EE;&amp;#x5F55;&lt;/code&gt;&amp;#x3001;&lt;code&gt;&amp;#x786C;&amp;#x94FE;&lt;/code&gt;&amp;#x3001;&lt;code&gt;&amp;#x8F6F;&amp;#x94FE;&lt;/code&gt;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Linux" scheme="https://monkeysayhi.github.io/tags/Linux/"/>
    
  </entry>
  
  <entry>
    <title>分布式理论：CAP、BASE与ACID</title>
    <link href="https://monkeysayhi.github.io/2018/03/09/%E5%88%86%E5%B8%83%E5%BC%8F%E7%90%86%E8%AE%BA%EF%BC%9ACAP%E3%80%81BASE%E4%B8%8EACID/"/>
    <id>https://monkeysayhi.github.io/2018/03/09/分布式理论：CAP、BASE与ACID/</id>
    <published>2018-03-09T12:24:32.000Z</published>
    <updated>2018-03-09T12:24:32.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x4ECB;&#x7ECD;&#x51E0;&#x4E2A;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x57FA;&#x672C;&#x7406;&#x8BBA;&#x3002;</p>
<a id="more"></a>
<h1 id="CAP&#x5B9A;&#x7406;"><a href="#CAP&#x5B9A;&#x7406;" class="headerlink" title="CAP&#x5B9A;&#x7406;"></a>CAP&#x5B9A;&#x7406;</h1><p>CAP&#x5B9A;&#x7406;&#xFF1A;&#x4E00;&#x4E2A;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x6700;&#x591A;&#x53EA;&#x80FD;&#x540C;&#x65F6;&#x6EE1;&#x8DB3;&#x4E00;&#x81F4;&#x6027;&#xFF08;Consistence&#xFF09;&#x3001;&#x53EF;&#x7528;&#x6027;&#xFF08;Availability&#xFF09;&#x548C;&#x5206;&#x533A;&#x5BB9;&#x9519;&#x6027;&#xFF08;Partition tolerance&#xFF09;&#x8FD9;&#x4E09;&#x9879;&#x4E2D;&#x7684;&#x4E24;&#x9879;&#x3002;</p>
<ul>
<li>&#x4E00;&#x81F4;&#x6027;&#xFF1A;&#x6240;&#x6709;&#x8282;&#x70B9;&#x5728;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x7684;&#x770B;&#x5230;&#x7684;&#x6570;&#x636E;&#x76F8;&#x540C;&#x3002;</li>
<li>&#x53EF;&#x7528;&#x6027;&#xFF1A;&#x8BFB;&#x3001;&#x5199;&#x6C38;&#x8FDC;&#x90FD;&#x80FD;&#x6210;&#x529F;&#xFF0C;&#x5373;&#xFF0C;&#x670D;&#x52A1;&#x4E00;&#x76F4;&#x53EF;&#x7528;&#x3002;</li>
<li>&#x5206;&#x533A;&#x5BB9;&#x9519;&#x6027;&#xFF1A;&#x5373;&#x4F7F;&#x7CFB;&#x7EDF;&#x7684;&#x67D0;&#x4E2A;&#x5206;&#x533A;&#x9047;&#x5230;&#x4E25;&#x91CD;&#x7684;&#x6545;&#x969C;&#xFF0C;&#x7CFB;&#x7EDF;&#x80FD;&#x7EE7;&#x7EED;&#x63D0;&#x4F9B;&#x670D;&#x52A1;&#x3002;</li>
</ul>
<h1 id="CAP&#x4E2D;&#x7684;&#x6743;&#x8861;"><a href="#CAP&#x4E2D;&#x7684;&#x6743;&#x8861;" class="headerlink" title="CAP&#x4E2D;&#x7684;&#x6743;&#x8861;"></a>CAP&#x4E2D;&#x7684;&#x6743;&#x8861;</h1><p>&#x6839;&#x636E;CAP&#x5B9A;&#x7406;&#xFF0C;&#x6211;&#x4EEC;&#x65E0;&#x6CD5;&#x540C;&#x65F6;&#x6EE1;&#x8DB3;&#x4E00;&#x81F4;&#x6027;&#x3001;&#x53EF;&#x7528;&#x6027;&#x3001;&#x5206;&#x533A;&#x5BB9;&#x9519;&#x6027;&#x8FD9;&#x4E09;&#x4E2A;&#x7279;&#x6027;&#x3002;&#x90A3;&#x4E48;&#xFF0C;&#x8981;&#x820D;&#x5F03;&#x54EA;&#x4E2A;&#x5462;&#xFF1F;</p>
<p>&#x5BF9;&#x4E8E;&#x591A;&#x6570;&#x5927;&#x578B;&#x4E92;&#x8054;&#x7F51;&#x5E94;&#x7528;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x4E3B;&#x673A;&#x4F17;&#x591A;&#x3001;&#x90E8;&#x7F72;&#x5206;&#x6563;&#xFF0C;&#x8282;&#x70B9;&#x6545;&#x969C;&#x3001;&#x7F51;&#x7EDC;&#x6545;&#x969C;&#x662F;&#x5E38;&#x6001;&#xFF0C;&#x5FC5;&#x987B;&#x4FDD;&#x8BC1;P&#xFF1B;&#x5E94;&#x7528;&#x7684;&#x76EE;&#x7684;&#x662F;&#x63D0;&#x4F9B;&#x670D;&#x52A1;&#xFF0C;&#x56E0;&#x6B64;&#x901A;&#x5E38;&#x4E5F;&#x8981;&#x4FDD;&#x8BC1;A&#x3002;&#x65E2;&#x7136;&#x8981;&#x4FDD;&#x8BC1;P&#x548C;A&#xFF0C;&#x5C31;&#x53EA;&#x80FD;&#x4E0D;&#x540C;&#x7A0B;&#x5EA6;&#x7684;&#x820D;&#x5F03;C&#xFF0C;&#x727A;&#x7272;&#x4E00;&#x4E9B;&#x7528;&#x6237;&#x4F53;&#x9A8C;&#x3002;&#x4E25;&#x683C;&#x6765;&#x8BB2;&#xFF0C;&#x90E8;&#x5206;&#x5E94;&#x7528;&#x7684;A&#x4E5F;&#x4E0D;&#x5FC5;&#x4FDD;&#x8BC1;100%&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x4E3B;&#x6D41;&#x505A;&#x6CD5;&#x662F;&#x9996;&#x8981;&#x4FDD;&#x969C;P&#x3001;&#x5728;A&#x548C;C&#x4E4B;&#x95F4;&#x53D6;&#x820D;&#x3001;&#x91CD;A&#x8F7B;C&#x3002;</p>
<p>&#x4F46;&#x662F;&#xFF0C;&#x5BF9;&#x4E8E;&#x91D1;&#x878D;&#x670D;&#x52A1;&#xFF0C;&#x5FC5;&#x987B;&#x4FDD;&#x8BC1;C&#xFF1B;&#x5927;&#x89C4;&#x6A21;&#x91D1;&#x878D;&#x670D;&#x52A1;&#x51E0;&#x4E4E;&#x5FC5;&#x7136;&#x6D89;&#x53CA;&#x7F51;&#x7EDC;&#x5206;&#x533A;&#xFF0C;&#x6240;&#x4EE5;&#x4E5F;&#x8981;&#x4FDD;&#x8BC1;P&#xFF1B;&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;C&#x3001;P&#xFF0C;&#x53EA;&#x80FD;&#x727A;&#x7272;A&#xFF08;&#x505C;&#x6B62;&#x670D;&#x52A1;&#xFF09;&#x3002;&#x5BF9;&#x4E8E;&#x67D0;&#x4E9B;&#x7279;&#x6B8A;&#x7684;&#x91D1;&#x878D;&#x670D;&#x52A1;&#xFF0C;&#x9700;&#x8981;7*24&#x5C0F;&#x65F6;&#x63D0;&#x4F9B;&#x670D;&#x52A1;&#xFF0C;&#x5219;&#x6539;&#x4E3A;&#x727A;&#x7272;&#x90E8;&#x5206;P&#xFF08;&#x5982;&#x5355;&#x8282;&#x70B9;&#x4E3B;&#x4ECE;&#x5907;&#x4EFD;&#xFF0C;&#x6545;&#x969C;&#x5207;&#x6362;&#xFF09;&#xFF0C;&#x4FDD;&#x969C;C&#x3001;A&#x3002;</p>
<h1 id="BASE&#x5B9A;&#x7406;"><a href="#BASE&#x5B9A;&#x7406;" class="headerlink" title="BASE&#x5B9A;&#x7406;"></a>BASE&#x5B9A;&#x7406;</h1><p>BASE&#x5B9A;&#x7406;&#x662F;&#x5BF9;CAP&#x5B9A;&#x7406;&#x7684;&#x5EF6;&#x4F38;&#xFF1A;&#x5373;&#x4F7F;&#x65E0;&#x6CD5;&#x505A;&#x5230;&#x5F3A;&#x4E00;&#x81F4;&#x6027;&#xFF08;Strong Consistency&#xFF09;&#xFF0C;&#x4F46;&#x5E94;&#x7528;&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x9002;&#x5408;&#x7684;&#x65B9;&#x5F0F;&#x8FBE;&#x5230;&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x6027;&#xFF08;Eventual Consitency&#xFF09;&#x3002;CAP&#x4E2D;&#x63D0;&#x5230;&#x7684;&#x4E00;&#x81F4;&#x6027;&#x662F;&#x5F3A;&#x4E00;&#x81F4;&#x6027;&#xFF0C;&#x6240;&#x8C13;&#x201C;&#x727A;&#x7272;&#x4E00;&#x81F4;&#x6027;&#x201D;&#x6307;&#x727A;&#x7272;&#x5F3A;&#x4E00;&#x81F4;&#x6027;&#x4FDD;&#x8BC1;&#x5F31;&#x4E00;&#x81F4;&#x6027;&#x3002;</p>
<p>BASE&#x662F;&#x6307;&#x57FA;&#x672C;&#x53EF;&#x7528;&#xFF08;Basically Available&#xFF09;&#x3001;&#x8F6F;&#x72B6;&#x6001;&#xFF08; Soft State&#xFF09;&#x3001;&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x6027;&#xFF08; Eventual Consistency&#xFF09;&#x3002;</p>
<ul>
<li>&#x57FA;&#x672C;&#x53EF;&#x7528;&#xFF1A;&#x51FA;&#x73B0;&#x6545;&#x969C;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5141;&#x8BB8;&#x635F;&#x5931;&#x90E8;&#x5206;&#x53EF;&#x7528;&#x6027;&#xFF0C;&#x5373;&#xFF0C;&#x4FDD;&#x8BC1;&#x6838;&#x5FC3;&#x53EF;&#x7528;&#x3002;</li>
</ul>
<p>&#x5982;&#xFF0C;&#x7535;&#x5546;&#x5927;&#x4FC3;&#x65F6;&#xFF0C;&#x4E3A;&#x4E86;&#x5E94;&#x5BF9;&#x8BBF;&#x95EE;&#x91CF;&#x6FC0;&#x589E;&#xFF0C;&#x90E8;&#x5206;&#x7528;&#x6237;&#x53EF;&#x80FD;&#x4F1A;&#x88AB;&#x5F15;&#x5BFC;&#x5230;&#x964D;&#x7EA7;&#x9875;&#x9762;&#xFF0C;&#x670D;&#x52A1;&#x5C42;&#x4E5F;&#x53EF;&#x80FD;&#x53EA;&#x63D0;&#x4F9B;&#x964D;&#x7EA7;&#x670D;&#x52A1;</p>
<ul>
<li>&#x8F6F;&#x72B6;&#x6001;&#xFF1A;&#x5141;&#x8BB8;&#x7CFB;&#x7EDF;&#x5B58;&#x5728;&#x4E2D;&#x95F4;&#x72B6;&#x6001;&#xFF0C;&#x800C;&#x8BE5;&#x4E2D;&#x95F4;&#x72B6;&#x6001;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD;&#x7CFB;&#x7EDF;&#x6574;&#x4F53;&#x53EF;&#x7528;&#x6027;&#x3002;</li>
</ul>
<p>&#x8F6F;&#x72B6;&#x6001;&#x672C;&#x8D28;&#x4E0A;&#x662F;&#x4E00;&#x79CD;&#x5F31;&#x4E00;&#x81F4;&#x6027;&#xFF0C;&#x5141;&#x8BB8;&#x7684;&#x8F6F;&#x72B6;&#x6001;&#x4E0D;&#x80FD;&#x8FDD;&#x80CC;&#x201C;&#x57FA;&#x672C;&#x53EF;&#x7528;&#x201D;&#x7684;&#x8981;&#x6C42;&#x3002;&#x5982;&#xFF0C;&#x5206;&#x5E03;&#x5F0F;&#x5B58;&#x50A8;&#x4E2D;&#x4E00;&#x822C;&#x4E00;&#x4EFD;&#x6570;&#x636E;&#x81F3;&#x5C11;&#x4F1A;&#x6709;&#x4E09;&#x4E2A;&#x526F;&#x672C;&#xFF0C;&#x5141;&#x8BB8;&#x4E0D;&#x540C;&#x8282;&#x70B9;&#x95F4;&#x526F;&#x672C;&#x540C;&#x6B65;&#x7684;&#x5EF6;&#x65F6;&#xFF08;&#x67D0;&#x4E9B;&#x65F6;&#x523B;&#x526F;&#x672C;&#x6570;&#x4F4E;&#x4E8E;3&#xFF09;&#x3002;</p>
<ul>
<li>&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x6027;&#xFF1A;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x6570;&#x636E;&#x526F;&#x672C;&#x7ECF;&#x8FC7;&#x4E00;&#x5B9A;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x6700;&#x7EC8;&#x80FD;&#x591F;&#x8FBE;&#x5230;&#x4E00;&#x81F4;&#x7684;&#x72B6;&#x6001;&#x3002;</li>
</ul>
<p>&#x8F6F;&#x72B6;&#x6001;&#x7684;&#x7EC8;&#x6781;&#x76EE;&#x6807;&#x662F;&#x6700;&#x7EC8;&#x4E00;&#x81F4;&#x6027;&#x3002;&#x5982;&#xFF0C;&#x5206;&#x5E03;&#x5F0F;&#x5B58;&#x50A8;&#x7684;&#x526F;&#x672C;&#x6570;&#x6700;&#x7EC8;&#x4F1A;&#x8FBE;&#x5230;&#x7A33;&#x5B9A;&#x72B6;&#x6001;&#x3002;</p>
<h1 id="ACID&#x548C;BASE&#x7684;&#x533A;&#x522B;&#x4E0E;&#x8054;&#x7CFB;"><a href="#ACID&#x548C;BASE&#x7684;&#x533A;&#x522B;&#x4E0E;&#x8054;&#x7CFB;" class="headerlink" title="ACID&#x548C;BASE&#x7684;&#x533A;&#x522B;&#x4E0E;&#x8054;&#x7CFB;"></a>ACID&#x548C;BASE&#x7684;&#x533A;&#x522B;&#x4E0E;&#x8054;&#x7CFB;</h1><p>ACID&#x662F;&#x4E8B;&#x52A1;&#x7684;&#x56DB;&#x4E2A;&#x57FA;&#x672C;&#x6027;&#x8D28;&#xFF0C;&#x5C5E;&#x4E8E;&#x4F20;&#x7EDF;&#x6570;&#x636E;&#x5E93;&#x5E38;&#x7528;&#x7684;&#x8BBE;&#x8BA1;&#x7406;&#x5FF5;&#xFF0C;&#x8FFD;&#x6C42;&#x5F3A;&#x4E00;&#x81F4;&#x6027;&#x6A21;&#x578B;&#xFF0C;&#x8BE6;&#x89C1;<a href="/2016/11/26/&#x4E8B;&#x52A1;&#x7684;ACID&#x548C;&#x56DB;&#x4E2A;&#x9694;&#x79BB;&#x7EA7;&#x522B;/">&#x4E8B;&#x52A1;&#x7684;ACID&#x548C;&#x56DB;&#x4E2A;&#x9694;&#x79BB;&#x7EA7;&#x522B;</a>&#x3002;BASE&#x652F;&#x6301;&#x7684;&#x662F;&#x5927;&#x578B;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#xFF0C;&#x63D0;&#x51FA;&#x901A;&#x8FC7;&#x727A;&#x7272;&#x5F3A;&#x4E00;&#x81F4;&#x6027;&#x83B7;&#x5F97;&#x9AD8;&#x53EF;&#x7528;&#x6027;&#xFF08;&#x4E0E;&#x5206;&#x533A;&#x5BB9;&#x9519;&#x6027;&#xFF09;&#x3002;</p>
<p>&#x5728;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x8BBE;&#x8BA1;&#x7684;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x901A;&#x5E38;&#x7CFB;&#x7EDF;&#x7EC4;&#x4EF6;&#x5BF9;&#x4E00;&#x81F4;&#x6027;&#x7684;&#x8981;&#x6C42;&#x4E0D;&#x540C;&#xFF0C;&#x5BF9;ACID&#x548C;BASE&#x7684;&#x53D6;&#x820D;&#x4E5F;&#x5C31;&#x4E0D;&#x540C;&#x3002;</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x4ECB;&amp;#x7ECD;&amp;#x51E0;&amp;#x4E2A;&amp;#x5206;&amp;#x5E03;&amp;#x5F0F;&amp;#x7CFB;&amp;#x7EDF;&amp;#x4E2D;&amp;#x7684;&amp;#x57FA;&amp;#x672C;&amp;#x7406;&amp;#x8BBA;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="分布式" scheme="https://monkeysayhi.github.io/tags/%E5%88%86%E5%B8%83%E5%BC%8F/"/>
    
  </entry>
  
  <entry>
    <title>浅谈TCP（2）：流量控制与拥塞控制</title>
    <link href="https://monkeysayhi.github.io/2018/03/07/%E6%B5%85%E8%B0%88TCP%EF%BC%882%EF%BC%89%EF%BC%9A%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E4%B8%8E%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6/"/>
    <id>https://monkeysayhi.github.io/2018/03/07/浅谈TCP（2）：流量控制与拥塞控制/</id>
    <published>2018-03-07T03:05:42.000Z</published>
    <updated>2018-10-17T03:51:59.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x4E0A;&#x6587;<a href="/2018/03/07/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/">&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;</a>&#x4ECB;&#x7ECD;&#x4E86;TCP&#x7684;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x3002;&#x672C;&#x6587;&#x4ECB;&#x7ECD;<code>&#x6D41;&#x91CF;&#x63A7;&#x5236;</code>&#xFF08;Flow Control&#xFF0C;&#x7B80;&#x79F0;&#x6D41;&#x63A7;&#xFF09;&#x4E0E;<code>&#x62E5;&#x585E;&#x63A7;&#x5236;</code>&#xFF08;Congestion Control&#xFF09;&#x3002;TCP&#x4F9D;&#x6B64;&#x4FDD;&#x969C;&#x7F51;&#x7EDC;&#x7684;<code>QOS</code>&#xFF08;Quality of Service&#xFF09;&#x3002;</p>
<blockquote>
<p>&#x672C;&#x6587;&#x5927;&#x90E8;&#x5206;&#x5185;&#x5BB9;&#x57FA;&#x4E8E;<a href="https://coolshell.cn/articles/11609.html" target="_blank" rel="external">TCP &#x7684;&#x90A3;&#x4E9B;&#x4E8B;&#x513F;&#xFF08;&#x4E0B;&#xFF09;</a>&#x4FEE;&#x6539;&#x800C;&#x6765;&#xFF0C;&#x90E8;&#x5206;&#x89C2;&#x70B9;&#x4E0E;&#x539F;&#x6587;&#x4E0D;&#x540C;&#xFF0C;&#x91CD;&#x8981;&#x5730;&#x65B9;&#x589E;&#x52A0;&#x4E86;&#x89E3;&#x91CA;&#x3002;</p>
</blockquote>
<a id="more"></a>
<h1 id="TCP&#x7684;&#x6D41;&#x91CF;&#x63A7;&#x5236;"><a href="#TCP&#x7684;&#x6D41;&#x91CF;&#x63A7;&#x5236;" class="headerlink" title="TCP&#x7684;&#x6D41;&#x91CF;&#x63A7;&#x5236;"></a>TCP&#x7684;&#x6D41;&#x91CF;&#x63A7;&#x5236;</h1><h2 id="RTT&#x7B97;&#x6CD5;"><a href="#RTT&#x7B97;&#x6CD5;" class="headerlink" title="RTT&#x7B97;&#x6CD5;"></a>RTT&#x7B97;&#x6CD5;</h2><p>&#x6839;&#x636E;&#x524D;&#x6587;&#x5BF9;TCP&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x7684;&#x4ECB;&#x7ECD;&#xFF0C;&#x6211;&#x4EEC;&#x77E5;&#x9053;Timeout&#x7684;&#x8BBE;&#x7F6E;&#x5BF9;&#x4E8E;&#x91CD;&#x4F20;&#x975E;&#x5E38;&#x91CD;&#x8981;&#xFF1A;</p>
<ul>
<li>&#x8BBE;&#x957F;&#x4E86;&#xFF0C;&#x91CD;&#x53D1;&#x5C31;&#x6162;&#xFF0C;&#x4E22;&#x4E86;&#x8001;&#x534A;&#x5929;&#x624D;&#x91CD;&#x53D1;&#xFF0C;&#x6CA1;&#x6709;&#x6548;&#x7387;&#xFF0C;&#x6027;&#x80FD;&#x5DEE;&#x3002;</li>
<li>&#x8BBE;&#x77ED;&#x4E86;&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4;&#x53EF;&#x80FD;&#x5E76;&#x6CA1;&#x6709;&#x4E22;&#x5C31;&#x91CD;&#x53D1;&#x3002;&#x4E8E;&#x662F;&#x91CD;&#x53D1;&#x7684;&#x5C31;&#x5FEB;&#xFF0C;&#x4F1A;&#x589E;&#x52A0;&#x7F51;&#x7EDC;&#x62E5;&#x585E;&#xFF0C;&#x5BFC;&#x81F4;&#x66F4;&#x591A;&#x7684;&#x8D85;&#x65F6;&#xFF0C;&#x66F4;&#x591A;&#x7684;&#x8D85;&#x65F6;&#x5BFC;&#x81F4;&#x66F4;&#x591A;&#x7684;&#x91CD;&#x53D1;&#x3002;</li>
</ul>
<p>&#x800C;&#x4E14;&#xFF0C;&#x8FD9;&#x4E2A;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x7F51;&#x7EDC;&#x73AF;&#x5883;&#x4E0B;&#x4E0D;&#x540C;&#xFF0C;&#x5FC5;&#x987B;&#x52A8;&#x6001;&#x8BBE;&#x7F6E;&#x3002;&#x4E3A;&#x6B64;&#xFF0C;TCP&#x5F15;&#x5165;&#x4E86;<code>RTT</code>&#xFF08;Round Trip Time&#xFF0C;&#x73AF;&#x56DE;&#x65F6;&#x95F4;&#xFF09;&#xFF1A;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5305;&#x4ECE;&#x53D1;&#x51FA;&#x53BB;&#x5230;&#x56DE;&#x6765;&#x7684;&#x65F6;&#x95F4;&#x3002;&#x8FD9;&#x6837;&#xFF0C;&#x53D1;&#x9001;&#x7AEF;&#x5C31;&#x5927;&#x7EA6;&#x77E5;&#x9053;&#x6B63;&#x5E38;&#x4F20;&#x8F93;&#x9700;&#x8981;&#x591A;&#x5C11;&#x65F6;&#x95F4;&#xFF0C;&#x636E;&#x6B64;&#x8BA1;&#x7B97;<code>RTO</code>&#xFF08;Retransmission TimeOut&#xFF0C;&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x65F6;&#x95F4;&#xFF09;&#x3002; &#x542C;&#x8D77;&#x6765;&#x4F3C;&#x4E4E;&#x5F88;&#x7B80;&#x5355;&#xFF1A;&#x5728;&#x53D1;&#x9001;&#x65B9;&#x53D1;&#x5305;&#x65F6;&#x8BB0;&#x4E0B;t0&#xFF0C;&#x6536;&#x5230;&#x63A5;&#x6536;&#x65B9;&#x7684;Ack&#x65F6;&#x8BB0;&#x4E00;&#x4E2A;t1&#xFF0C;&#x4E8E;&#x662F;RTT = t1 &#x2013; t0&#x3002;&#x7136;&#x800C;&#xFF0C;&#x8FD9;&#x53EA;&#x662F;&#x4E00;&#x4E2A;&#x91C7;&#x6837;&#xFF0C;&#x4E0D;&#x80FD;&#x4EE3;&#x8868;&#x7F51;&#x7EDC;&#x73AF;&#x5883;&#x7684;&#x666E;&#x904D;&#x60C5;&#x51B5;&#x3002;</p>
<h3 id="&#x7ECF;&#x5178;&#x7B97;&#x6CD5;"><a href="#&#x7ECF;&#x5178;&#x7B97;&#x6CD5;" class="headerlink" title="&#x7ECF;&#x5178;&#x7B97;&#x6CD5;"></a>&#x7ECF;&#x5178;&#x7B97;&#x6CD5;</h3><p>RFC793 &#x4E2D;&#x5B9A;&#x4E49;&#x4E86;&#x4E00;&#x4E2A;<code>&#x7ECF;&#x5178;&#x7B97;&#x6CD5;</code>&#xFF1A;</p>
<ol>
<li>&#x9996;&#x5148;&#xFF0C;&#x91C7;&#x6837;RTT&#xFF0C;&#x8BB0;&#x4E0B;&#x6700;&#x8FD1;&#x51E0;&#x6B21;&#x7684;RTT&#x503C;&#x3002;</li>
<li><p>&#x7136;&#x540E;&#xFF0C;&#x4F7F;&#x7528;<code>&#x52A0;&#x6743;&#x79FB;&#x52A8;&#x5E73;&#x5747;&#x7B97;&#x6CD5;</code>&#xFF08;Weighted Moving Average Method&#xFF09;&#x505A;&#x5E73;&#x6ED1;&#xFF0C;&#x8BA1;&#x7B97;<code>SRTT</code>&#xFF08;Smoothed RTT&#xFF09;&#xFF1A;</p>
 <figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">SRTT = ( &#x3B1; * SRTT ) + ((1- &#x3B1;) * RTT) (&#x901A;&#x5E38;&#x53D6;0.8&#x2264;&#x3B1;&#x2264;0.9&#xFF0C;&#x3B1;&#x8D8A;&#x5927;&#x6536;&#x655B;&#x901F;&#x5EA6;&#x8D8A;&#x5FEB;)</div></pre></td></tr></table></figure>
</li>
</ol>
<ol>
<li>&#x6700;&#x540E;&#xFF0C;&#x8BA1;&#x7B97;RTO&#xFF1A;<br>RTO = min [ UBOUND,  max [ LBOUND,   (&#x3B2; * SRTT) ]  ] (&#x901A;&#x5E38;&#x53D6;1.3&#x2264;&#x3B2;&#x2264;2.0)</li>
</ol>
<h3 id="Karn-Partridge-&#x7B97;&#x6CD5;"><a href="#Karn-Partridge-&#x7B97;&#x6CD5;" class="headerlink" title="Karn / Partridge &#x7B97;&#x6CD5;"></a>Karn / Partridge &#x7B97;&#x6CD5;</h3><p>&#x7ECF;&#x5178;&#x7B97;&#x6CD5;&#x63CF;&#x8FF0;&#x4E86;RTO&#x8BA1;&#x7B97;&#x7684;&#x57FA;&#x672C;&#x601D;&#x8DEF;&#xFF0C;&#x4F46;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x95EE;&#x9898;&#xFF1A;RTT&#x7684;&#x91C7;&#x6837;&#x53D6;&#x201C;<strong>&#x7B2C;&#x4E00;&#x6B21;</strong>&#x53D1;Seq+&#x6536;Ack&#x7684;&#x65F6;&#x95F4;&#x201D;&#xFF0C;&#x8FD8;&#x662F;&#x201C;<strong>&#x91CD;&#x4F20;</strong>Seq+&#x6536;Ack&#x7684;&#x65F6;&#x95F4;&#x201D;&#xFF1F;</p>
<p>&#x5982;&#x56FE;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;2&#xFF09;&#xFF1A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;/RTT-&#x7ECF;&#x5178;&#x7B97;&#x6CD5;&#x7684;&#x95EE;&#x9898;.jpg" alt="RTT-&#x7ECF;&#x5178;&#x7B97;&#x6CD5;&#x7684;&#x95EE;&#x9898;"></p>
<ul>
<li>&#x60C5;&#x51B5;&#xFF08;a&#xFF09;&#x4E2D;&#xFF0C;RTT&#x7684;&#x91C7;&#x6837;&#x53D6;&#x201C;&#x7B2C;&#x4E00;&#x6B21;&#x53D1;Seq+&#x6536;Ack&#x7684;&#x65F6;&#x95F4;&#x201D;&#x3002;&#x5047;&#x8BBE;&#x7B2C;&#x4E00;&#x6B21;&#x53D1;&#x7684;Seq&#x5F7B;&#x5E95;&#x4E22;&#x5305;&#x4E86;&#xFF0C;&#x5219;&#x91C7;&#x6837;&#x5230;&#x7684;&#x65F6;&#x95F4;<strong>&#x591A;&#x7B97;</strong>&#x4E86;&#x201C;&#x4ECE;&#x7B2C;&#x4E00;&#x6B21;&#x53D1;&#x5230;&#x91CD;&#x4F20;&#x7684;&#x95F4;&#x9694;&#x201D;&#x3002;</li>
<li>&#x60C5;&#x51B5;&#xFF08;b&#xFF09;&#x4E2D;&#xFF0C;RTT&#x7684;&#x91C7;&#x6837;&#x53D6;&#x201C;&#x91CD;&#x4F20;Seq+&#x6536;Ack&#x7684;&#x65F6;&#x95F4;&#x201D;&#x3002;&#x5047;&#x8BBE;&#x662F;Ack&#x4F20;&#x8F93;&#x7684;&#x6162;&#xFF0C;&#x5BFC;&#x81F4;&#x6070;&#x597D;&#x521A;&#x91CD;&#x4F20;&#x5C31;&#x6536;&#x5230;&#x4E86;&#x63A5;&#x6536;&#x65B9;&#x4E4B;&#x524D;&#x53D1;&#x51FA;&#x7684;Ack&#xFF0C;&#x5219;&#x91C7;&#x6837;&#x5230;&#x7684;&#x65F6;&#x95F4;<strong>&#x5C11;&#x7B97;</strong>&#x4E86;&#x201C;&#x4ECE;&#x7B2C;&#x4E00;&#x6B21;&#x53D1;&#x5230;&#x91CD;&#x4F20;&#x7684;&#x95F4;&#x9694;&#x201D;&#x3002;</li>
</ul>
<p>&#x95EE;&#x9898;&#x7684;&#x672C;&#x8D28;&#x662F;&#xFF1A;<strong>&#x53D1;&#x9001;&#x65B9;&#x65E0;&#x6CD5;&#x533A;&#x5206;&#x6536;&#x5230;&#x7684;Ack&#x5BF9;&#x5E94;&#x7B2C;&#x4E00;&#x6B21;&#x53D1;&#x7684;Seq&#x8FD8;&#x662F;&#x91CD;&#x4F20;&#x7684;Seq</strong>&#xFF08;&#x8FDB;&#x5165;&#x7F51;&#x7EDC;&#x5C31;&#x90FD;&#x4E00;&#x6837;&#x4E86;&#xFF09;&#x3002;&#x9488;&#x5BF9;&#x8BE5;&#x95EE;&#x9898;&#xFF0C;<code>Karn / Partridge</code>&#x7B97;&#x6CD5;&#x9009;&#x62E9;&#x56DE;&#x907F;&#x91CD;&#x4F20;&#x7684;&#x95EE;&#x9898;&#xFF1A;<em>&#x5FFD;&#x7565;&#x91CD;&#x4F20;&#x7684;&#x6837;&#x672C;&#xFF0C;RTT&#x7684;&#x91C7;&#x6837;&#x53EA;&#x53D6;&#x672A;&#x4EA7;&#x751F;&#x91CD;&#x4F20;&#x7684;&#x6837;&#x672C;</em>&#x3002;</p>
<p>&#x7B80;&#x5355;&#x7684;&#x5FFD;&#x7565;&#x91CD;&#x4F20;&#x6837;&#x672C;&#x4E5F;&#x6709;&#x95EE;&#x9898;&#xFF1A;&#x5047;&#x8BBE;&#x5F53;&#x524D;&#x7684;RTO&#x5F88;&#x5C0F;&#xFF0C;&#x7A81;&#x7136;&#x53D1;&#x751F;&#x7F51;&#x7EDC;&#x6296;&#x52A8;&#xFF0C;&#x5EF6;&#x65F6;&#x5267;&#x589E;&#x5BFC;&#x81F4;&#x8981;&#x91CD;&#x4F20;&#x6240;&#x6709;&#x7684;&#x5305;&#xFF1B;&#x7531;&#x4E8E;&#x5FFD;&#x7565;&#x91CD;&#x4F20;&#x6837;&#x672C;&#xFF0C;RTO&#x4E0D;&#x4F1A;&#x88AB;&#x66F4;&#x65B0;&#xFF0C;&#x4E8E;&#x662F;&#x7EE7;&#x7EED;&#x91CD;&#x4F20;&#x4F7F;&#x7F51;&#x7EDC;&#x66F4;&#x52A0;&#x62E5;&#x5835;&#xFF1B;&#x62E5;&#x5835;&#x5BFC;&#x81F4;&#x66F4;&#x591A;&#x7684;&#x91CD;&#x4F20;&#xFF0C;&#x6076;&#x6027;&#x5FAA;&#x73AF;&#x76F4;&#x81F3;&#x7F51;&#x7EDC;&#x762B;&#x75EA;&#x3002;Karn / Partridge&#x7B97;&#x6CD5;&#x7528;&#x4E86;&#x4E00;&#x4E2A;&#x53D6;&#x5DE7;&#x7684;&#x529E;&#x6CD5;&#xFF1A;<em>&#x53EA;&#x8981;&#x4E00;&#x53D1;&#x751F;&#x91CD;&#x4F20;&#xFF0C;&#x5C31;&#x5C06;&#x73B0;&#x6709;&#x7684;RTO&#x503C;&#x7FFB;&#x500D;&#xFF08;&#x6307;&#x6570;&#x56DE;&#x9000;&#x7B56;&#x7565;&#xFF09;&#xFF0C;&#x5F85;&#x7F51;&#x7EDC;&#x6062;&#x590D;&#x540E;&#x518D;&#x4EFF;&#x7167;&#x7ECF;&#x5178;&#x7B97;&#x6CD5;&#x9010;&#x6E10;&#x5E73;&#x6ED1;&#x4EE5;&#x964D;&#x4F4E;RTO</em>&#x3002;</p>
<p>&#x8BE5;&#x7B97;&#x6CD5;&#x5DF2;&#x7ECF;&#x505A;&#x5230;&#x53EF;&#x7528;&#xFF0C;&#x7136;&#x800C;&#x7F51;&#x7EDC;&#x6296;&#x52A8;&#x5BF9;&#x6027;&#x80FD;&#x7684;&#x5F71;&#x54CD;&#x6BD4;&#x8F83;&#x5927;&#x3002;</p>
<h3 id="Jacobson-Karels-&#x7B97;&#x6CD5;"><a href="#Jacobson-Karels-&#x7B97;&#x6CD5;" class="headerlink" title="Jacobson / Karels &#x7B97;&#x6CD5;"></a>Jacobson / Karels &#x7B97;&#x6CD5;</h3><p>&#x524D;&#x9762;&#x4E24;&#x79CD;&#x7B97;&#x6CD5;&#x5747;&#x4F7F;&#x7528;&#x52A0;&#x6743;&#x79FB;&#x52A8;&#x5E73;&#x5747;&#x7B97;&#x6CD5;&#x505A;&#x5E73;&#x6ED1;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x7684;&#x6700;&#x5927;&#x95EE;&#x9898;&#x662F;&#xFF1A;&#x5F88;&#x96BE;&#x53D1;&#x73B0;RTT&#x503C;&#x4E0A;&#x7684;&#x8F83;&#x5927;&#x6CE2;&#x52A8;&#xFF0C;&#x56E0;&#x4E3A;&#x88AB;&#x5E73;&#x6ED1;&#x6389;&#x4E86;&#xFF08;1 - a&#x6BD4;&#x8F83;&#x5C0F;&#xFF0C;&#x5373;&#x6700;&#x65B0;RTT&#x7684;&#x6743;&#x91CD;&#x5C0F;&#xFF09;&#x3002;&#x9488;&#x5BF9;&#x8BE5;&#x95EE;&#x9898;&#xFF0C;<code>Jacobson / Karels</code>&#x7B97;&#x6CD5;&#x5F15;&#x5165;&#x4E86;&#x6700;&#x65B0;&#x91C7;&#x6837;&#x7684;RTT&#x503C;&#x548C;&#x5E73;&#x6ED1;&#x8FC7;&#x7684;SRTT&#x503C;&#x7684;&#x5DEE;&#x8DDD;&#x505A;&#x56E0;&#x5B50;&#xFF0C;&#x5373;<code>DevRTT</code>&#xFF08;Deviation RTT&#xFF0C;RTT&#x7684;&#x504F;&#x79BB;&#x5EA6;&#xFF09;&#xFF0C;&#x540C;&#x65F6;&#x8003;&#x8651;SRTT&#x5E26;&#x6765;&#x7684;&#x60EF;&#x6027;&#x548C;DevRTT&#x5E26;&#x6765;&#x7684;&#x6CE2;&#x52A8;&#xFF1A;</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">SRTT = SRTT + &#x3B1;(RTT &#x2013; SRTT)  &#x2014;&#x2014; &#x8BA1;&#x7B97;SRTT</div><div class="line">DevRTT = (1-&#x3B2;)*DevRTT + &#x3B2;*(|RTT-SRTT|) &#x2014;&#x2014; &#x8BA1;&#x7B97;SRTT&#x548C;&#x6700;&#x65B0;RTT&#x7684;&#x5DEE;&#x8DDD;&#xFF08;&#x52A0;&#x6743;&#x79FB;&#x52A8;&#x5E73;&#x5747;&#xFF09;</div><div class="line">RTO= &#xB5; * SRTT + &#x2202; *DevRTT &#x2014;&#x2014; &#x540C;&#x65F6;&#x8003;&#x8651;SRTT&#xFF08;&#x60EF;&#x6027;&#xFF09;&#x4E0E;DevRTT&#xFF08;&#x6CE2;&#x52A8;&#xFF09;</div></pre></td></tr></table></figure>
<p>Linux 2.6&#x91C7;&#x7528;&#x8BE5;&#x7B97;&#x6CD5;&#x8BA1;&#x7B97;RTO&#xFF0C;&#x9ED8;&#x8BA4;&#x53D6;&#x3B1; = 0.125, &#x3B2; = 0.25, &#x3BC; = 1, &#x2202; = 4&#xFF08;&#x7384;&#x5B66;&#x8C03;&#x53C2;&#xFF0C;&#x4F60;&#x61C2;&#x7684;&#xFF09;&#x3002;</p>
<h2 id="TCP&#x6ED1;&#x52A8;&#x7A97;&#x53E3;"><a href="#TCP&#x6ED1;&#x52A8;&#x7A97;&#x53E3;" class="headerlink" title="TCP&#x6ED1;&#x52A8;&#x7A97;&#x53E3;"></a>TCP&#x6ED1;&#x52A8;&#x7A97;&#x53E3;</h2><p>TCP&#x4F7F;&#x7528;<code>&#x6ED1;&#x52A8;&#x7A97;&#x53E3;</code>&#xFF08;Sliding Window&#xFF09;&#x505A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;<code>&#x4E71;&#x5E8F;&#x91CD;&#x6392;</code>&#x3002;&#x4E71;&#x5E8F;&#x91CD;&#x6392;&#x5728;TCP&#x7684;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x4E2D;&#x5DF2;&#x7ECF;&#x4ECB;&#x7ECD;&#xFF0C;&#x4E0B;&#x9762;&#x4ECB;&#x7ECD;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x3002;</p>
<p>TCP&#x5934;&#x91CC;&#x6709;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;&#x53EB;Window&#xFF08;&#x6216;Advertised Window&#xFF09;&#xFF0C;<em>&#x7528;&#x4E8E;&#x63A5;&#x6536;&#x65B9;&#x901A;&#x77E5;&#x53D1;&#x9001;&#x65B9;&#x81EA;&#x5DF1;&#x8FD8;&#x6709;&#x591A;&#x5C11;&#x7F13;&#x51B2;&#x533A;&#x53EF;&#x4EE5;&#x63A5;&#x6536;&#x6570;&#x636E;</em>&#x3002;<strong>&#x53D1;&#x9001;&#x65B9;&#x6839;&#x636E;&#x63A5;&#x6536;&#x65B9;&#x7684;&#x5904;&#x7406;&#x80FD;&#x529B;&#x6765;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x4E0D;&#x4F1A;&#x5BFC;&#x81F4;&#x63A5;&#x6536;&#x65B9;&#x5904;&#x7406;&#x4E0D;&#x8FC7;&#x6765;&#xFF0C;&#x662F;&#x8C13;&#x6D41;&#x91CF;&#x63A7;&#x5236;</strong>&#x3002;&#x6682;&#x4E14;&#x628A;Advertised Window&#x5F53;&#x505A;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#xFF0C;&#x66F4;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#x5982;&#x4F55;&#x5B8C;&#x6210;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#xFF0C;&#x540E;&#x9762;&#x4ECB;&#x7ECD;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x65F6;&#x518D;&#x8BF4;&#x660E;&#x4E8C;&#x8005;&#x7684;&#x533A;&#x522B;&#x3002;</p>
<p>&#x89C2;&#x5BDF;TCP&#x534F;&#x8BAE;&#x7684;&#x53D1;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x548C;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;2&#xFF09;&#xFF1A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;/&#x53D1;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x548C;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;.jpg" alt="&#x53D1;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x548C;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;"></p>
<p>&#x5047;&#x8BBE;&#x4F4D;&#x7F6E;&#x5E8F;&#x53F7;&#x4ECE;&#x5DE6;&#x5411;&#x53F3;&#x589E;&#x957F;&#xFF08;&#x5E38;&#x89C1;&#x7684;&#x8BFB;&#x3001;&#x5199;&#x7F13;&#x51B2;&#x533A;&#x8BBE;&#x8BA1;&#xFF09;&#xFF0C;&#x89E3;&#x91CA;&#x4E00;&#x4E0B;&#xFF1A;</p>
<ul>
<li>&#x53D1;&#x9001;&#x65B9;&#xFF1A;LastByteAcked&#x6307;&#x5411;&#x6536;&#x5230;&#x7684;&#x8FDE;&#x7EED;&#x6700;&#x5927;Ack&#x7684;&#x4F4D;&#x7F6E;&#xFF1B;LastByteSent&#x6307;&#x5411;&#x5DF2;&#x53D1;&#x9001;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x4F4D;&#x7F6E;&#xFF1B;LastByteWritten&#x6307;&#x5411;&#x4E0A;&#x5C42;&#x5E94;&#x7528;&#x5DF2;&#x5199;&#x5B8C;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x4F4D;&#x7F6E;&#x3002;</li>
<li>&#x63A5;&#x6536;&#x65B9;&#xFF1A;LastByteRead&#x6307;&#x5411;&#x4E0A;&#x5C42;&#x5E94;&#x7528;&#x5DF2;&#x8BFB;&#x5B8C;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x4F4D;&#x7F6E;&#xFF1B;NextByteExpected&#x6307;&#x5411;&#x6536;&#x5230;&#x7684;&#x8FDE;&#x7EED;&#x6700;&#x5927;Seq&#x7684;&#x4F4D;&#x7F6E;&#xFF1B;LastByteRcvd&#x6307;&#x5411;&#x5DF2;&#x6536;&#x5230;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x4F4D;&#x7F6E;&#x3002;&#x53EF;&#x4EE5;&#x770B;&#x5230;<strong>NextByteExpected&#x4E0E;LastByteRcvd&#x4E2D;&#x95F4;&#x6709;&#x4E9B;Seq&#x8FD8;&#x6CA1;&#x6709;&#x5230;&#x8FBE;</strong>&#xFF0C;&#x5BF9;&#x5E94;&#x7A7A;&#x767D;&#x533A;&#x3002;</li>
</ul>
<p>&#x636E;&#x6B64;&#x5728;&#x63A5;&#x6536;&#x65B9;&#x8BA1;&#x7B97;<code>AdvertisedWindow</code>&#xFF0C;&#x5728;&#x53D1;&#x9001;&#x65B9;&#x8BA1;&#x7B97;<code>EffectiveWindow</code>&#xFF1A;</p>
<ul>
<li>&#x63A5;&#x6536;&#x65B9;&#x5728;Ack&#x4E2D;&#x8BB0;&#x5F55;&#x81EA;&#x5DF1;&#x7684;<code>AdvertisedWindow = MaxRcvBuffer &#x2013; (LastByteRcvd - LastByteRead)</code>&#xFF0C;&#x968F;Ack&#x56DE;&#x590D;&#x5230;&#x53D1;&#x9001;&#x65B9;&#x3002;</li>
<li>&#x53D1;&#x9001;&#x65B9;&#x6839;&#x636E;Ack&#x4E2D;&#x7684;AdvertisedWindow&#x503C;&#xFF0C;&#x9700;&#x4FDD;&#x8BC1;<code>LastByteSent - LastByteAcked &#x2264; AdvertisedWindow</code>&#xFF0C;&#x5219;&#x7A97;&#x53E3;&#x5185;&#x5269;&#x4F59;&#x53EF;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x5927;&#x5C0F;<code>EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)</code>&#xFF0C;&#x4EE5;&#x4FDD;&#x8BC1;&#x63A5;&#x6536;&#x65B9;&#x53EF;&#x4EE5;&#x5904;&#x7406;&#x3002;</li>
</ul>
<h3 id="AdvertisedWindow&#x4E0E;EffectiveWindow"><a href="#AdvertisedWindow&#x4E0E;EffectiveWindow" class="headerlink" title="AdvertisedWindow&#x4E0E;EffectiveWindow"></a>AdvertisedWindow&#x4E0E;EffectiveWindow</h3><p>AdvertisedWindow&#x8861;&#x91CF;&#x63A5;&#x6536;&#x65B9;&#x8FD8;&#x80FD;&#x63A5;&#x6536;&#x7684;&#x6570;&#x636E;&#x91CF;&#xFF0C;&#x53D1;&#x9001;&#x65B9;&#x8981;&#x6839;&#x636E;AdvertisedWindow&#x51B3;&#x5B9A;&#x63A5;&#x4E0B;&#x6765;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x91CF;&#x4E0A;&#x9650;&#xFF0C;&#x5373;EffectiveWindow&#xFF08;&#x53EF;&#x80FD;&#x4E3A;0&#xFF09;&#x3002;</p>
<h4 id="AdvertisedWindow&#x7684;&#x8BA1;&#x7B97;"><a href="#AdvertisedWindow&#x7684;&#x8BA1;&#x7B97;" class="headerlink" title="AdvertisedWindow&#x7684;&#x8BA1;&#x7B97;"></a>AdvertisedWindow&#x7684;&#x8BA1;&#x7B97;</h4><p><em>&#x7531;&#x4E8E;&#x4E71;&#x5E8F;&#x95EE;&#x9898;&#x7684;&#x5B58;&#x5728;&#xFF0C;LastByteRcvd&#x53EF;&#x80FD;&#x6307;&#x5411;Seq(LastByteSent)&#xFF0C;&#x800C;Seq(LastByteAcked + 1)&#x81F3;Seq(LastByteSent - 1)&#x90FD;&#x8FD8;&#x5728;&#x8DEF;&#x4E0A;</em>&#xFF0C;&#x5373;&#x5C06;&#x5230;&#x8FBE;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x6700;&#x597D;&#x7684;&#x60C5;&#x51B5;&#x662F;&#x4E0D;&#x4E22;&#x5305;&#xFF08;&#x4E22;&#x5305;&#x540E;&#x4F1A;&#x91CD;&#x4F20;&#xFF09;&#xFF0C;<em>&#x5219;LastByteRcvd&#x4E4B;&#x540E;&#x3001;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#x8FB9;&#x754C;&#x4E4B;&#x524D;&#x7684;&#x7A7A;&#x95F4;&#x5C31;&#x662F;&#x53D1;&#x9001;&#x65B9;&#x4E0B;&#x4E00;&#x6B21;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;&#x957F;&#x5EA6;&#x4E0A;&#x9650;</em>&#xFF08;&#x91CD;&#x4F20;&#x4E0D;&#x5C5E;&#x4E8E;&#x4E0B;&#x4E00;&#x6B21;&#x53D1;&#x9001;&#xFF09;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;<code>AdvertisedWindow = MaxRcvBuffer &#x2013; (LastByteRcvd - LastByteRead)</code>&#x3002;</p>
<h4 id="EffectiveWindow&#x7684;&#x8BA1;&#x7B97;"><a href="#EffectiveWindow&#x7684;&#x8BA1;&#x7B97;" class="headerlink" title="EffectiveWindow&#x7684;&#x8BA1;&#x7B97;"></a>EffectiveWindow&#x7684;&#x8BA1;&#x7B97;</h4><p><em>LastByteRcvd&#x8FD8;&#x53EF;&#x80FD;&#x6307;&#x5411;Seq(LastByteAcked)&#xFF08;&#x4E00;&#x4E2A;&#x65B0;&#x5305;&#x90FD;&#x6CA1;&#x6709;&#x6536;&#x5230;&#xFF09;</em>&#xFF0C;&#x663E;&#x7136;AdvertisedWindow&#x7684;&#x516C;&#x5F0F;&#x4E0D;&#x53D8;&#xFF0C;<em>&#x800C;Seq(LastByteAcked + 1)&#x81F3;Seq(LastByteSent)&#x90FD;&#x8FD8;&#x5728;&#x8DEF;&#x4E0A;</em>&#xFF0C;&#x672A;&#x6765;&#x5C06;&#x5230;&#x8FBE;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x8FDB;&#x5165;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#xFF0C;&#x5219;&#x201C;&#x8FD8;&#x5728;&#x8DEF;&#x4E0A;&#x7684;Seq(LastByteAcked + 1)&#x81F3;Seq(LastByteSent)&#x201D;&#x4E0D;&#x5E94;&#x8D85;&#x8FC7;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#x7684;&#x5269;&#x4F59;&#x7A7A;&#x95F4;AdvertisedWindow&#xFF08;&#x76EE;&#x524D;&#x7B49;&#x4E8E;MaxRcvBuffer&#xFF09;&#xFF0C;&#x8FD9;&#x8981;&#x6C42;&#x7684;&#x662F;&#x4E0A;&#x4E00;&#x6B21;&#x53D1;&#x9001;&#x6EE1;&#x8DB3;LastByteSent - LastByteAcked &#x2264; AdvertisedWindow&#xFF0C;<em>&#x90A3;&#x4E48;LastByteSent&#x4E4B;&#x540E;&#x3001;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#x5269;&#x4F59;&#x7A7A;&#x95F4;&#x8FB9;&#x754C;&#x4E4B;&#x524D;&#x7684;&#x7A7A;&#x95F4;&#x5C31;&#x662F;&#x53D1;&#x9001;&#x65B9;&#x7A97;&#x53E3;&#x5185;&#x5269;&#x4F59;&#x53EF;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;&#x957F;&#x5EA6;&#x4E0A;&#x9650;</em>&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;<code>EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)</code>&#x3002;</p>
<blockquote>
<p>&#x5F53;&#x7136;&#xFF0C;EffectiveWindow&#x6700;&#x5C0F;&#x53D6;0&#x3002;</p>
</blockquote>
<h3 id="&#x793A;&#x4F8B;1"><a href="#&#x793A;&#x4F8B;1" class="headerlink" title="&#x793A;&#x4F8B;1"></a>&#x793A;&#x4F8B;1</h3><p>&#x4EE5;&#x4E0B;&#x662F;&#x4E00;&#x4E2A;&#x53D1;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x7684;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;2&#xFF09;&#xFF1A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;/&#x793A;&#x4F8B;1-&#x53D1;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x7684;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;.png" alt="&#x793A;&#x4F8B;1-&#x53D1;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x7684;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;"></p>
<p>&#x4E0A;&#x56FE;&#x5206;&#x4E3A;4&#x4E2A;&#x90E8;&#x5206;&#xFF1A;</p>
<ul>
<li><code>#1</code>&#x662F;&#x5DF2;&#x53D1;&#x9001;&#x5DF2;&#x786E;&#x8BA4;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5373;LastByteAcked&#x4E4B;&#x524D;&#x7684;&#x533A;&#x57DF;&#x3002;</li>
<li><code>#2</code>&#x662F;&#x5DF2;&#x53D1;&#x9001;&#x672A;&#x786E;&#x8BA4;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5373;LastByteAcked&#x4E0E;LastByteSent&#x4E4B;&#x95F4;&#x7684;&#x533A;&#x57DF;&#xFF0C;&#x5927;&#x5C0F;&#x4E0D;&#x8D85;&#x8FC7;AdvertisedWindow&#x3002;</li>
<li><code>#3</code>&#x662F;&#x7A97;&#x53E3;&#x5185;&#x672A;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5373;LastByteSent&#x4E0E;&#x7A97;&#x53E3;&#x53F3;&#x754C;&#x4E4B;&#x95F4;&#x7684;&#x533A;&#x57DF;&#xFF0C;&#x5927;&#x5C0F;&#x7B49;&#x4E8E;EffectiveWindow&#xFF08;&#x53EF;&#x80FD;&#x4E3A;0&#xFF09;&#x3002;</li>
<li><code>#4</code>&#x662F;&#x7A97;&#x53E3;&#x5916;&#x672A;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5373;&#x7A97;&#x53E3;&#x53F3;&#x754C;&#x4E0E;LastByteWritten&#x4E4B;&#x95F4;&#x7684;&#x533A;&#x57DF;&#x3002;</li>
</ul>
<p>&#x5176;&#x4E2D;&#xFF0C;<code>#2 + #3</code>&#x7EC4;&#x6210;&#x4E86;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#xFF0C;&#x603B;&#x5927;&#x5C0F;&#x4E0D;&#x8D85;&#x8FC7;AdvertisedWindow&#xFF0C;&#x4E8C;&#x8005;&#x6BD4;&#x4F8B;&#x53D7;&#x5230;&#x63A5;&#x6536;&#x65B9;&#x7684;&#x5904;&#x7406;&#x901F;&#x5EA6;&#x4E0E;&#x7F51;&#x7EDC;&#x60C5;&#x51B5;&#x7684;&#x5F71;&#x54CD;&#xFF08;&#x5982;&#x679C;&#x4E22;&#x5305;&#x4E25;&#x91CD;&#x6216;&#x5904;&#x7406;&#x901F;&#x5EA6;&#x6162;&#x4E8E;&#x53D1;&#x9001;&#x901F;&#x5EA6;&#xFF0C;&#x5219;<code>#2:#3</code>&#x4F1A;&#x8D8A;&#x6765;&#x8D8A;&#x5927;&#xFF09;&#x3002;</p>
<h3 id="&#x793A;&#x4F8B;2"><a href="#&#x793A;&#x4F8B;2" class="headerlink" title="&#x793A;&#x4F8B;2"></a>&#x793A;&#x4F8B;2</h3><p>&#x4EE5;&#x4E0B;&#x662F;&#x4E00;&#x4E2A;AdvertisedWindow&#x7684;&#x8C03;&#x6574;&#x8FC7;&#x7A0B;&#xFF0C;EffectiveWindow&#x968F;&#x4E4B;&#x53D8;&#x5316;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;2&#xFF09;&#xFF1A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;/&#x793A;&#x4F8B;2-AdvertisedWindow&#x7684;&#x8C03;&#x6574;&#x8FC7;&#x7A0B;.png" alt="&#x793A;&#x4F8B;2-AdvertisedWindow&#x7684;&#x8C03;&#x6574;&#x8FC7;&#x7A0B;"></p>
<h3 id="Zero-Window"><a href="#Zero-Window" class="headerlink" title="Zero Window"></a>Zero Window</h3><blockquote>
<p>&#x7406;&#x89E3;&#x6709;&#x95EE;&#x9898;&#xFF0C;&#x4E0D;&#x8981;&#x6C42;&#x638C;&#x63E1;&#x3002;</p>
</blockquote>
<p><del>&#x4E0A;&#x56FE;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E00;&#x4E2A;&#x5904;&#x7406;&#x7F13;&#x6162;&#x7684;Server&#xFF08;&#x63A5;&#x6536;&#x7AEF;&#xFF09;&#x662F;&#x600E;&#x4E48;&#x628A;Client&#xFF08;&#x53D1;&#x9001;&#x7AEF;&#xFF09;&#x7684;&#x53D1;&#x9001;&#x7A97;&#x53E3;size&#x7ED9;&#x964D;&#x6210;0&#x7684;&#x3002;&#x5BF9;&#x4E8E;&#x63A5;&#x6536;&#x65B9;&#x6765;&#x8BF4;&#xFF0C;&#x6B64;&#x65F6;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#x786E;&#x5B9E;&#x5DF2;&#x7ECF;&#x6EE1;&#x4E86;&#xFF0C;&#x56E0;&#x6B64;&#x4EE4;&#x53D1;&#x9001;&#x65B9;&#x7684;&#x53D1;&#x9001;&#x7A97;&#x53E3;size&#x964D;&#x4E3A;0&#x4EE5;&#x6682;&#x65F6;&#x7981;&#x6B62;&#x53D1;&#x9001;&#x662F;&#x5408;&#x7406;&#x7684;&#x3002;&#x90A3;&#x4E48;&#xFF0C;&#x7B49;&#x63A5;&#x6536;&#x65B9;&#x7684;&#x63A5;&#x6536;&#x7F13;&#x51B2;&#x533A;&#x518D;&#x7A7A;&#x51FA;&#x6765;&#xFF0C;&#x600E;&#x4E48;&#x901A;&#x77E5;&#x53D1;&#x9001;&#x65B9;&#x65B0;&#x7684;window size&#x5462;&#xFF1F;</del></p>
<p><del>&#x9488;&#x5BF9;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x4E3A;TCP&#x8BBE;&#x8BA1;&#x4E86;ZWP&#x6280;&#x672F;&#xFF08;Zero Window Probe&#xFF0C;&#x96F6;&#x7A97;&#x901A;&#x544A;&#xFF09;&#xFF1A;&#x53D1;&#x9001;&#x65B9;&#x5728;&#x7A97;&#x53E3;&#x53D8;&#x6210;0&#x540E;&#xFF0C;&#x4F1A;&#x53D1;ZWP&#x7684;&#x5305;&#x7ED9;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x8BA9;&#x63A5;&#x6536;&#x65B9;&#x6765;Ack&#x4ED6;&#x7684;Window&#x5C3A;&#x5BF8;&#xFF1B;ZWP&#x7684;&#x91CD;&#x4F20;&#x4E5F;&#x9075;&#x5FAA;&#x6307;&#x6570;&#x56DE;&#x9000;&#x7B56;&#x7565;&#xFF0C;&#x9ED8;&#x8BA4;&#x91CD;&#x8BD5;3&#x6B21;&#xFF1B;&#x5982;&#x679C;3&#x6B21;&#x540E;window size&#x8FD8;&#x662F;0&#xFF0C;&#x5219;&#x8BA4;&#x4E3A;&#x63A5;&#x6536;&#x65B9;&#x51FA;&#x73B0;&#x5F02;&#x5E38;&#xFF0C;&#x53D1;RST&#x91CD;&#x7F6E;&#x8FDE;&#x63A5;&#xFF08;<font color="red"><strong>&#x90E8;&#x5206;&#x6587;&#x7AE0;&#x5199;&#x7684;&#x662F;&#x91CD;&#x8BD5;&#x5230;window size&#x6B63;&#x5E38;&#xFF1F;&#xFF1F;&#xFF1F;</strong></font>&#xFF09;&#x3002;</del></p>
<p><del>&#x6CE8;&#x610F;&#xFF1A;&#x53EA;&#x8981;&#x6709;&#x7B49;&#x5F85;&#x7684;&#x5730;&#x65B9;&#x90FD;&#x53EF;&#x80FD;&#x51FA;&#x73B0;DDoS&#x653B;&#x51FB;&#xFF0C;Zero Window&#x4E5F;&#x4E0D;&#x4F8B;&#x5916;&#x3002;&#x4E00;&#x4E9B;&#x653B;&#x51FB;&#x8005;&#x4F1A;&#x5728;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#x5EFA;&#x597D;&#x8FDE;&#x63A5;&#x53D1;&#x5B8C;GET&#x8BF7;&#x6C42;&#x540E;&#xFF0C;&#x5C31;&#x628A;Window&#x8BBE;&#x7F6E;&#x4E3A;0&#xFF0C;&#x4E8E;&#x662F;&#x670D;&#x52A1;&#x7AEF;&#x5C31;&#x53EA;&#x80FD;&#x7B49;&#x5F85;&#x8FDB;&#x884C;ZWP&#xFF1B;&#x7136;&#x540E;&#x653B;&#x51FB;&#x8005;&#x518D;&#x5927;&#x91CF;&#x5E76;&#x53D1;&#x53D1;&#x9001;ZWP&#xFF0C;&#x628A;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x7684;&#x8D44;&#x6E90;&#x8017;&#x5C3D;&#x3002;&#xFF08;<font color="red"><strong>&#x5BA2;&#x6237;&#x7AEF;&#x7B49;&#x5F85;&#x600E;&#x4E48;&#x8017;&#x670D;&#x52A1;&#x7AEF;&#xFF1F;&#xFF1F;&#xFF1F;</strong></font>&#xFF09;</del></p>
<h1 id="TCP&#x7684;&#x62E5;&#x585E;&#x63A7;&#x5236;"><a href="#TCP&#x7684;&#x62E5;&#x585E;&#x63A7;&#x5236;" class="headerlink" title="TCP&#x7684;&#x62E5;&#x585E;&#x63A7;&#x5236;"></a>TCP&#x7684;&#x62E5;&#x585E;&#x63A7;&#x5236;</h1><blockquote>
<p>&#x901A;&#x4FE1;&#x4E2D;&#x7684;&#x62E5;&#x585E;&#x6307;&#xFF1A;</p>
<p>&#x5230;&#x8FBE;&#x901A;&#x4FE1;&#x5B50;&#x7F51;&#x4E2D;&#x67D0;&#x4E00;&#x90E8;&#x5206;&#x7684;&#x5206;&#x7EC4;&#x6570;&#x91CF;&#x8FC7;&#x591A;&#xFF0C;&#x4F7F;&#x5F97;&#x8BE5;&#x90E8;&#x5206;&#x7F51;&#x7EDC;&#x6765;&#x4E0D;&#x53CA;&#x5904;&#x7406;&#xFF0C;&#x4EE5;&#x81F4;&#x5F15;&#x8D77;&#x8FD9;&#x90E8;&#x5206;&#x4E43;&#x81F3;&#x6574;&#x4E2A;&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x4E0B;&#x964D;&#x7684;&#x73B0;&#x8C61;&#xFF0C;&#x4E25;&#x91CD;&#x65F6;&#x751A;&#x81F3;&#x4F1A;&#x5BFC;&#x81F4;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x4E1A;&#x52A1;&#x9677;&#x5165;&#x505C;&#x987F;&#x5373;&#x51FA;&#x73B0;&#x6B7B;&#x9501;&#x3002;</p>
</blockquote>
<p>&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x8FDB;&#x884C;&#x62E5;&#x585E;&#x63A7;&#x5236;&#xFF1F;&#x5047;&#x8BBE;&#x7F51;&#x7EDC;&#x5DF2;&#x7ECF;&#x51FA;&#x73B0;&#x62E5;&#x585E;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5904;&#x7406;&#x62E5;&#x585E;&#xFF0C;&#x90A3;&#x4E48;&#x5EF6;&#x65F6;&#x589E;&#x52A0;&#xFF0C;&#x51FA;&#x73B0;&#x66F4;&#x591A;&#x4E22;&#x5305;&#xFF0C;&#x89E6;&#x53D1;&#x53D1;&#x9001;&#x65B9;&#x91CD;&#x4F20;&#x6570;&#x636E;&#xFF0C;&#x52A0;&#x5267;&#x62E5;&#x585E;&#x60C5;&#x51B5;&#xFF0C;&#x7EE7;&#x7EED;&#x6076;&#x6027;&#x5FAA;&#x73AF;&#x76F4;&#x81F3;&#x7F51;&#x7EDC;&#x762B;&#x75EA;&#x3002;&#x53EF;&#x77E5;&#xFF0C;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x4E0E;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x7684;&#x9002;&#x5E94;&#x573A;&#x666F;&#x548C;&#x76EE;&#x7684;&#x5747;&#x4E0D;&#x540C;&#x3002;</p>
<p><strong>&#x62E5;&#x585E;&#x53D1;&#x751F;&#x524D;&#xFF0C;&#x53EF;&#x907F;&#x514D;&#x6D41;&#x91CF;&#x8FC7;&#x5FEB;&#x589E;&#x957F;&#x62D6;&#x57AE;&#x7F51;&#x7EDC;&#xFF1B;&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#xFF0C;&#x552F;&#x4E00;&#x7684;&#x9009;&#x62E9;&#x5C31;&#x662F;&#x964D;&#x4F4E;&#x6D41;&#x91CF;</strong>&#x3002;&#x4E3B;&#x8981;&#x4F7F;&#x7528;4&#x79CD;&#x7B97;&#x6CD5;&#x5B8C;&#x6210;&#x62E5;&#x585E;&#x63A7;&#x5236;&#xFF1A;</p>
<ol>
<li>&#x6162;&#x542F;&#x52A8;</li>
<li>&#x62E5;&#x585E;&#x907F;&#x514D;</li>
<li>&#x62E5;&#x585E;&#x53D1;&#x751F;</li>
<li>&#x5FEB;&#x901F;&#x6062;&#x590D;</li>
</ol>
<p>&#x7B97;&#x6CD5;1&#x3001;2&#x9002;&#x7528;&#x4E8E;&#x62E5;&#x585E;&#x53D1;&#x751F;&#x524D;&#xFF0C;&#x7B97;&#x6CD5;3&#x9002;&#x7528;&#x4E8E;&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#xFF0C;&#x7B97;&#x6CD5;4&#x9002;&#x7528;&#x4E8E;&#x62E5;&#x585E;&#x89E3;&#x51B3;&#x540E;&#xFF08;&#x76F8;&#x5F53;&#x4E8E;&#x62E5;&#x585E;&#x53D1;&#x751F;&#x524D;&#xFF09;&#x3002;</p>
<h2 id="rwnd&#x4E0E;cwnd"><a href="#rwnd&#x4E0E;cwnd" class="headerlink" title="rwnd&#x4E0E;cwnd"></a>rwnd&#x4E0E;cwnd</h2><p>&#x5728;&#x6B63;&#x5F0F;&#x4ECB;&#x7ECD;&#x4E0A;&#x8FF0;&#x7B97;&#x6CD5;&#x4E4B;&#x524D;&#xFF0C;&#x5148;&#x8865;&#x5145;&#x4E0B;<code>rwnd</code>&#xFF08;Receiver Window&#xFF0C;&#x63A5;&#x6536;&#x8005;&#x7A97;&#x53E3;&#xFF09;&#x4E0E;<code>cwnd</code>&#xFF08;Congestion Window&#xFF0C;&#x62E5;&#x585E;&#x7A97;&#x53E3;&#xFF09;&#x7684;&#x6982;&#x5FF5;&#xFF1A;</p>
<ul>
<li>rwnd&#x662F;&#x7528;&#x4E8E;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x7684;&#x7A97;&#x53E3;&#x5927;&#x5C0F;&#xFF0C;&#x5373;&#x4E0A;&#x8FF0;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E2D;&#x7684;AdvertisedWindow&#xFF0C;&#x4E3B;&#x8981;&#x53D6;&#x51B3;&#x4E8E;&#x63A5;&#x6536;&#x65B9;&#x7684;&#x5904;&#x7406;&#x901F;&#x5EA6;&#xFF0C;&#x7531;&#x63A5;&#x6536;&#x65B9;&#x901A;&#x77E5;&#x53D1;&#x9001;&#x65B9;&#x88AB;&#x52A8;&#x8C03;&#x6574;&#xFF08;&#x8BE6;&#x7EC6;&#x903B;&#x8F91;&#x89C1;&#x4E0A;&#xFF09;&#x3002;</li>
<li>cwnd&#x662F;&#x7528;&#x4E8E;&#x62E5;&#x585E;&#x5904;&#x7406;&#x7684;&#x7A97;&#x53E3;&#x5927;&#x5C0F;&#xFF0C;&#x53D6;&#x51B3;&#x4E8E;&#x7F51;&#x7EDC;&#x72B6;&#x51B5;&#xFF0C;&#x7531;&#x53D1;&#x9001;&#x65B9;&#x63A2;&#x67E5;&#x7F51;&#x7EDC;&#x4E3B;&#x52A8;&#x8C03;&#x6574;&#x3002;</li>
</ul>
<p>&#x4ECB;&#x7ECD;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x65F6;&#xFF0C;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x8003;&#x8651;cwnd&#xFF0C;&#x8BA4;&#x4E3A;&#x53D1;&#x9001;&#x65B9;&#x7684;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#x6700;&#x5927;&#x5373;&#x4E3A;rwnd&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;<em>&#x9700;&#x8981;&#x540C;&#x65F6;&#x8003;&#x8651;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x5904;&#x7406;&#xFF0C;&#x5219;&#x53D1;&#x9001;&#x65B9;&#x7A97;&#x53E3;&#x7684;&#x5927;&#x5C0F;&#x4E0D;&#x8D85;&#x8FC7;<code>min{rwnd, cwnd}</code></em>&#x3002;&#x4E0B;&#x8FF0;4&#x79CD;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x7B97;&#x6CD5;&#x53EA;&#x6D89;&#x53CA;&#x5BF9;cwnd&#x7684;&#x8C03;&#x6574;&#xFF0C;&#x540C;&#x4ECB;&#x7ECD;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x65F6;&#x4E00;&#x6837;&#xFF0C;&#x6682;&#x4E14;&#x4E0D;&#x8003;&#x8651;rwnd&#xFF0C;&#x5047;&#x5B9A;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#x6700;&#x5927;&#x4E3A;cwnd&#xFF1B;&#x4F46;&#x8BFB;&#x8005;&#x5E94;&#x660E;&#x786E;rwnd&#x3001;cwnd&#x4E0E;&#x53D1;&#x9001;&#x65B9;&#x7A97;&#x53E3;&#x5927;&#x5C0F;&#x7684;&#x5173;&#x7CFB;&#x3002;</p>
<h2 id="4&#x79CD;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x7B97;&#x6CD5;"><a href="#4&#x79CD;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x7B97;&#x6CD5;" class="headerlink" title="4&#x79CD;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x7B97;&#x6CD5;"></a>4&#x79CD;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x7B97;&#x6CD5;</h2><h3 id="&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;"><a href="#&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;" class="headerlink" title="&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;"></a>&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;</h3><p><code>&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;</code>&#xFF08;Slow Start&#xFF09;&#x4F5C;&#x7528;&#x5728;&#x62E5;&#x585E;&#x4EA7;&#x751F;&#x4E4B;&#x524D;&#xFF1A;<em>&#x5BF9;&#x4E8E;&#x521A;&#x521A;&#x52A0;&#x5165;&#x7F51;&#x7EDC;&#x7684;&#x8FDE;&#x63A5;&#xFF0C;&#x8981;&#x4E00;&#x70B9;&#x4E00;&#x70B9;&#x7684;&#x63D0;&#x901F;&#xFF0C;&#x4E0D;&#x8981;&#x5984;&#x56FE;&#x4E00;&#x6B65;&#x5230;&#x4F4D;</em>&#x3002;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>&#x8FDE;&#x63A5;&#x521A;&#x5EFA;&#x597D;&#xFF0C;&#x521D;&#x59CB;&#x5316;cwnd = 1&#xFF08;&#x5F53;&#x7136;&#xFF0C;&#x901A;&#x5E38;&#x4E0D;&#x4F1A;&#x521D;&#x59CB;&#x5316;&#x4E3A;1&#xFF0C;&#x592A;&#x5C0F;&#xFF09;&#xFF0C;&#x8868;&#x660E;&#x53EF;&#x4EE5;&#x4F20;&#x4E00;&#x4E2A;MSS&#x5927;&#x5C0F;&#x7684;&#x6570;&#x636E;&#x3002;</li>
<li>&#x6BCF;&#x6536;&#x5230;&#x4E00;&#x4E2A;ACK&#xFF0C;cwnd++&#xFF0C;&#x7EBF;&#x6027;&#x589E;&#x957F;&#x3002;</li>
<li>&#x6BCF;&#x7ECF;&#x8FC7;&#x4E00;&#x4E2A;RTT&#xFF0C;cwnd = cwnd * 2&#xFF0C;&#x6307;&#x6570;&#x589E;&#x957F;&#xFF08;&#x4E3B;&#x8981;&#x589E;&#x957F;&#x6765;&#x6E90;&#xFF09;&#x3002;</li>
<li>&#x8FD8;&#x6709;&#x4E00;&#x4E2A;ssthresh&#xFF08;slow start threshold&#xFF09;&#xFF0C;&#x5F53;cwnd &gt;= ssthresh&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x8FDB;&#x5165;&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;&#xFF08;&#x89C1;&#x540E;&#xFF09;&#x3002;</li>
</ol>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x5982;&#x679C;&#x7F51;&#x901F;&#x5F88;&#x5FEB;&#x7684;&#x8BDD;&#xFF0C;Ack&#x8FD4;&#x56DE;&#x5FEB;&#xFF0C;RTT&#x77ED;&#xFF0C;&#x90A3;&#x4E48;&#xFF0C;&#x8FD9;&#x4E2A;&#x6162;&#x542F;&#x52A8;&#x5C31;&#x4E00;&#x70B9;&#x4E5F;&#x4E0D;&#x6162;&#x3002;&#x4E0B;&#x56FE;&#x8BF4;&#x660E;&#x4E86;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;2&#xFF09;&#xFF1A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;/&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;.jpg" alt="&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;"></p>
<h3 id="&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;"><a href="#&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;" class="headerlink" title="&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;"></a>&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;</h3><p>&#x524D;&#x9762;&#x8BF4;&#x8FC7;&#xFF0C;&#x5F53;cwnd &gt;= ssthresh&#xFF08;&#x901A;&#x5E38;ssthresh = 65535&#xFF09;&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x8FDB;&#x5165;<code>&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;</code>&#xFF08;Congestion Avoidance&#xFF09;&#xFF1A;<em>&#x7F13;&#x6162;&#x589E;&#x957F;&#xFF0C;&#x5C0F;&#x5FC3;&#x7FFC;&#x7FFC;&#x7684;&#x627E;&#x5230;&#x6700;&#x4F18;&#x503C;</em>&#x3002;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>&#x6BCF;&#x6536;&#x5230;&#x4E00;&#x4E2A;Ack&#xFF0C;cwnd = cwnd + 1/cwnd&#xFF0C;&#x663E;&#x7136;&#xFF0C;cwnd &gt; 1&#x65F6;&#x65E0;&#x589E;&#x957F;&#x3002;</li>
<li>&#x6BCF;&#x7ECF;&#x8FC7;&#x4E00;&#x4E2A;RTT&#xFF0C;cwnd++&#xFF0C;&#x7EBF;&#x6027;&#x589E;&#x957F;&#xFF08;&#x4E3B;&#x8981;&#x589E;&#x957F;&#x6765;&#x6E90;&#xFF09;&#x3002;</li>
</ol>
<p>&#x6162;&#x542F;&#x52A8;&#x7B97;&#x6CD5;&#x4E3B;&#x8981;&#x5448;&#x6307;&#x6570;&#x589E;&#x957F;&#xFF0C;&#x7C97;&#x72B7;&#x578B;&#xFF0C;&#x901F;&#x5EA6;&#x5FEB;&#xFF08;&#x201C;&#x6162;&#x201D;&#x662F;&#x76F8;&#x5BF9;&#x4E8E;&#x4E00;&#x6B65;&#x5230;&#x4F4D;&#x800C;&#x8A00;&#x7684;&#xFF09;&#xFF1B;&#x800C;&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;&#x4E3B;&#x8981;&#x5448;&#x7EBF;&#x6027;&#x589E;&#x957F;&#xFF0C;&#x7CBE;&#x7EC6;&#x578B;&#xFF0C;&#x901F;&#x5EA6;&#x6162;&#xFF0C;&#x4F46;&#x66F4;&#x5BB9;&#x6613;&#x5728;&#x4E0D;&#x5BFC;&#x81F4;&#x62E5;&#x585E;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x627E;&#x5230;&#x7F51;&#x7EDC;&#x73AF;&#x5883;&#x7684;cwnd&#x6700;&#x4F18;&#x503C;&#x3002;</p>
<h3 id="&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#x7684;&#x7B97;&#x6CD5;"><a href="#&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#x7684;&#x7B97;&#x6CD5;" class="headerlink" title="&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#x7684;&#x7B97;&#x6CD5;"></a>&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#x7684;&#x7B97;&#x6CD5;</h3><p>&#x6162;&#x542F;&#x52A8;&#x4E0E;&#x62E5;&#x585E;&#x907F;&#x514D;&#x7B97;&#x6CD5;&#x4F5C;&#x7528;&#x5728;&#x62E5;&#x585E;&#x53D1;&#x751F;&#x524D;&#xFF0C;&#x91C7;&#x53D6;&#x4E0D;&#x540C;&#x7684;&#x7B56;&#x7565;&#x589E;&#x5927;cwnd&#xFF1B;&#x5982;&#x679C;&#x5DF2;&#x7ECF;&#x53D1;&#x751F;&#x62E5;&#x585E;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x91C7;&#x53D6;&#x7B56;&#x7565;&#x51CF;&#x5C0F;cwnd&#x3002;&#x90A3;&#x4E48;&#xFF0C;TCP&#x5982;&#x4F55;&#x5224;&#x65AD;&#x5F53;&#x524D;&#x7F51;&#x7EDC;&#x62E5;&#x585E;&#x4E86;&#x5462;&#xFF1F;&#x5F88;&#x7B80;&#x5355;&#xFF0C;<strong>&#x5982;&#x679C;&#x53D1;&#x9001;&#x65B9;&#x53D1;&#x73B0;&#x6709;Seq&#x53D1;&#x9001;&#x5931;&#x8D25;&#xFF08;&#x8868;&#x73B0;&#x4E3A;&#x201C;&#x4E22;&#x5305;&#x201D;&#xFF09;&#xFF0C;&#x5C31;&#x8BA4;&#x4E3A;&#x7F51;&#x7EDC;&#x62E5;&#x585E;&#x4E86;</strong>&#x3002;</p>
<p>&#x4E22;&#x5305;&#x540E;&#xFF0C;&#x6709;&#x4E24;&#x79CD;&#x91CD;&#x4F20;&#x65B9;&#x5F0F;&#xFF0C;&#x5BF9;&#x5E94;&#x4E0D;&#x540C;&#x7684;&#x7F51;&#x7EDC;&#x60C5;&#x51B5;&#xFF0C;&#x4E5F;&#x5C31;&#x5BF9;&#x5E94;&#x7740;&#x4E24;&#x79CD;&#x62E5;&#x585E;&#x53D1;&#x751F;&#x65F6;&#x7684;&#x63A7;&#x5236;&#x7B97;&#x6CD5;&#xFF1A;</p>
<ol>
<li>&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x3002;TCP&#x8BA4;&#x4E3A;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x592A;&#x7CDF;&#x7CD5;&#xFF0C;&#x8C03;&#x6574;&#x529B;&#x5EA6;&#x6BD4;&#x8F83;&#x5927;&#xFF1A;<ol>
<li>ssthresh =  cwnd /2</li>
<li>cwnd = 1&#xFF0C;&#x91CD;&#x65B0;&#x8FDB;&#x5165;&#x6162;&#x542F;&#x52A8;&#x8FC7;&#x7A0B;&#xFF08;&#x7F51;&#x7EDC;&#x7CDF;&#x7CD5;&#xFF0C;&#x8981;&#x6162;&#x6162;&#x8C03;&#x6574;&#xFF09;</li>
</ol>
</li>
<li>&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x3002;TCP&#x8BA4;&#x4E3A;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x901A;&#x5E38;&#x6BD4;RTO&#x8D85;&#x65F6;&#x597D;&#x4E00;&#x4E9B;&#xFF0C;&#x4E3B;&#x6D41;&#x5B9E;&#x73B0;TCP Reno&#x7684;&#x8C03;&#x6574;&#x529B;&#x5EA6;&#x66F4;&#x67D4;&#x548C;&#xFF08;TCP Tahoe&#x7684;&#x5B9E;&#x73B0;&#x548C;RTO&#x8D85;&#x65F6;&#x4E00;&#x6837;&#x66B4;&#x8E81;&#xFF09;&#xFF1A;<ol>
<li>ssthresh =  cwnd /2</li>
<li>cwnd = cwnd /2&#xFF0C;&#x8FDB;&#x5165;&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;&#xFF08;&#x7F51;&#x7EDC;&#x6CA1;&#x90A3;&#x4E48;&#x7CDF;&#xFF0C;&#x53EF;&#x4EE5;&#x5FEB;&#x901F;&#x8C03;&#x6574;&#xFF0C;&#x89C1;&#x4E0B;&#xFF09;</li>
</ol>
</li>
</ol>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x4E0D;&#x7BA1;&#x662F;&#x54EA;&#x79CD;&#x91CD;&#x4F20;&#x65B9;&#x5F0F;&#xFF0C;ssthresh&#x90FD;&#x4F1A;&#x53D8;&#x6210;cwnd&#x7684;&#x4E00;&#x534A;&#xFF0C;&#x4ECD;&#x7136;&#x662F;<em>&#x6307;&#x6570;&#x56DE;&#x9000;&#xFF0C;&#x5F85;&#x62E5;&#x585E;&#x6D88;&#x5931;&#x540E;&#x518D;&#x9010;&#x6E10;&#x589E;&#x957F;&#x56DE;&#x5230;&#x65B0;&#x7684;&#x6700;&#x4F18;&#x503C;</em>&#xFF0C;&#x603B;&#x4F53;&#x4E0A;&#x5728;&#x6700;&#x4F18;&#x503C;&#xFF08;&#x52A8;&#x6001;&#xFF09;&#x9644;&#x8FD1;&#x9707;&#x8361;&#x3002;</p>
<p>&#x56DE;&#x9000;&#x540E;&#xFF0C;&#x6839;&#x636E;&#x4E0D;&#x540C;&#x7684;&#x7F51;&#x7EDC;&#x60C5;&#x51B5;&#xFF0C;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4E0D;&#x540C;&#x7684;&#x6062;&#x590D;&#x7B97;&#x6CD5;&#x3002;&#x6162;&#x542F;&#x52A8;&#x5DF2;&#x7ECF;&#x4ECB;&#x7ECD;&#x8FC7;&#x4E86;&#xFF0C;&#x4E0B;&#x9762;&#x4ECB;&#x7ECD;&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;&#x3002;</p>
<h3 id="&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;"><a href="#&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;" class="headerlink" title="&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;"></a>&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;</h3><p>&#x5982;&#x679C;&#x89E6;&#x53D1;&#x4E86;&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#xFF0C;&#x5373;&#x53D1;&#x9001;&#x65B9;&#x6536;&#x5230;&#x81F3;&#x5C11;3&#x6B21;&#x76F8;&#x540C;&#x7684;Ack&#xFF0C;&#x90A3;&#x4E48;TCP&#x8BA4;&#x4E3A;&#x7F51;&#x7EDC;&#x60C5;&#x51B5;&#x4E0D;&#x90A3;&#x4E48;&#x7CDF;&#xFF0C;&#x4E5F;&#x5C31;&#x6CA1;&#x5FC5;&#x8981;&#x63D0;&#x5FC3;&#x540A;&#x80C6;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x9002;&#x5F53;&#x5927;&#x80C6;&#x7684;&#x6062;&#x590D;&#x3002;&#x4E3A;&#x6B64;&#x8BBE;&#x8BA1;<code>&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;</code>&#xFF08;Fast Recovery&#xFF09;&#xFF0C;&#x4E0B;&#x9762;&#x4ECB;&#x7ECD;TCP Reno&#x4E2D;&#x7684;&#x5B9E;&#x73B0;&#x3002;</p>
<p>&#x56DE;&#x987E;&#x4E00;&#x4E0B;&#xFF0C;&#x8FDB;&#x5165;&#x5FEB;&#x901F;&#x6062;&#x590D;&#x4E4B;&#x524D;&#xFF0C;cwnd&#x548C;sshthresh&#x5DF2;&#x88AB;&#x66F4;&#x65B0;&#xFF1A;</p>
<ol>
<li>ssthresh = cwnd /2</li>
<li>cwnd = cwnd /2</li>
</ol>
<p>&#x7136;&#x540E;&#xFF0C;&#x8FDB;&#x5165;&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;&#xFF1A;</p>
<ol>
<li>cwnd = ssthresh  + 3 * MSS &#xFF08;&#x5C1D;&#x8BD5;&#x4E00;&#x6B65;&#x5230;&#x4F4D;&#xFF09;</li>
<li>&#x91CD;&#x4F20;&#x91CD;&#x590D;Ack&#x5BF9;&#x5E94;&#x7684;Seq</li>
<li>&#x5982;&#x679C;&#x518D;&#x6536;&#x5230;&#x8BE5;&#x91CD;&#x590D;Ack&#xFF0C;&#x5219;cwnd++&#xFF0C;&#x7EBF;&#x6027;&#x589E;&#x957F;&#xFF08;&#x7F13;&#x6162;&#x8C03;&#x6574;&#xFF09;</li>
<li>&#x5982;&#x679C;&#x6536;&#x5230;&#x4E86;&#x65B0;Ack&#xFF0C;&#x5219;cwnd = ssthresh &#xFF0C;&#x7136;&#x540E;&#x5C31;&#x8FDB;&#x5165;&#x4E86;&#x62E5;&#x585E;&#x907F;&#x514D;&#x7684;&#x7B97;&#x6CD5;&#x4E86;&#xFF08;<font color="red"><strong>&#x4E3A;&#x4EC0;&#x4E48;&#x6536;&#x5230;&#x65B0;Ack&#x8981;&#x964D;&#x4F4E;sshthresh&#xFF1F;&#xFF1F;&#xFF1F;</strong></font>&#xFF09;</li>
</ol>
<blockquote>
<p>&#x53EF;&#x6682;&#x65F6;&#x5FFD;&#x7565;&#x7684;&#x5185;&#x5BB9;&#xFF1A;</p>
<p>&#x8FD9;&#x79CD;&#x5B9E;&#x73B0;&#x4E5F;&#x6709;&#x95EE;&#x9898;&#xFF1A;&#x4F9D;&#x8D56;&#x4E8E;3&#x4E2A;&#x91CD;&#x590D;Ack&#x3002;&#x56DE;&#x5FC6;&#x4E0A;&#x6587;&#x8BA8;&#x8BBA;&#x7684;&#x201C;&#x91CD;&#x4F20;&#x4E00;&#x4E2A;&#x8FD8;&#x662F;&#x91CD;&#x4F20;&#x6240;&#x6709;&#x7684;&#x95EE;&#x9898;&#x201D;&#xFF0C;3&#x4E2A;&#x91CD;&#x590D;Ack&#x5E76;&#x4E0D;&#x4EE3;&#x8868;&#x53EA;&#x4E22;&#x4E86;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5305;&#xFF0C;&#x5F88;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x4E22;&#x4E86;&#x597D;&#x591A;&#x5305;&#x3002;&#x663E;&#x7136;&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;&#x9009;&#x62E9;&#x201C;&#x91CD;&#x4F20;&#x4E00;&#x4E2A;&#x201D;&#xFF0C;&#x800C;&#x5269;&#x4E0B;&#x7684;&#x90A3;&#x4E9B;&#x5305;&#x53EA;&#x80FD;&#x7B49;&#x5230;RTO&#x8D85;&#x65F6;&#x3002;&#x4E8E;&#x662F;&#xFF0C;&#x8D85;&#x65F6;&#x4E00;&#x4E2A;&#x7A97;&#x53E3;&#x5C31;&#x51CF;&#x534A;&#x4E00;&#x4E0B;&#xFF0C;&#x591A;&#x4E2A;&#x8D85;&#x65F6;&#x4F1A;&#x8D85;&#x6210;TCP&#x7684;&#x4F20;&#x8F93;&#x901F;&#x5EA6;&#x6307;&#x6570;&#x7EA7;&#x4E0B;&#x964D;&#xFF1B;&#x540C;&#x65F6;&#xFF0C;&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x5FEB;&#x901F;&#x6062;&#x590D;&#x7B97;&#x6CD5;&#xFF0C;&#x6162;&#x542F;&#x52A8;&#x5F88;&#x5BB9;&#x6613;&#x52A0;&#x5267;&#x8D85;&#x65F6;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x8FDB;&#x5165;&#x6076;&#x6027;&#x5FAA;&#x73AF;&#x3002;</p>
</blockquote>
<h2 id="&#x793A;&#x4F8B;"><a href="#&#x793A;&#x4F8B;" class="headerlink" title="&#x793A;&#x4F8B;"></a>&#x793A;&#x4F8B;</h2><p>&#x4E0B;&#x9762;&#x770B;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x56FE;&#x793A;&#xFF0C;&#x611F;&#x53D7;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;cwnd&#x53D8;&#x5316;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;2&#xFF09;&#xFF1A;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;/&#x793A;&#x4F8B;-&#x62E5;&#x585E;&#x63A7;&#x5236;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;cwnd&#x53D8;&#x5316;.jpg" alt="&#x793A;&#x4F8B;-&#x62E5;&#x585E;&#x63A7;&#x5236;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;cwnd&#x53D8;&#x5316;"></p>
<h2 id="&#x4E00;&#x4E2A;&#x6709;&#x8DA3;&#x7684;&#x9762;&#x8BD5;&#x9898;"><a href="#&#x4E00;&#x4E2A;&#x6709;&#x8DA3;&#x7684;&#x9762;&#x8BD5;&#x9898;" class="headerlink" title="&#x4E00;&#x4E2A;&#x6709;&#x8DA3;&#x7684;&#x9762;&#x8BD5;&#x9898;"></a>&#x4E00;&#x4E2A;&#x6709;&#x8DA3;&#x7684;&#x9762;&#x8BD5;&#x9898;</h2><blockquote>
<p>&#x95EE;&#xFF1A;</p>
<p>&#x4F7F;&#x7528;wget&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x901A;&#x5E38;&#x521A;&#x5F00;&#x59CB;&#x901F;&#x5EA6;&#x6162;&#x4E00;&#x4E9B;&#xFF0C;&#x7136;&#x540E;&#x9010;&#x6E10;&#x4E0A;&#x5347;&#x5230;&#x6EE1;&#x901F;&#x3002;&#x53EF;&#x80FD;&#x662F;&#x4EC0;&#x4E48;&#x539F;&#x56E0;&#x5BFC;&#x81F4;&#xFF1F;</p>
</blockquote>
<p>&#x7334;&#x5B50;&#x9762;&#x8BD5;&#x65F6;&#x9047;&#x5230;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x61F5;&#x903C;&#x4E86;&#x51E0;&#x79D2;&#x949F;&#xFF0C;&#x60F3;&#x5230;&#x4E00;&#x4E2A;CDN pre load&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x9762;&#x8BD5;&#x5B98;&#x770B;&#x6211;&#x61F5;&#x903C;&#x5C31;&#x63D0;&#x9192;&#x201C;&#x53EF;&#x80FD;&#x8DDF;tcp&#x534F;&#x8BAE;&#x6709;&#x5173;&#x201D;&#xFF0C;&#x77AC;&#x95F4;&#x660E;&#x767D;&#x8003;&#x70B9;&#xFF1A;</p>
<ul>
<li>wget&#x4F7F;&#x7528;HTTP&#x534F;&#x8BAE;&#x6784;&#x5EFA;&#xFF0C;&#x4F20;&#x8F93;&#x5C42;&#x4F7F;&#x7528;TCP&#x534F;&#x8BAE;&#xFF0C;&#x800C;TCP&#x7684;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x4F1A;&#x4ECE;&#x6162;&#x542F;&#x52A8;&#x5F00;&#x59CB;&#xFF0C;&#x9010;&#x6E10;&#x8BD5;&#x63A2;&#xFF0C;&#x589E;&#x957F;&#x5230;&#x4E00;&#x4E2A;&#x8DB3;&#x591F;&#x5927;&#xFF0C;&#x53C8;&#x4E0D;&#x81F3;&#x5BFC;&#x81F4;&#x62E5;&#x585E;&#x7684;&#x901F;&#x5EA6;&#x3002;</li>
</ul>
<p>&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x8865;&#x5145;CDN&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x4F46;&#x4E0D;&#x662F;&#x4E3B;&#x8981;&#x539F;&#x56E0;&#x4E86;&#xFF1A;</p>
<ul>
<li>&#x5F88;&#x591A;&#x4E0B;&#x8F7D;&#x670D;&#x52A1;&#x90FD;&#x4F7F;&#x7528;&#x4E86;CDN&#xFF0C;CDN&#x5C5E;&#x4E8E;&#x7F13;&#x5B58;&#xFF0C;&#x4E00;&#x5B9A;&#x4E5F;&#x5B58;&#x5728;&#x4E00;&#x4E9B;pre load&#x7B56;&#x7565;&#xFF0C;&#x663E;&#x7136;&#x8FD0;&#x884C;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x7F13;&#x5B58;&#x547D;&#x4E2D;&#x7387;&#x624D;&#x80FD;&#x4E0A;&#x5347;&#x5230;&#x6700;&#x9AD8;&#x3002;</li>
</ul>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="https://coolshell.cn/articles/11609.html" target="_blank" rel="external">TCP &#x7684;&#x90A3;&#x4E9B;&#x4E8B;&#x513F;&#xFF08;&#x4E0B;&#xFF09;</a></li>
<li><a href="http://note.youdao.com/noteshare?id=6d985d9492109ec8c1f8b896a06381a3" target="_blank" rel="external">&#x7F51;&#x7EDC;&#x57FA;&#x7840;3-&#x4F20;&#x8F93;&#x5C42;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x4E0A;&amp;#x6587;&lt;a href=&quot;/2018/03/07/&amp;#x6D45;&amp;#x8C08;TCP&amp;#xFF08;1&amp;#xFF09;&amp;#xFF1A;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&amp;#x4E0E;&amp;#x91CD;&amp;#x4F20;&amp;#x673A;&amp;#x5236;/&quot;&gt;&amp;#x6D45;&amp;#x8C08;TCP&amp;#xFF08;1&amp;#xFF09;&amp;#xFF1A;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&amp;#x4E0E;&amp;#x91CD;&amp;#x4F20;&amp;#x673A;&amp;#x5236;&lt;/a&gt;&amp;#x4ECB;&amp;#x7ECD;&amp;#x4E86;TCP&amp;#x7684;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&amp;#x4E0E;&amp;#x91CD;&amp;#x4F20;&amp;#x673A;&amp;#x5236;&amp;#x3002;&amp;#x672C;&amp;#x6587;&amp;#x4ECB;&amp;#x7ECD;&lt;code&gt;&amp;#x6D41;&amp;#x91CF;&amp;#x63A7;&amp;#x5236;&lt;/code&gt;&amp;#xFF08;Flow Control&amp;#xFF0C;&amp;#x7B80;&amp;#x79F0;&amp;#x6D41;&amp;#x63A7;&amp;#xFF09;&amp;#x4E0E;&lt;code&gt;&amp;#x62E5;&amp;#x585E;&amp;#x63A7;&amp;#x5236;&lt;/code&gt;&amp;#xFF08;Congestion Control&amp;#xFF09;&amp;#x3002;TCP&amp;#x4F9D;&amp;#x6B64;&amp;#x4FDD;&amp;#x969C;&amp;#x7F51;&amp;#x7EDC;&amp;#x7684;&lt;code&gt;QOS&lt;/code&gt;&amp;#xFF08;Quality of Service&amp;#xFF09;&amp;#x3002;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#x672C;&amp;#x6587;&amp;#x5927;&amp;#x90E8;&amp;#x5206;&amp;#x5185;&amp;#x5BB9;&amp;#x57FA;&amp;#x4E8E;&lt;a href=&quot;https://coolshell.cn/articles/11609.html&quot;&gt;TCP &amp;#x7684;&amp;#x90A3;&amp;#x4E9B;&amp;#x4E8B;&amp;#x513F;&amp;#xFF08;&amp;#x4E0B;&amp;#xFF09;&lt;/a&gt;&amp;#x4FEE;&amp;#x6539;&amp;#x800C;&amp;#x6765;&amp;#xFF0C;&amp;#x90E8;&amp;#x5206;&amp;#x89C2;&amp;#x70B9;&amp;#x4E0E;&amp;#x539F;&amp;#x6587;&amp;#x4E0D;&amp;#x540C;&amp;#xFF0C;&amp;#x91CD;&amp;#x8981;&amp;#x5730;&amp;#x65B9;&amp;#x589E;&amp;#x52A0;&amp;#x4E86;&amp;#x89E3;&amp;#x91CA;&amp;#x3002;&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="网络" scheme="https://monkeysayhi.github.io/tags/%E7%BD%91%E7%BB%9C/"/>
    
      <category term="TCP" scheme="https://monkeysayhi.github.io/tags/TCP/"/>
    
  </entry>
  
  <entry>
    <title>浅谈TCP（1）：状态机与重传机制</title>
    <link href="https://monkeysayhi.github.io/2018/03/07/%E6%B5%85%E8%B0%88TCP%EF%BC%881%EF%BC%89%EF%BC%9A%E7%8A%B6%E6%80%81%E6%9C%BA%E4%B8%8E%E9%87%8D%E4%BC%A0%E6%9C%BA%E5%88%B6/"/>
    <id>https://monkeysayhi.github.io/2018/03/07/浅谈TCP（1）：状态机与重传机制/</id>
    <published>2018-03-07T01:28:56.000Z</published>
    <updated>2018-10-16T02:11:04.000Z</updated>
    
    <content type="html"><![CDATA[<p>TCP&#x534F;&#x8BAE;&#x6BD4;&#x8F83;&#x590D;&#x6742;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5206;&#x4E24;&#x7BC7;&#x6587;&#x7AE0;&#x6D45;&#x8981;&#x4ECB;&#x7ECD;TCP&#x4E2D;&#x7684;&#x4E00;&#x4E9B;&#x8981;&#x70B9;&#x3002;</p>
<p>&#x672C;&#x6587;&#x4ECB;&#x7ECD;TCP&#x7684;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;&#xFF0C;&#x4E0B;&#x6587;&#x8BB2;&#x89E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x4E0E;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x3002;</p>
<blockquote>
<p>&#x672C;&#x6587;&#x5927;&#x90E8;&#x5206;&#x5185;&#x5BB9;&#x57FA;&#x4E8E;<a href="https://coolshell.cn/articles/11564.html" target="_blank" rel="external">TCP &#x7684;&#x90A3;&#x4E9B;&#x4E8B;&#x513F;&#xFF08;&#x4E0A;&#xFF09;</a>&#x4FEE;&#x6539;&#x800C;&#x6765;&#xFF0C;&#x90E8;&#x5206;&#x89C2;&#x70B9;&#x4E0E;&#x539F;&#x6587;&#x4E0D;&#x540C;&#xFF0C;&#x91CD;&#x8981;&#x5730;&#x65B9;&#x589E;&#x52A0;&#x4E86;&#x89E3;&#x91CA;&#x3002;</p>
</blockquote>
<a id="more"></a>
<h1 id="&#x524D;&#x7F6E;&#x77E5;&#x8BC6;"><a href="#&#x524D;&#x7F6E;&#x77E5;&#x8BC6;" class="headerlink" title="&#x524D;&#x7F6E;&#x77E5;&#x8BC6;"></a>&#x524D;&#x7F6E;&#x77E5;&#x8BC6;</h1><h2 id="&#x4E00;&#x4E9B;&#x7F51;&#x7EDC;&#x57FA;&#x7840;"><a href="#&#x4E00;&#x4E9B;&#x7F51;&#x7EDC;&#x57FA;&#x7840;" class="headerlink" title="&#x4E00;&#x4E9B;&#x7F51;&#x7EDC;&#x57FA;&#x7840;"></a>&#x4E00;&#x4E9B;&#x7F51;&#x7EDC;&#x57FA;&#x7840;</h2><p>TCP&#x5728;&#x7F51;&#x7EDC;OSI&#x7684;&#x4E03;&#x5C42;&#x6A21;&#x578B;&#x4E2D;&#x7684;&#x7B2C;&#x56DB;&#x5C42;&#x2014;&#x2014;Transport&#x5C42;&#xFF0C;IP&#x5728;&#x7B2C;&#x4E09;&#x5C42;&#x2014;&#x2014;Network&#x5C42;&#xFF0C;ARP&#x5728;&#x7B2C;&#x4E8C;&#x5C42;&#x2014;&#x2014;Data Link&#x5C42;&#xFF0C;&#x5728;&#x7B2C;&#x4E8C;&#x5C42;&#x4E0A;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x6211;&#x4EEC;&#x53EB;Frame&#xFF0C;&#x5728;&#x7B2C;&#x4E09;&#x5C42;&#x4E0A;&#x7684;&#x6570;&#x636E;&#x53EB;Packet&#xFF0C;&#x7B2C;&#x56DB;&#x5C42;&#x7684;&#x6570;&#x636E;&#x53EB;Segment&#x3002;</p>
<p>&#x5E94;&#x7528;&#x5C42;&#x7684;&#x6570;&#x636E;&#x9996;&#x5148;&#x4F1A;&#x6253;&#x5230;TCP&#x7684;Segment&#x4E2D;&#xFF0C;&#x7136;&#x540E;TCP&#x7684;Segment&#x4F1A;&#x6253;&#x5230;IP&#x7684;Packet&#x4E2D;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x6253;&#x5230;&#x4EE5;&#x592A;&#x7F51;Ethernet&#x7684;Frame&#x4E2D;&#xFF0C;&#x4F20;&#x5230;&#x5BF9;&#x7AEF;&#x540E;&#xFF0C;&#x5404;&#x4E2A;&#x5C42;&#x89E3;&#x6790;&#x81EA;&#x5DF1;&#x7684;&#x534F;&#x8BAE;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x6570;&#x636E;&#x4EA4;&#x7ED9;&#x66F4;&#x9AD8;&#x5C42;&#x7684;&#x534F;&#x8BAE;&#x5904;&#x7406;&#x3002;</p>
<h2 id="TCP&#x5934;&#x683C;&#x5F0F;"><a href="#TCP&#x5934;&#x683C;&#x5F0F;" class="headerlink" title="TCP&#x5934;&#x683C;&#x5F0F;"></a>TCP&#x5934;&#x683C;&#x5F0F;</h2><p>&#x5728;&#x6B63;&#x5F0F;&#x8BA8;&#x8BBA;&#x4E4B;&#x524D;&#xFF0C;&#x5148;&#x6765;&#x770B;&#x4E00;&#x4E0B;TCP&#x5934;&#x7684;&#x683C;&#x5F0F;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/TCP&#x5934;&#x683C;&#x5F0F;-01.jpg" alt="TCP&#x5934;&#x683C;&#x5F0F;-01"></p>
<p>&#x6CE8;&#x610F;&#xFF1A;</p>
<ul>
<li>TCP&#x7684;&#x5305;&#x662F;&#x6CA1;&#x6709;IP&#x5730;&#x5740;&#x7684;&#xFF0C;&#x90A3;&#x662F;IP&#x5C42;&#x4E0A;&#x7684;&#x4E8B;&#x3002;&#x4F46;&#x662F;&#x6709;&#x6E90;&#x7AEF;&#x53E3;&#x548C;&#x76EE;&#x6807;&#x7AEF;&#x53E3;&#x3002;</li>
<li>&#x4E00;&#x4E2A;TCP&#x8FDE;&#x63A5;&#x9700;&#x8981;&#x56DB;&#x4E2A;&#x5143;&#x7EC4;&#x6765;&#x8868;&#x793A;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#xFF08;src_ip, src_port, dst_ip, dst_port&#xFF09;&#xFF08;&#x51C6;&#x786E;&#x8BF4;&#x662F;&#x4E94;&#x5143;&#x7EC4;&#xFF0C;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x662F;&#x534F;&#x8BAE;&#xFF0C;&#x4F46;&#x56E0;&#x4E3A;&#x8FD9;&#x91CC;&#x53EA;&#x662F;&#x8BF4;TCP&#x534F;&#x8BAE;&#xFF0C;&#x6240;&#x4EE5;&#xFF0C;&#x8FD9;&#x91CC;&#x6211;&#x53EA;&#x8BF4;&#x56DB;&#x5143;&#x7EC4;&#xFF09;&#x3002;</li>
<li>&#x6CE8;&#x610F;&#x4E0A;&#x56FE;&#x4E2D;&#x7684;&#x56DB;&#x4E2A;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x7684;&#x4E1C;&#x897F;&#xFF1A;<ul>
<li><code>Sequence Number</code>&#xFF0C;&#x5305;&#x7684;&#x5E8F;&#x53F7;Seq&#xFF0C;<em>&#x7528;&#x4E8E;&#x89E3;&#x51B3;&#x7F51;&#x7EDC;&#x5305;&#x4E71;&#x5E8F;</em>&#xFF08;reordering&#xFF09;&#x3002;</li>
<li><code>Acknowledgement Number</code>&#xFF0C;Ack&#x7528;&#x4E8E;&#x786E;&#x8BA4;&#x6536;&#x5230;Seq&#xFF08;Ack = Seq + 1&#xFF0C;&#x8868;&#x793A;&#x6536;&#x5230;&#x4E86;Seq&#x53CA;Seq&#x4E4B;&#x524D;&#x7684;&#x6570;&#x636E;&#x5305;&#xFF0C;&#x671F;&#x5F85;Seq + 1&#xFF09;&#xFF0C;<em>&#x7528;&#x4E8E;&#x89E3;&#x51B3;&#x4E22;&#x5305;</em>&#x3002;</li>
<li><code>Window</code>&#xFF0C;&#x53C8;&#x53EB;<code>Advertised Window</code>&#xFF0C;&#x53EF;&#x4EE5;&#x8FD1;&#x4F3C;&#x7406;&#x89E3;&#x4E3A;<code>&#x6ED1;&#x52A8;&#x7A97;&#x53E3;</code>&#xFF08;Sliding Window&#xFF09;&#x7684;&#x5927;&#x5C0F;&#xFF0C;<em>&#x7528;&#x4E8E;&#x6D41;&#x63A7;</em>&#x3002;</li>
<li><code>TCP Flag</code> &#xFF0C;&#x533A;&#x5206;&#x5305;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x5982;SYN&#x5305;&#x3001;FIN&#x5305;&#x3001;RST&#x5305;&#x7B49;&#xFF0C;&#x4E3B;&#x8981;<em>&#x7528;&#x4E8E;&#x64CD;&#x63A7;TCP&#x72B6;&#x6001;&#x673A;</em>&#x3002;</li>
</ul>
</li>
</ul>
<p>&#x5176;&#x4ED6;&#x5B57;&#x6BB5;&#x53C2;&#x8003;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/TCP&#x5934;&#x683C;&#x5F0F;-02.jpg" alt="TCP&#x5934;&#x683C;&#x5F0F;-02"></p>
<h1 id="TCP&#x7684;&#x72B6;&#x6001;&#x673A;"><a href="#TCP&#x7684;&#x72B6;&#x6001;&#x673A;" class="headerlink" title="TCP&#x7684;&#x72B6;&#x6001;&#x673A;"></a>TCP&#x7684;&#x72B6;&#x6001;&#x673A;</h1><p>&#x5176;&#x5B9E;&#xFF0C;<strong>&#x7F51;&#x7EDC;&#x4F20;&#x8F93;&#x662F;&#x6CA1;&#x6709;&#x8FDE;&#x63A5;&#x7684;&#x2014;&#x2014;TCP&#x6240;&#x8C13;&#x7684;&#x201C;&#x8FDE;&#x63A5;&#x201D;&#xFF0C;&#x5176;&#x5B9E;&#x53EA;&#x4E0D;&#x8FC7;&#x662F;&#x5728;&#x901A;&#x8BAF;&#x7684;&#x53CC;&#x65B9;&#x7EF4;&#x62A4;&#x4E00;&#x4E2A;&#x201C;&#x8FDE;&#x63A5;&#x72B6;&#x6001;&#x201D;</strong>&#xFF0C;&#x8BA9;&#x5B83;&#x770B;&#x4E0A;&#x53BB;&#x597D;&#x50CF;&#x6709;&#x8FDE;&#x63A5;&#x4E00;&#x6837;&#x3002;&#x6240;&#x4EE5;&#xFF0C;TCP&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x662F;<strong>&#x7B80;&#x5316;</strong>&#x7684;&#x201C;TCP&#x534F;&#x8BAE;&#x72B6;&#x6001;&#x673A;&#x201D; &#x548C; &#x201C;TCP&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x8FDE;&#x63A5; + &#x4F20;&#x6570;&#x636E; + &#x56DB;&#x6B21;&#x6325;&#x624B;&#x65AD;&#x8FDE;&#x63A5;&#x201D; &#x7684;&#x5BF9;&#x7167;&#x56FE;&#xFF0C;&#x4E24;&#x5F20;&#x56FE;&#x672C;&#x8D28;&#x4E0A;&#x90FD;&#x63CF;&#x8FF0;&#x4E86;TCP&#x534F;&#x8BAE;&#x72B6;&#x6001;&#x673A;&#xFF0C;&#x4F46;&#x573A;&#x666F;&#x7565;&#x6709;&#x4E0D;&#x540C;&#x3002;<strong>&#x8FD9;&#x4E24;&#x4E2A;&#x56FE;&#x975E;&#x5E38;&#x91CD;&#x8981;&#xFF0C;&#x4E00;&#x5B9A;&#x8981;&#x8BB0;&#x7262;</strong>&#x3002;</p>
<p>TCP&#x534F;&#x8BAE;&#x72B6;&#x6001;&#x673A;&#xFF0C;&#x4E0D;&#x533A;&#x5206;client&#x3001;server&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/TCP&#x534F;&#x8BAE;&#x72B6;&#x6001;&#x673A;.png" alt="TCP&#x534F;&#x8BAE;&#x72B6;&#x6001;&#x673A;"></p>
<p>&#x4E0B;&#x56FE;&#x662F;&#x7ECF;&#x5178;&#x7684;&#x201C;TCP&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x8FDE;&#x63A5; + &#x4F20;&#x6570;&#x636E; + &#x56DB;&#x6B21;&#x6325;&#x624B;&#x65AD;&#x8FDE;&#x63A5;&#x201D;&#xFF0C;client&#x53D1;&#x8D77;&#x63E1;&#x624B;&#xFF0C;&#x5411;server&#x4F20;&#x8F93;&#x6570;&#x636E;&#xFF08;server&#x4E0D;&#x5411;client&#x4F20;&#xFF09;&#xFF0C;&#x6700;&#x540E;&#x53D1;&#x8D77;&#x6325;&#x624B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/TCP&#x63E1;&#x624B;&#x3001;&#x4F20;&#x8F93;&#x3001;&#x6325;&#x624B;.jpg" alt="TCP&#x63E1;&#x624B;&#x3001;&#x4F20;&#x8F93;&#x3001;&#x6325;&#x624B;"></p>
<h2 id="&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x4E0E;&#x56DB;&#x6B21;&#x6325;&#x624B;"><a href="#&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x4E0E;&#x56DB;&#x6B21;&#x6325;&#x624B;" class="headerlink" title="&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x4E0E;&#x56DB;&#x6B21;&#x6325;&#x624B;"></a>&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x4E0E;&#x56DB;&#x6B21;&#x6325;&#x624B;</h2><p>&#x5F88;&#x591A;&#x4EBA;&#x4F1A;&#x95EE;&#xFF0C;<strong>&#x4E3A;&#x4EC0;&#x4E48;&#x5EFA;&#x8FDE;&#x63A5;&#x8981;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#xFF0C;&#x65AD;&#x8FDE;&#x63A5;&#x9700;&#x8981;&#x56DB;&#x6B21;&#x6325;&#x624B;&#xFF1F;</strong></p>
<h3 id="&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x8FDE;&#x63A5;"><a href="#&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x8FDE;&#x63A5;" class="headerlink" title="&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x8FDE;&#x63A5;"></a>&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x8FDE;&#x63A5;</h3><p>&#x4E3B;&#x8981;&#x662F;&#x8981;<em>&#x521D;&#x59CB;&#x5316;Sequence Number &#x7684;&#x521D;&#x59CB;&#x503C;</em>&#x3002;&#x53CC;&#x65B9;&#x9700;&#x8981;&#x53D1;&#x9001;&#x81EA;&#x5DF1;&#x7684;ISN&#xFF08;&#x521D;&#x59CB;&#x5316;&#x5E8F;&#x5217;&#x53F7;&#xFF0C;Inital Sequence Number&#xFF09;&#x7ED9;&#x5BF9;&#x65B9;&#xFF0C;&#x5E76;&#x6536;&#x5230;&#x5BF9;&#x65B9;&#x7684;&#x56DE;&#x590D;&#x2014;&#x2014;<em>&#x6700;&#x7B80;&#x5355;&#x7684;&#x65B9;&#x5F0F;&#x4E5F;&#x662F;&#x4E24;&#x4E2A;&#x4E00;&#x6765;&#x4E00;&#x56DE;&#xFF0C;&#x56DB;&#x6B21;&#x63E1;&#x624B;</em>&#xFF0C;&#x4F46;&#x6B64;&#x5904;&#x8FDB;&#x884C;&#x4E86;<em>&#x4F18;&#x5316;&#xFF0C;&#x5C06;server&#x7AEF;&#x56DE;&#x590D;&#x7684;ACK&#x540C;server&#x7AEF;&#x81EA;&#x5DF1;&#x7684;SYN&#x5408;&#x5E76;&#x5728;&#x4E00;&#x4E2A;&#x62A5;&#x6587;&#x4E2D;&#x53D1;&#x9001;&#x7ED9;client&#xFF0C;&#x6240;&#x4EE5;&#x51CF;&#x5C11;&#x4E3A;&#x4E09;&#x6B21;</em>&#x3002;</p>
<blockquote>
<p>&#x901A;&#x4FE1;&#x7684;&#x53CC;&#x65B9;&#x8981;&#x540C;&#x6B65;&#x5BF9;&#x65B9;ISN&#x2014;&#x2014;&#x6240;&#x4EE5;&#x53EB;SYN&#xFF08;&#x5168;&#x79F0;Synchronize Sequence Numbers&#xFF09;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x4E0A;&#x56FE;&#x4E2D;&#x7684; x &#x548C; y&#x3002;&#x8FD9;&#x4E2A;&#x53F7;&#x5728;&#x4EE5;&#x540E;&#x7684;&#x6570;&#x636E;&#x901A;&#x4FE1;&#x4E2D;&#xFF0C;&#x5728;client&#x7AEF;&#x6309;&#x53D1;&#x9001;&#x987A;&#x5E8F;&#x9012;&#x589E;&#xFF0C;&#x5728;server&#x7AEF;&#x6309;&#x9012;&#x589E;&#x987A;&#x5E8F;&#x91CD;&#x65B0;&#x7EC4;&#x7EC7;&#xFF0C;&#x4EE5;&#x4FDD;&#x8BC1;&#x5E94;&#x7528;&#x5C42;&#x63A5;&#x6536;&#x5230;&#x7684;&#x6570;&#x636E;&#x4E0D;&#x4F1A;&#x56E0;&#x4E3A;&#x7F51;&#x7EDC;&#x95EE;&#x9898;&#x4E71;&#x5E8F;&#x3002;</p>
</blockquote>
<h3 id="&#x56DB;&#x6B21;&#x6325;&#x624B;&#x65AD;&#x8FDE;&#x63A5;"><a href="#&#x56DB;&#x6B21;&#x6325;&#x624B;&#x65AD;&#x8FDE;&#x63A5;" class="headerlink" title="&#x56DB;&#x6B21;&#x6325;&#x624B;&#x65AD;&#x8FDE;&#x63A5;"></a>&#x56DB;&#x6B21;&#x6325;&#x624B;&#x65AD;&#x8FDE;&#x63A5;</h3><p>&#x53C2;&#x7167;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5176;&#x5B9E;&#x662F;<em>&#x53CC;&#x65B9;&#x5404;&#x81EA;&#x5173;&#x95ED;&#x8D44;&#x6E90;&#x8FDB;&#x884C;2&#x6B21;&#x6325;&#x624B;</em>&#x3002;&#x63E1;&#x624B;&#x7684;&#x76EE;&#x7684;&#x662F;&#x540C;&#x6B65;&#x53CC;&#x65B9;&#x7684;ISN&#xFF0C;&#x4E0D;&#x662F;&#x8017;&#x65F6;&#x64CD;&#x4F5C;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x201C;<code>&#x5C06;server&#x7AEF;&#x56DE;&#x590D;&#x7684;ACK&#x540C;server&#x7AEF;&#x81EA;&#x5DF1;&#x7684;SYN&#x5408;&#x5E76;&#x5728;&#x4E00;&#x4E2A;&#x62A5;&#x6587;&#x4E2D;&#x53D1;&#x9001;&#x7ED9;client</code>&#x201D;&#xFF1B;&#x4F46;&#x6325;&#x624B;&#x8981;&#x56DE;&#x6536;&#x5927;&#x91CF;&#x8D44;&#x6E90;&#xFF0C;&#x662F;&#x8017;&#x65F6;&#x64CD;&#x4F5C;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x4E0D;&#x80FD;&#x5F3A;&#x5236;&#x201C;<code>&#x5C06;server&#x7AEF;&#x56DE;&#x590D;&#x7684;ACK&#x540C;server&#x7AEF;&#x81EA;&#x5DF1;&#x7684;FIN&#x5408;&#x5E76;&#x5728;&#x4E00;&#x4E2A;&#x62A5;&#x6587;&#x4E2D;&#x53D1;&#x9001;&#x7ED9;client</code>&#x201D;&#xFF0C;&#x6240;&#x4EE5;&#x901A;&#x5E38;&#x8BA4;&#x4E3A;&#x6325;&#x624B;&#x9700;&#x8981;&#x56DB;&#x6B21;&#x3002;</p>
<p>&#x5BF9;&#x4E8E;&#x6325;&#x624B;&#xFF0C;&#x56E0;&#x4E3A;TCP&#x662F;&#x5168;&#x53CC;&#x5DE5;&#x7684;&#xFF0C;client&#x4E0E;server&#x90FD;&#x5360;&#x7528;&#x5404;&#x81EA;&#x7684;&#x8D44;&#x6E90;&#x53D1;&#x9001;segment&#xFF08;&#x540C;&#x4E00;&#x901A;&#x9053;&#xFF0C;&#x540C;&#x65F6;&#x53CC;&#x5411;&#x4F20;&#x8F93;seq&#x548C;ack&#xFF09;&#xFF0C;&#x6240;&#x4EE5;&#xFF0C;<strong>&#x53CC;&#x65B9;&#x90FD;&#x9700;&#x8981;&#x5173;&#x95ED;&#x81EA;&#x5DF1;&#x7684;&#x8D44;&#x6E90;&#xFF08;&#x5411;&#x5BF9;&#x65B9;&#x53D1;&#x9001;FIN&#xFF09;&#x5E76;&#x786E;&#x8BA4;&#x5BF9;&#x65B9;&#x8D44;&#x6E90;&#x5DF2;&#x5173;&#x95ED;&#xFF08;&#x56DE;&#x590D;&#x5BF9;&#x65B9;Ack&#xFF09;</strong>&#xFF1B;&#x800C;&#x53CC;&#x65B9;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x4E3B;&#x52A8;&#x5173;&#x95ED;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x7531;&#x4E00;&#x65B9;&#x4E3B;&#x52A8;&#x5173;&#x95ED;&#x5E26;&#x52A8;&#x53E6;&#x4E00;&#x65B9;&#x88AB;&#x52A8;&#x5173;&#x95ED;&#x3002;&#x53EA;&#x4E0D;&#x8FC7;&#xFF0C;&#x901A;&#x5E38;&#x4EE5;&#x4E00;&#x65B9;&#x4E3B;&#x52A8;&#x53E6;&#x4E00;&#x65B9;&#x88AB;&#x52A8;&#x4E3E;&#x4F8B;&#xFF08;&#x5982;&#x56FE;&#xFF0C;client&#x4E3B;&#x52A8;server&#x88AB;&#x52A8;&#xFF09;&#xFF0C;&#x6240;&#x4EE5;&#x770B;&#x4E0A;&#x53BB;&#x662F;&#x6240;&#x8C13;&#x7684;4&#x6B21;&#x6325;&#x624B;&#x3002;</p>
<p>&#x5982;&#x679C;&#x4E24;&#x8FB9;&#x540C;&#x65F6;&#x4E3B;&#x52A8;&#x65AD;&#x8FDE;&#x63A5;&#xFF0C;&#x90A3;&#x4E48;&#x53CC;&#x65B9;&#x90FD;&#x4F1A;&#x8FDB;&#x5165;<code>CLOSING</code>&#x72B6;&#x6001;&#xFF0C;&#x7136;&#x540E;&#x5230;&#x8FBE;<code>TIME_WAIT</code>&#x72B6;&#x6001;&#xFF0C;&#x6700;&#x540E;&#x8D85;&#x65F6;&#x8F6C;&#x5230;<code>CLOSED</code>&#x72B6;&#x6001;&#x3002;&#x4E0B;&#x56FE;&#x662F;&#x53CC;&#x65B9;&#x540C;&#x65F6;&#x4E3B;&#x52A8;&#x65AD;&#x8FDE;&#x63A5;&#x7684;&#x793A;&#x610F;&#x56FE;&#xFF08;&#x5BF9;&#x5E94;TCP&#x72B6;&#x6001;&#x673A;&#x4E2D;&#x7684;Simultaneous Close&#x5206;&#x652F;&#xFF09;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/&#x53CC;&#x65B9;&#x540C;&#x65F6;&#x5173;&#x95ED;.png" alt="&#x53CC;&#x65B9;&#x540C;&#x65F6;&#x5173;&#x95ED;"></p>
<h2 id="&#x63E1;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;"><a href="#&#x63E1;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;" class="headerlink" title="&#x63E1;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;"></a>&#x63E1;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;</h2><h3 id="&#x5EFA;&#x8FDE;&#x63A5;&#x65F6;SYN&#x8D85;&#x65F6;"><a href="#&#x5EFA;&#x8FDE;&#x63A5;&#x65F6;SYN&#x8D85;&#x65F6;" class="headerlink" title="&#x5EFA;&#x8FDE;&#x63A5;&#x65F6;SYN&#x8D85;&#x65F6;"></a>&#x5EFA;&#x8FDE;&#x63A5;&#x65F6;SYN&#x8D85;&#x65F6;</h3><p>server&#x6536;&#x5230;client&#x53D1;&#x7684;SYN&#x5E76;&#x56DE;&#x590D;Ack(SYN)&#xFF08;&#x6B64;&#x5904;&#x79F0;&#x4E3A;Ack1&#xFF09;&#x540E;&#xFF0C;&#x5982;&#x679C;client&#x6389;&#x7EBF;&#x4E86;&#xFF08;&#x6216;&#x7F51;&#x7EDC;&#x8D85;&#x65F6;&#xFF09;&#xFF0C;&#x90A3;&#x4E48;server&#x5C06;&#x65E0;&#x6CD5;&#x6536;&#x5230;client&#x56DE;&#x590D;&#x7684;Ack(Ack(SYN))&#xFF08;&#x6B64;&#x5904;&#x79F0;&#x4E3A;Ack2&#xFF09;&#xFF0C;&#x8FDE;&#x63A5;&#x5904;&#x4E8E;&#x4E00;&#x4E2A;<strong>&#x4E2D;&#x95F4;&#x72B6;&#x6001;</strong>&#xFF08;&#x975E;&#x6210;&#x529F;&#x975E;&#x5931;&#x8D25;&#xFF09;&#x3002;</p>
<p><em>&#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x4E2D;&#x95F4;&#x72B6;&#x6001;&#x7684;&#x95EE;&#x9898;&#xFF0C;server&#x5982;&#x679C;&#x5728;&#x4E00;&#x5B9A;&#x65F6;&#x95F4;&#x5185;&#x6CA1;&#x6709;&#x6536;&#x5230;Ack2&#xFF0C;&#x4F1A;&#x91CD;&#x53D1;Ack1</em>&#xFF08;&#x4E0D;&#x540C;&#x4E8E;&#x6570;&#x636E;&#x4F20;&#x8F93;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x91CD;&#x4F20;&#x673A;&#x5236;&#xFF09;&#x3002;Linux&#x4E0B;&#xFF0C;&#x9ED8;&#x8BA4;&#x91CD;&#x8BD5;5&#x6B21;&#xFF0C;&#x52A0;&#x4E0A;&#x7B2C;&#x4E00;&#x6B21;&#x6700;&#x591A;&#x5171;&#x53D1;&#x9001;6&#x6B21;&#xFF1B;&#x91CD;&#x8BD5;&#x95F4;&#x9694;&#x4ECE;1s&#x5F00;&#x59CB;&#x7FFB;&#x500D;&#x589E;&#x957F;&#xFF08;&#x4E00;&#x79CD;&#x6307;&#x6570;&#x56DE;&#x9000;&#x7B56;&#x7565;&#xFF0C;Exponential Backoff&#xFF09;&#xFF0C;5&#x6B21;&#x7684;&#x91CD;&#x8BD5;&#x65F6;&#x95F4;&#x5206;&#x522B;&#x4E3A;1s, 2s, 4s, 8s, 16s&#xFF0C;&#x7B2C;5&#x6B21;&#x53D1;&#x51FA;&#x540E;&#x8FD8;&#x8981;&#x7B49;&#x5F85;32s&#x624D;&#x80FD;&#x5224;&#x65AD;&#x7B2C;5&#x6B21;&#x4E5F;&#x8D85;&#x65F6;&#x3002;&#x6240;&#x4EE5;&#xFF0C;<em>&#x81F3;&#x591A;&#x5171;&#x53D1;&#x9001;6&#x6B21;&#xFF0C;&#x7ECF;&#x8FC7;1s + 2s + 4s+ 8s+ 16s + 32s = 2^6 -1 = 63s&#xFF0C;TCP&#x624D;&#x4F1A;&#x8BA4;&#x4E3A;SYN&#x8D85;&#x65F6;&#x65AD;&#x5F00;&#x8FD9;&#x4E2A;&#x8FDE;&#x63A5;</em>&#x3002;</p>
<h4 id="SYN-Flood&#x653B;&#x51FB;"><a href="#SYN-Flood&#x653B;&#x51FB;" class="headerlink" title="SYN Flood&#x653B;&#x51FB;"></a>SYN Flood&#x653B;&#x51FB;</h4><p>&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x5EFA;&#x8FDE;&#x63A5;&#x65F6;&#x7684;SYN&#x8D85;&#x65F6;&#x673A;&#x5236;&#x53D1;&#x8D77;<code>SYN Flood&#x653B;&#x51FB;</code>&#x2014;&#x2014;&#x7ED9;server&#x53D1;&#x4E00;&#x4E2A;SYN&#x5C31;&#x7ACB;&#x5373;&#x4E0B;&#x7EBF;&#xFF0C;&#x4E8E;&#x662F;&#x670D;&#x52A1;&#x5668;&#x9ED8;&#x8BA4;&#x9700;&#x8981;&#x5360;&#x7528;&#x8D44;&#x6E90;63s&#x624D;&#x4F1A;&#x65AD;&#x5F00;&#x8FDE;&#x63A5;&#x3002;&#x53D1;SYN&#x7684;&#x901F;&#x5EA6;&#x662F;&#x5F88;&#x5FEB;&#x7684;&#xFF0C;&#x8FD9;&#x6837;&#xFF0C;&#x653B;&#x51FB;&#x8005;&#x5F88;&#x5BB9;&#x6613;&#x5C06;server&#x7684;SYN&#x961F;&#x5217;&#x8D44;&#x6E90;&#x8017;&#x5C3D;&#xFF0C;&#x4F7F;server&#x65E0;&#x6CD5;&#x5904;&#x7406;&#x6B63;&#x5E38;&#x7684;&#x65B0;&#x8FDE;&#x63A5;&#x3002;</p>
<p>&#x9488;&#x5BF9;&#x8BE5;&#x95EE;&#x9898;&#xFF0C;Linux&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;<code>tcp_syncookies</code>&#x53C2;&#x6570;&#x89E3;&#x51B3;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x2014;&#x2014;<em>&#x5F53;SYN&#x961F;&#x5217;&#x6EE1;&#x4E86;&#x540E;&#xFF0C;TCP&#x4F1A;&#x901A;&#x8FC7;&#x6E90;&#x5730;&#x5740;&#x7AEF;&#x53E3;&#x3001;&#x76EE;&#x6807;&#x5730;&#x5740;&#x7AEF;&#x53E3;&#x548C;&#x65F6;&#x95F4;&#x6233;&#x6784;&#x9020;&#x4E00;&#x4E2A;&#x7279;&#x522B;&#x7684;Sequence Number&#x53D1;&#x56DE;&#x53BB;&#xFF0C;&#x79F0;&#x4E3A;SYN Cookie&#xFF0C;&#x5982;&#x679C;&#x662F;&#x653B;&#x51FB;&#x8005;&#x5219;&#x4E0D;&#x4F1A;&#x6709;&#x54CD;&#x5E94;&#xFF0C;&#x5982;&#x679C;&#x662F;&#x6B63;&#x5E38;&#x8FDE;&#x63A5;&#xFF0C;&#x5219;&#x4F1A;&#x628A;&#x8FD9;&#x4E2A;SYN Cookie&#x53D1;&#x56DE;&#x6765;&#xFF0C;&#x7136;&#x540E;server&#x7AEF;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;SYN Cookie&#x5EFA;&#x8FDE;&#x63A5;</em>&#xFF08;&#x5373;&#x4F7F;&#x4F60;&#x4E0D;&#x5728;SYN&#x961F;&#x5217;&#x4E2D;&#xFF09;&#x3002;&#x81F3;&#x4E8E;SYN&#x961F;&#x5217;&#x4E2D;&#x7684;&#x8FDE;&#x63A5;&#xFF0C;&#x5219;&#x4E0D;&#x505A;&#x5904;&#x7406;&#x76F4;&#x81F3;&#x8D85;&#x65F6;&#x5173;&#x95ED;&#x3002;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;<strong>&#x4E0D;&#x8981;&#x7528;<code>tcp_syncookies</code>&#x53C2;&#x6570;&#x6765;&#x5904;&#x7406;&#x6B63;&#x5E38;&#x7684;&#x5927;&#x8D1F;&#x8F7D;&#x8FDE;&#x63A5;&#x60C5;&#x51B5;</strong>&#xFF0C;&#x56E0;&#x4E3A;SYN Cookie&#x672C;&#x8D28;&#x4E0A;&#x4E5F;&#x7834;&#x574F;&#x4E86;&#x5EFA;&#x8FDE;&#x63A5;&#x7684;SYN&#x8D85;&#x65F6;&#x673A;&#x5236;&#xFF0C;&#x662F;&#x59A5;&#x534F;&#x7248;&#x7684;TCP&#x534F;&#x8BAE;&#x3002;</p>
<p>&#x5BF9;&#x4E8E;&#x6B63;&#x5E38;&#x7684;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;&#xFF0C;&#x6709;&#x53E6;&#x5916;&#x4E09;&#x4E2A;&#x53C2;&#x6570;&#x53EF;&#x4F9B;&#x9009;&#x62E9;&#xFF1A;</p>
<ul>
<li><code>tcp_synack_retries</code>&#x53C2;&#x6570;&#x8BBE;&#x7F6E;SYN&#x8D85;&#x65F6;&#x91CD;&#x8BD5;&#x6B21;&#x6570;</li>
<li><code>tcp_max_syn_backlog</code>&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x6700;&#x5927;SYN&#x8FDE;&#x63A5;&#x6570;&#xFF08;SYN&#x961F;&#x5217;&#x5BB9;&#x91CF;&#xFF09;</li>
<li><code>tcp_abort_on_overflow</code>&#x53C2;&#x6570;&#x4F7F;SYN&#x8BF7;&#x6C42;&#x5904;&#x7406;&#x4E0D;&#x8FC7;&#x6765;&#x7684;&#x65F6;&#x5019;&#x62D2;&#x7EDD;&#x8FDE;&#x63A5;</li>
</ul>
<h3 id="ISN&#x7684;&#x540C;&#x6B65;"><a href="#ISN&#x7684;&#x540C;&#x6B65;" class="headerlink" title="ISN&#x7684;&#x540C;&#x6B65;"></a>ISN&#x7684;&#x540C;&#x6B65;</h3><ul>
<li>&#x9996;&#x5148;&#xFF0C;<strong>&#x4E0D;&#x80FD;&#x9009;&#x62E9;&#x9759;&#x6001;&#x7684;ISN</strong>&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5982;&#x679C;&#x8FDE;&#x63A5;&#x5EFA;&#x597D;&#x540E;&#x59CB;&#x7EC8;&#x7528;1&#x6765;&#x505A;ISN&#xFF0C;&#x5982;&#x679C;client&#x53D1;&#x4E86;30&#x4E2A;segment&#xFF08;&#x5047;&#x8BBE;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x4E00;&#x4E2A;segment&#xFF09;&#x8FC7;&#x53BB;&#xFF0C;&#x4F46;&#x662F;&#x7F51;&#x7EDC;&#x65AD;&#x4E86;&#xFF0C;&#x4E8E;&#x662F; client&#x91CD;&#x8FDE;&#xFF0C;&#x53C8;&#x7528;&#x4E86;1&#x505A;ISN&#xFF0C;&#x4F46;&#x662F;&#x65E7;&#x8FDE;&#x63A5;&#x7684;&#x90A3;&#x4E9B;segment&#xFF08;&#x79F0;&#x4E3A;&#x201C;&#x8FF7;&#x9014;&#x7684;&#x91CD;&#x590D;&#x5206;&#x7EC4;&#x201D;&#xFF09;&#x5230;&#x4E86;&#xFF0C;&#x7531;&#x4E8E;&#x533A;&#x5206;&#x8FDE;&#x63A5;&#x7684;&#x4E94;&#x5143;&#x7EC4;&#x76F8;&#x540C;&#xFF08;&#x79F0;&#x8BE5;&#x65B0;&#x8FDE;&#x63A5;&#x4E3A;&#x65E7;&#x8FDE;&#x63A5;&#x7684;&#x201C;&#x5316;&#x8EAB;&#x201D;&#xFF09;&#xFF0C;server&#x4F1A;&#x628A;&#x5B83;&#x4EEC;&#x5F53;&#x505A;&#x65B0;&#x8FDE;&#x63A5;&#x4E2D;&#x7684;segment&#x3002;</li>
<li>&#x7136;&#x540E;&#xFF0C;&#x4ECE;&#x4E0A;&#x4F8B;&#x8FD8;&#x80FD;&#x591F;&#x5F97;&#x77E5;&#xFF0C;<strong>&#x9700;&#x8981;&#x4F7F;ISN&#x968F;&#x65F6;&#x949F;&#x52A8;&#x6001;&#x589E;&#x957F;</strong>&#xFF0C;&#x4EE5;&#x4FDD;&#x8BC1;&#x65B0;&#x8FDE;&#x63A5;&#x7684;ISN&#x5927;&#x4E8E;&#x65E7;&#x8FDE;&#x63A5;&#x3002;</li>
<li>&#x6700;&#x540E;&#xFF0C;<strong>&#x4ECE;&#x5B89;&#x5168;&#x7B49;&#x89D2;&#x5EA6;&#x8003;&#x8651;&#xFF0C;&#x4E5F;&#x4E0D;&#x80FD;&#x4F7F;ISN&#x7684;&#x589E;&#x957F;&#x5448;&#x73B0;&#x89C4;&#x5F8B;&#x6027;</strong>&#xFF08;&#x5982;&#x7B80;&#x5355;&#x968F;&#x65F6;&#x949F;&#x6B63;&#x6BD4;&#x4F8B;&#x589E;&#x957F;&#xFF09;&#x3002;&#x8FD9;&#x5F88;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#xFF0C;&#x5982;&#x679C;&#x589E;&#x957F;&#x89C4;&#x5F8B;&#x8FC7;&#x4E8E;&#x7B80;&#x5355;&#xFF0C;&#x5219;&#x5F88;&#x5BB9;&#x4F2A;&#x9020;ISN&#x5BF9;&#x7F51;&#x7EDC;&#x4E24;&#x7AEF;&#x53D1;&#x8D77;&#x653B;&#x51FB;&#x3002;</li>
</ul>
<p>&#x6700;&#x7EC8;&#xFF0C;&#x8BBE;&#x8BA1;&#x4E86;&#x591A;&#x79CD;ISN&#x589E;&#x957F;&#x7B97;&#x6CD5;&#xFF0C;&#x666E;&#x904D;<em>&#x4F7F;ISN&#x968F;&#x65F6;&#x949F;&#x52A8;&#x6001;&#x589E;&#x957F;&#xFF0C;&#x5E76;&#x5177;&#x6709;&#x4E00;&#x5B9A;&#x7684;&#x968F;&#x673A;&#x6027;</em>&#x3002;RFC793&#x4E2D;&#x63CF;&#x8FF0;&#x4E86;&#x4E00;&#x79CD;&#x7B80;&#x5355;&#x7684;ISN&#x589E;&#x957F;&#x7B97;&#x6CD5;&#xFF1A;ISN&#x4F1A;&#x548C;&#x4E00;&#x4E2A;&#x5047;&#x7684;&#x65F6;&#x949F;&#x7ED1;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x949F;&#x4F1A;&#x5728;&#x6BCF;4&#x5FAE;&#x79D2;&#x5BF9;ISN&#x505A;&#x52A0;&#x4E00;&#x64CD;&#x4F5C;&#xFF0C;&#x76F4;&#x5230;&#x8D85;&#x8FC7;2^32&#xFF0C;&#x53C8;&#x4ECE;0&#x5F00;&#x59CB;&#x3002;&#x8FD9;&#x6837;&#xFF0C;&#x4E00;&#x4E2A;ISN&#x7684;&#x5468;&#x671F;&#x5927;&#x7EA6;&#x662F;4.55&#xFF08;<font color="red"><strong>&#x6211;&#x7B97;&#x7684;4.77&#xFF1F;&#xFF1F;?</strong></font>&#xFF09;&#x4E2A;&#x5C0F;&#x65F6;&#x3002;&#x5B9A;&#x4E49;segment&#x5728;&#x7F51;&#x7EDC;&#x4E0A;&#x7684;&#x6700;&#x5927;&#x5B58;&#x6D3B;&#x65F6;&#x95F4;&#x4E3A;MSL&#xFF08;Maximum Segment Lifetime&#xFF09;&#xFF0C;&#x7F51;&#x7EDC;&#x4E2D;&#x5B58;&#x6D3B;&#x65F6;&#x95F4;&#x8D85;&#x8FC7;MSL&#x7684;&#x5206;&#x7EC4;&#x5C06;&#x88AB;&#x4E22;&#x5F03;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x5982;&#x679C;&#x4F7F;&#x7528;RFC793&#x4E2D;&#x7684;ISN&#x589E;&#x957F;&#x7B97;&#x6CD5;&#xFF0C;&#x5219;MSL&#x7684;&#x503C;&#x5FC5;&#x987B;&#x5C0F;&#x4E8E;4.55&#x5C0F;&#x65F6;&#xFF0C;&#x4EE5;&#x4FDD;&#x8BC1;&#x4E0D;&#x4F1A;&#x5728;&#x76F8;&#x90BB;&#x7684;&#x8FDE;&#x63A5;&#x4E2D;&#x91CD;&#x7528;ISN&#xFF08;<code>TIME_WAIT</code>&#x4E5F;&#x6709;&#x8BE5;&#x4F5C;&#x7528;&#xFF09;&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x8FD9;&#x95F4;&#x63A5;&#x9650;&#x5236;&#x4E86;&#x7F51;&#x7EDC;&#x7684;&#x5927;&#x5C0F;&#xFF08;&#x5F53;&#x7136;&#xFF0C;4.55&#x5C0F;&#x65F6;&#x7684;MSL&#x5DF2;&#x7ECF;&#x80FD;&#x6784;&#x9020;&#x975E;&#x5E38;&#x5927;&#x7684;&#x7F51;&#x7EDC;&#x4E86;&#xFF09;&#x3002;</p>
<blockquote>
<p>MSL&#x5E94;&#x5927;&#x4E8E;IP&#x534F;&#x8BAE;TTL&#x6362;&#x7B97;&#x7684;&#x65F6;&#x95F4;&#xFF0C;RFC793&#x5EFA;&#x8BAE;MSL&#x8BBE;&#x7F6E;&#x4E3A;2&#x5206;&#x949F;&#xFF0C;Linux&#x9075;&#x5FAA;&#x4F2F;&#x514B;&#x5229;&#x4E60;&#x60EF;&#x8BBE;&#x7F6E;&#x4E3A;30s&#x3002;</p>
</blockquote>
<h2 id="&#x6325;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;"><a href="#&#x6325;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;" class="headerlink" title="&#x6325;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;"></a>&#x6325;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x95EE;&#x9898;</h2><h3 id="&#x5173;&#x4E8E;TIME-WAIT"><a href="#&#x5173;&#x4E8E;TIME-WAIT" class="headerlink" title="&#x5173;&#x4E8E;TIME_WAIT"></a>&#x5173;&#x4E8E;TIME_WAIT</h3><h4 id="&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;TIME-WAIT"><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;TIME-WAIT" class="headerlink" title="&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;TIME_WAIT"></a>&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;TIME_WAIT</h4><p>&#x5728;TCP&#x72B6;&#x6001;&#x673A;&#x4E2D;&#xFF0C;&#x4ECE;<code>TIME_WAIT</code>&#x72B6;&#x6001;&#x5230;CLOSED&#x72B6;&#x6001;&#xFF0C;&#x6709;&#x4E00;&#x4E2A;&#x8D85;&#x65F6;&#x65F6;&#x95F4; 2 <em> MSL&#x3002;&#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;<code>TIME_WAIT</code>&#x72B6;&#x6001;&#xFF0C;&#x4E14;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#x4E3A;2 </em> MSL&#xFF1F;&#x4E3B;&#x8981;&#x6709;&#x4E24;&#x4E2A;&#x539F;&#x56E0;&#xFF1A;</p>
<ul>
<li><em>2 * MSL&#x786E;&#x4FDD;&#x6709;&#x8DB3;&#x591F;&#x7684;&#x65F6;&#x95F4;&#x8BA9;&#x88AB;&#x52A8;&#x65B9;&#x6536;&#x5230;&#x4E86;ACK&#x6216;&#x4E3B;&#x52A8;&#x65B9;&#x6536;&#x5230;&#x4E86;&#x88AB;&#x52A8;&#x53D1;&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x7684;FIN</em>&#x3002;&#x5373;&#xFF0C;&#x5982;&#x679C;&#x88AB;&#x52A8;&#x65B9;&#x6CA1;&#x6709;&#x6536;&#x5230;Ack&#xFF0C;&#x5C31;&#x4F1A;&#x89E6;&#x53D1;&#x88AB;&#x52A8;&#x65B9;&#x91CD;&#x4F20;FIN&#xFF0C;&#x53D1;&#x9001;Ack+&#x63A5;&#x6536;FIN&#x6B63;&#x597D;2&#x4E2A;MSL&#xFF0C;<code>TIME_WAIT</code>&#x72B6;&#x6001;&#x7684;&#x8FDE;&#x63A5;&#x6536;&#x5230;&#x91CD;&#x4F20;&#x7684;FIN&#x540E;&#xFF0C;&#x91CD;&#x4F20;Ack&#xFF0C;&#x518D;&#x7B49;&#x5F85;2 * MSL&#x65F6;&#x95F4;&#x3002;</li>
<li><em>&#x786E;&#x4FDD;&#x6709;&#x8DB3;&#x591F;&#x7684;&#x65F6;&#x95F4;&#x8BA9;&#x201C;<code>&#x8FF7;&#x9014;&#x7684;&#x91CD;&#x590D;&#x5206;&#x7EC4;</code>&#x201D;&#x8FC7;&#x671F;&#x4E22;&#x5F03;</em>&#x3002;&#x8FD9;&#x53EA;&#x9700;&#x8981;1 * MSL&#x5373;&#x53EF;&#xFF0C;&#x8D85;&#x8FC7;MSL&#x7684;&#x5206;&#x7EC4;&#x5C06;&#x88AB;&#x4E22;&#x5F03;&#xFF0C;&#x5426;&#x5219;&#x5F88;&#x5BB9;&#x6613;&#x540C;&#x65B0;&#x8FDE;&#x63A5;&#x7684;&#x6570;&#x636E;&#x6DF7;&#x5728;&#x4E00;&#x8D77;&#xFF08;&#x4EC5;&#x4EC5;&#x4F9D;&#x9760;ISN&#x662F;&#x4E0D;&#x884C;&#x7684;&#xFF09;&#x3002;</li>
</ul>
<h4 id="&#x5927;&#x89C4;&#x6A21;&#x51FA;&#x73B0;TIME-WAIT"><a href="#&#x5927;&#x89C4;&#x6A21;&#x51FA;&#x73B0;TIME-WAIT" class="headerlink" title="&#x5927;&#x89C4;&#x6A21;&#x51FA;&#x73B0;TIME_WAIT"></a>&#x5927;&#x89C4;&#x6A21;&#x51FA;&#x73B0;TIME_WAIT</h4><p>&#x4E00;&#x4E2A;&#x5E38;&#x89C1;&#x95EE;&#x9898;&#x662F;&#x5927;&#x89C4;&#x6A21;&#x51FA;&#x73B0;TIME_WAIT&#xFF0C;&#x901A;&#x5E38;&#x662F;&#x5728;&#x9AD8;&#x5E76;&#x53D1;&#x77ED;&#x8FDE;&#x63A5;&#x7684;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x4F1A;&#x6D88;&#x8017;&#x5F88;&#x591A;&#x8D44;&#x6E90;&#x3002;</p>
<p>&#x7F51;&#x4E0A;&#x5927;&#x90E8;&#x5206;&#x6587;&#x7AE0;&#x90FD;&#x662F;&#x6559;&#x4F60;&#x6253;&#x5F00;&#x4E24;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;<code>tcp_tw_reuse</code>&#x6216;<code>tcp_tw_recycle</code>&#x3002;&#x8FD9;&#x4E24;&#x4E2A;&#x53C2;&#x6570;&#x9ED8;&#x8BA4;&#x90FD;&#x662F;&#x5173;&#x95ED;&#x7684;&#xFF0C;<code>tcp_tw_recycle</code>&#x6BD4;<code>tcp_tw_reuse</code>&#x66F4;&#x4E3A;&#x6FC0;&#x8FDB;&#xFF1B;&#x8981;&#x60F3;&#x4F7F;&#x7528;&#x4E8C;&#x8005;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x6253;&#x5F00;<code>tcp_timestamps</code>&#xFF08;&#x9ED8;&#x8BA4;&#x6253;&#x5F00;&#xFF09;&#xFF0C;&#x5426;&#x5219;&#x65E0;&#x6548;&#x3002;&#x4E0D;&#x8FC7;&#xFF0C;<strong>&#x6253;&#x5F00;&#x8FD9;&#x4E24;&#x4E2A;&#x53C2;&#x6570;&#x53EF;&#x80FD;&#x4F1A;&#x8BA9;TCP&#x8FDE;&#x63A5;&#x51FA;&#x73B0;&#x8BE1;&#x5F02;&#x7684;&#x95EE;&#x9898;</strong>&#xFF1A;&#x5982;&#x4E0A;&#x6240;&#x8FF0;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x7B49;&#x5F85;&#x8D85;&#x65F6;&#x5C31;&#x91CD;&#x7528;&#x8FDE;&#x63A5;&#x7684;&#x8BDD;&#xFF0C;&#x65B0;&#x65E7;&#x8FDE;&#x63A5;&#x7684;&#x6570;&#x636E;&#x53EF;&#x80FD;&#x4F1A;&#x6DF7;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x6BD4;&#x5982;&#x65B0;&#x8FDE;&#x63A5;&#x63E1;&#x624B;&#x671F;&#x95F4;&#x6536;&#x5230;&#x4E86;&#x65E7;&#x8FDE;&#x63A5;&#x7684;FIN&#xFF0C;&#x5219;&#x65B0;&#x8FDE;&#x63A5;&#x4F1A;&#x88AB;&#x91CD;&#x7F6E;&#x3002;&#x56E0;&#x6B64;&#xFF0C;<strong>&#x4F7F;&#x7528;&#x8FD9;&#x4E24;&#x4E2A;&#x53C2;&#x6570;&#x65F6;&#x5E94;&#x683C;&#x5916;&#x5C0F;&#x5FC3;</strong>&#x3002;</p>
<p>&#x5404;&#x53C2;&#x6570;&#x8BE6;&#x7EC6;&#x5982;&#x4E0B;&#xFF1A;</p>
<ul>
<li><code>tcp_tw_reuse</code>&#xFF1A;&#x5B98;&#x65B9;&#x6587;&#x6863;&#x4E0A;&#x8BF4;<code>tcp_tw_reuse</code>&#x52A0;&#x4E0A;<code>tcp_timestamps</code>&#x53EF;&#x4EE5;&#x4FDD;&#x8BC1;<strong>&#x5BA2;&#x6237;&#x7AEF;</strong>&#xFF08;&#x4EC5;&#x5BA2;&#x6237;&#x7AEF;&#xFF09;&#x5728;&#x534F;&#x8BAE;&#x89D2;&#x5EA6;&#x7684;&#x5B89;&#x5168;&#xFF0C;&#x4F46;&#x662F;&#x9700;&#x8981;&#x5728;&#x4E24;&#x7AEF;&#x90FD;&#x6253;&#x5F00;<code>tcp_timestamps</code>&#x3002;</li>
<li><code>tcp_tw_recycle</code>&#xFF1A;&#x5982;&#x679C;&#x662F;<code>tcp_tw_recycle</code>&#x88AB;&#x6253;&#x5F00;&#x4E86;&#x8BDD;&#xFF0C;&#x4F1A;&#x5047;&#x8BBE;&#x5BF9;&#x7AEF;&#x5F00;&#x542F;&#x4E86;<code>tcp_timestamps</code>&#xFF0C;&#x7136;&#x540E;&#x4F1A;&#x53BB;&#x6BD4;&#x8F83;&#x65F6;&#x95F4;&#x6233;&#xFF0C;&#x5982;&#x679C;&#x65F6;&#x95F4;&#x6233;&#x53D8;&#x5927;&#x4E86;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x91CD;&#x7528;&#x8FDE;&#x63A5;&#xFF08;NAT&#x7F51;&#x7EDC;&#x6709;&#x53EF;&#x80FD;&#x5EFA;&#x8FDE;&#x63A5;&#x5931;&#x8D25;&#xFF0C;&#x51FA;&#x73B0;&#x201D;connection time out&#x201D;&#x7684;&#x9519;&#x8BEF;&#xFF09;&#x3002;</li>
</ul>
<p>&#x8865;&#x5145;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#xFF1A;</p>
<ul>
<li><code>tcp_max_tw_buckets</code>&#xFF1A;&#x63A7;&#x5236;&#x5E76;&#x53D1;&#x7684;<code>TIME_WAIT</code>&#x7684;&#x6570;&#x91CF;&#xFF08;&#x9ED8;&#x8BA4;180000&#xFF09;&#xFF0C;&#x5982;&#x679C;&#x8D85;&#x9650;&#xFF0C;&#x7CFB;&#x7EDF;&#x4F1A;&#x628A;&#x591A;&#x4F59;&#x7684;<code>TIME_WAIT</code>&#x8FDE;&#x63A5;destory&#x6389;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x65E5;&#x5FD7;&#x91CC;&#x6253;&#x4E00;&#x4E2A;&#x8B66;&#x544A;&#xFF08;&#x5982;&#x201C;time wait bucket table overflow&#x201D;&#xFF09;&#x3002;&#x5B98;&#x7F51;&#x6587;&#x6863;&#x8BF4;&#x8FD9;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x7528;&#x6765;&#x5BF9;&#x6297;DDoS&#x653B;&#x51FB;&#x7684;&#xFF0C;&#x9700;&#x8981;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x8003;&#x8651;&#x3002;</li>
</ul>
<h4 id="&#x5173;&#x4E8E;TIME-WAIT&#x7684;&#x5EFA;&#x8BAE;"><a href="#&#x5173;&#x4E8E;TIME-WAIT&#x7684;&#x5EFA;&#x8BAE;" class="headerlink" title="&#x5173;&#x4E8E;TIME_WAIT&#x7684;&#x5EFA;&#x8BAE;"></a>&#x5173;&#x4E8E;TIME_WAIT&#x7684;&#x5EFA;&#x8BAE;</h4><p>&#x603B;&#x4E4B;&#xFF0C;<strong><code>TIME_WAIT</code>&#x51FA;&#x73B0;&#x5728;&#x4E3B;&#x52A8;&#x53D1;&#x8D77;&#x6325;&#x624B;&#x7684;&#x4E00;&#x65B9;</strong>&#xFF0C;&#x5373;&#xFF0C;&#x8C01;&#x53D1;&#x8D77;&#x6325;&#x624B;&#x8C01;&#x5C31;&#x8981;&#x727A;&#x7272;&#x8D44;&#x6E90;&#x7EF4;&#x62A4;&#x90A3;&#x4E9B;&#x7B49;&#x5F85;&#x4ECE;<code>TIME_WAIT</code>&#x8F6C;&#x6362;&#x5230;<code>CLOSED</code>&#x72B6;&#x6001;&#x7684;&#x8FDE;&#x63A5;&#x3002;<code>TIME_WAIT</code>&#x7684;&#x5B58;&#x5728;&#x662F;&#x5FC5;&#x8981;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;<strong>&#x4E0E;&#x5176;&#x901A;&#x8FC7;&#x4E0A;&#x8FF0;&#x53C2;&#x6570;&#x7834;&#x534F;&#x8BAE;&#x6765;&#x9003;&#x907F;<code>TIME_WAIT</code>&#xFF0C;&#x4E0D;&#x5982;&#x597D;&#x597D;&#x4F18;&#x5316;&#x4E1A;&#x52A1;</strong>&#xFF08;&#x5982;&#x6539;&#x7528;&#x957F;&#x8FDE;&#x63A5;&#x7B49;&#xFF09;&#xFF0C;&#x9488;&#x5BF9;&#x4E0D;&#x540C;&#x4E1A;&#x52A1;&#x4F18;&#x5316;<code>TIME_WAIT</code>&#x95EE;&#x9898;&#x3002;</p>
<p>&#x5BF9;&#x4E8E;HTTP&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;HTTP&#x7684;KeepAlive&#x53C2;&#x6570;&#xFF0C;&#x5728;&#x5E94;&#x7528;&#x5C42;&#x91CD;&#x7528;TCP&#x8FDE;&#x63A5;&#x6765;&#x5904;&#x7406;&#x591A;&#x4E2A;HTTP&#x8BF7;&#x6C42;&#xFF08;&#x9700;&#x8981;&#x6D4F;&#x89C8;&#x5668;&#x914D;&#x5408;&#xFF09;&#xFF0C;&#x8BA9;client&#x7AEF;&#xFF08;&#x5373;&#x6D4F;&#x89C8;&#x5668;&#xFF09;&#x53D1;&#x8D77;&#x6325;&#x624B;&#xFF0C;&#x8FD9;&#x6837;<code>TIME_WAIT</code>&#x53EA;&#x4F1A;&#x51FA;&#x73B0;&#x5728;client&#x7AEF;&#x3002;</p>
<h2 id="&#x793A;&#x4F8B;"><a href="#&#x793A;&#x4F8B;" class="headerlink" title="&#x793A;&#x4F8B;"></a>&#x793A;&#x4F8B;</h2><p>&#x4E0B;&#x56FE;&#x662F;&#x6211;&#x4ECE;Wireshark&#x4E2D;&#x622A;&#x4E86;&#x4E2A;&#x6211;&#x5728;&#x8BBF;&#x95EE;coolshell.cn&#x65F6;&#x7684;&#x6709;&#x6570;&#x636E;&#x4F20;&#x8F93;&#x7684;&#x56FE;&#xFF0C;&#x53EF;&#x4EE5;&#x53C2;&#x7167;&#x7406;&#x89E3;Seq&#x4E0E;Ack&#x662F;&#x600E;&#x4E48;&#x53D8;&#x7684;&#xFF08;&#x4F7F;&#x7528;Wireshark&#x83DC;&#x5355;&#x4E2D;&#x7684;Statistics -&gt;Flow Graph&#x2026; &#xFF09;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/Seq&#x3001;Ack&#x53D8;&#x5316;&#x793A;&#x4F8B;.jpg" alt="Seq&#x3001;Ack&#x53D8;&#x5316;&#x793A;&#x4F8B;"></p>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;<strong>Seq&#x4E0E;Ack&#x7684;&#x589E;&#x52A0;&#x548C;&#x4F20;&#x8F93;&#x7684;&#x5B57;&#x8282;&#x6570;&#x76F8;&#x5173;</strong>&#x3002;&#x4E0A;&#x56FE;&#x4E2D;&#xFF0C;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x540E;&#xFF0C;&#x6765;&#x4E86;&#x4E24;&#x4E2A;Len:1440&#x7684;&#x5305;&#xFF0C;&#x56E0;&#x6B64;&#x7B2C;&#x4E00;&#x4E2A;&#x5305;&#x4E3A;Seq(1)&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x5305;&#x4E3A;Seq(1441)&#x3002;&#x7136;&#x540E;&#x6536;&#x5230;&#x7B2C;&#x4E00;&#x4E2A;Ack(1441)&#xFF0C;&#x8868;&#x793A;1~1440&#x7684;&#x6570;&#x636E;&#x5DF2;&#x7ECF;&#x6536;&#x5230;&#x4E86;&#xFF0C;&#x671F;&#x5F85;Seq(1441)&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E00;&#x4E2A;&#x5305;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x5145;&#x5F53;Ack&#x4E0E;Seq&#xFF0C;&#x5728;&#x4E00;&#x6B21;&#x4F20;&#x8F93;&#x4E2D;&#x643A;&#x5E26;&#x6570;&#x636E;&#x4E0E;&#x54CD;&#x5E94;&#x3002;</p>
<blockquote>
<p>&#x5982;&#x679C;&#x4F60;&#x7528;Wireshark&#x6293;&#x5305;&#x7A0B;&#x5E8F;&#x770B;3&#x6B21;&#x63E1;&#x624B;&#xFF0C;&#x4F60;&#x4F1A;&#x53D1;&#x73B0;ISN&#x603B;&#x662F;&#x4E3A;0&#x3002;&#x4E0D;&#x662F;&#x8FD9;&#x6837;&#x7684;&#xFF0C;Wireshark&#x4E3A;&#x4E86;&#x663E;&#x793A;&#x66F4;&#x53CB;&#x597D;&#xFF0C;&#x4F7F;&#x7528;&#x4E86;Relative Seq&#x2014;&#x2014;&#x76F8;&#x5BF9;&#x5E8F;&#x53F7;&#x3002;&#x4F60;&#x53EA;&#x8981;&#x5728;&#x53F3;&#x952E;&#x83DC;&#x5355;&#x4E2D;&#x7684;protocol preference&#x4E2D;&#x53D6;&#x6D88;&#x6389;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x201C;Absolute Seq&#x201D;&#x4E86;&#x3002;</p>
</blockquote>
<h1 id="TCP&#x91CD;&#x4F20;&#x673A;&#x5236;"><a href="#TCP&#x91CD;&#x4F20;&#x673A;&#x5236;" class="headerlink" title="TCP&#x91CD;&#x4F20;&#x673A;&#x5236;"></a>TCP&#x91CD;&#x4F20;&#x673A;&#x5236;</h1><p><strong>TCP&#x534F;&#x8BAE;&#x901A;&#x8FC7;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x4FDD;&#x8BC1;&#x6240;&#x6709;&#x7684;segment&#x90FD;&#x53EF;&#x4EE5;&#x5230;&#x8FBE;&#x5BF9;&#x7AEF;&#xFF0C;&#x901A;&#x8FC7;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#x5141;&#x8BB8;&#x4E00;&#x5B9A;&#x7A0B;&#x5EA6;&#x7684;&#x4E71;&#x5E8F;&#x548C;&#x4E22;&#x5305;</strong>&#xFF08;&#x6ED1;&#x52A8;&#x7A97;&#x53E3;&#x8FD8;&#x5177;&#x6709;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x7B49;&#x4F5C;&#x7528;&#xFF0C;&#x6682;&#x4E0D;&#x8BA8;&#x8BBA;&#xFF09;&#x3002;&#x6CE8;&#x610F;&#xFF0C;&#x6B64;&#x5904;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x7279;&#x6307;&#x6570;&#x636E;&#x4F20;&#x8F93;&#x9636;&#x6BB5;&#xFF0C;&#x63E1;&#x624B;&#x3001;&#x6325;&#x624B;&#x9636;&#x6BB5;&#x7684;&#x4F20;&#x8F93;&#x673A;&#x5236;&#x4E0E;&#x6B64;&#x4E0D;&#x540C;&#x3002;</p>
<p>TCP&#x662F;&#x9762;&#x5411;&#x5B57;&#x8282;&#x6D41;&#x7684;&#xFF0C;<em>Seq&#x4E0E;Ack&#x7684;&#x589E;&#x957F;&#x5747;&#x4EE5;&#x5B57;&#x8282;&#x4E3A;&#x5355;&#x4F4D;</em>&#x3002;&#x5728;&#x6700;&#x6734;&#x7D20;&#x7684;&#x5B9E;&#x73B0;&#x4E2D;&#xFF0C;&#x4E3A;&#x4E86;&#x51CF;&#x5C11;&#x7F51;&#x7EDC;&#x4F20;&#x8F93;&#xFF0C;<em>&#x63A5;&#x6536;&#x7AEF;&#x53EA;&#x56DE;&#x590D;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x8FDE;&#x7EED;&#x5305;&#x7684;Ack</em>&#xFF0C;&#x5E76;&#x76F8;&#x5E94;&#x79FB;&#x52A8;&#x7A97;&#x53E3;&#x3002;&#x6BD4;&#x5982;&#xFF0C;&#x53D1;&#x9001;&#x7AEF;&#x53D1;&#x9001;1,2,3,4,5&#x4E00;&#x5171;&#x4E94;&#x4EFD;&#x6570;&#x636E;&#xFF08;&#x5047;&#x8BBE;&#x4E00;&#x4EFD;&#x6570;&#x636E;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#xFF09;&#xFF0C;&#x63A5;&#x6536;&#x7AEF;&#x5FEB;&#x901F;&#x6536;&#x5230;&#x4E86;Seq 1, Seq 2&#xFF0C;&#x4E8E;&#x662F;&#x56DE;Ack 3&#xFF0C;&#x5E76;&#x79FB;&#x52A8;&#x7A97;&#x53E3;&#xFF1B;&#x7136;&#x540E;&#x6536;&#x5230;&#x4E86;Seq 4&#xFF0C;&#x7531;&#x4E8E;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#x672A;&#x6536;&#x5230;&#x8FC7;Seq 3&#xFF08;&#x4E71;&#x5E8F;&#xFF09;&#xFF0C;&#x5982;&#x679C;&#x4ECD;&#x5728;&#x7A97;&#x53E3;&#x5185;&#xFF0C;&#x5219;&#x53EA;&#x586B;&#x5145;&#x7A97;&#x53E3;&#xFF0C;&#x4F46;&#x4E0D;&#x53D1;&#x9001;Ack 5&#xFF0C;&#x5426;&#x5219;&#x4E22;&#x5F03;Seq 3&#xFF08;&#x4E0E;&#x4E22;&#x5305;&#x7684;&#x6548;&#x679C;&#x76F8;&#x4F3C;&#xFF09;&#xFF1B;&#x5047;&#x8BBE;&#x5728;&#x7A97;&#x53E3;&#x5185;&#xFF0C;&#x5219;&#x7B49;&#x4EE5;&#x540E;&#x6536;&#x5230;Seq 3&#x65F6;&#xFF0C;&#x53D1;&#x73B0;Seq 4&#x53CA;&#x4EE5;&#x524D;&#x7684;&#x6570;&#x636E;&#x5305;&#x90FD;&#x6536;&#x5230;&#x4E86;&#xFF0C;&#x5219;&#x56DE;Ack 5&#xFF0C;&#x5E76;&#x79FB;&#x52A8;&#x7A97;&#x53E3;&#x3002;</p>
<h2 id="&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;"><a href="#&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;" class="headerlink" title="&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;"></a>&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;</h2><p><em>&#x5F53;&#x53D1;&#x9001;&#x65B9;&#x53D1;&#x73B0;&#x7B49;&#x5F85;Seq 3&#x7684;Ack&#xFF08;&#x5373;Ack 4&#xFF09;<strong>&#x8D85;&#x65F6;</strong>&#x540E;&#xFF0C;&#x4F1A;&#x8BA4;&#x4E3A;Seq 3&#x53D1;&#x9001;&#x201C;&#x5931;&#x8D25;&#x201D;&#xFF0C;&#x91CD;&#x4F20;Seq 3</em>&#x3002;&#x4E00;&#x65E6;&#x63A5;&#x6536;&#x65B9;&#x6536;&#x5230;Seq 3&#xFF0C;&#x4F1A;&#x7ACB;&#x5373;&#x56DE;Ack 4&#x3002;</p>
<blockquote>
<p>&#x53D1;&#x9001;&#x65B9;&#x65E0;&#x6CD5;&#x533A;&#x5206;&#x662F;Seq 3&#x4E22;&#x5305;&#x3001;&#x63A5;&#x6536;&#x65B9;&#x6545;&#x969C;&#x3001;&#x8FD8;&#x662F;Ack 4&#x4E22;&#x5305;&#xFF0C;&#x672C;&#x6587;&#x7EDF;&#x4E00;&#x8868;&#x8FF0;&#x4E3A;Seq&#x53D1;&#x9001;&#x201C;&#x5931;&#x8D25;&#x201D;&#x3002;</p>
</blockquote>
<p>&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x6709;&#x4E9B;&#x95EE;&#x9898;&#xFF1A;&#x5047;&#x8BBE;&#x76EE;&#x524D;&#x5DF2;&#x6536;&#x5230;&#x4E86;Seq 4&#xFF1B;&#x7531;&#x4E8E;&#x672A;&#x6536;&#x5230;Seq 3&#xFF0C;&#x5BFC;&#x81F4;&#x53D1;&#x9001;&#x65B9;&#x91CD;&#x4F20;Seq 3&#xFF0C;&#x5728;&#x6536;&#x5230;&#x91CD;&#x4F20;&#x7684;Seq 3&#x4E4B;&#x524D;&#xFF0C;&#x5305;&#x62EC;&#x65B0;&#x6536;&#x5230;&#x7684;Seq 5&#x548C;&#x521A;&#x624D;&#x6536;&#x5230;&#x7684;Seq 4&#x90FD;&#x4E0D;&#x80FD;&#x56DE;&#x590D;Ack&#xFF0C;&#x5F88;&#x5BB9;&#x6613;&#x5F15;&#x53D1;&#x53D1;&#x9001;&#x65B9;&#x91CD;&#x4F20;Seq 4&#x3001;Seq5&#x3002;&#x63A5;&#x6536;&#x65B9;&#x4E4B;&#x524D;&#x5DF2;&#x7ECF;&#x5C06;Seq 4&#x3001;Seq 5&#x4FDD;&#x5B58;&#x5230;&#x7A97;&#x53E3;&#x4E2D;&#xFF0C;&#x6B64;&#x65F6;&#x91CD;&#x4F20;Seq 4&#x3001;Seq 5&#x660E;&#x663E;&#x9020;&#x6210;&#x6D6A;&#x8D39;&#x3002;</p>
<p>&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x9762;&#x4E34;&#x201C;<strong>&#x91CD;&#x4F20;&#x4E00;&#x4E2A;&#x8FD8;&#x662F;&#x91CD;&#x4F20;&#x6240;&#x6709;</strong>&#x201D;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5373;&#xFF1A;</p>
<ul>
<li>&#x91CD;&#x4F20;&#x4E00;&#x4E2A;&#xFF1A;&#x4EC5;&#x91CD;&#x4F20;timeout&#x7684;&#x5305;&#xFF08;&#x5373;Seq 3&#xFF09;&#xFF0C;&#x540E;&#x7EED;&#x5305;&#x7B49;&#x8D85;&#x65F6;&#x540E;&#x518D;&#x91CD;&#x4F20;&#x3002;&#x8282;&#x7701;&#x8D44;&#x6E90;&#xFF0C;&#x4F46;&#x6548;&#x7387;&#x7565;&#x4F4E;&#x3002;</li>
<li>&#x91CD;&#x4F20;&#x6240;&#x6709;&#xFF1A;&#x6BCF;&#x6B21;&#x90FD;&#x91CD;&#x4F20;timeout&#x5305;&#x53CA;&#x4E4B;&#x540E;&#x6240;&#x6709;&#x7684;&#x6570;&#x636E;&#xFF08;&#x5373;Seq 3&#x3001;4&#x3001;5&#xFF09;&#x3002;&#x6548;&#x7387;&#x66F4;&#x9AD8;&#xFF08;&#x5982;&#x679C;&#x5E26;&#x5BBD;&#x672A;&#x6253;&#x6EE1;&#xFF09;&#xFF0C;&#x4F46;&#x6D6A;&#x8D39;&#x8D44;&#x6E90;&#x3002;</li>
</ul>
<p>&#x53EF;&#x77E5;&#xFF0C;&#x4E24;&#x79CD;&#x65B9;&#x6CD5;&#x90FD;&#x5C5E;&#x4E8E;<code>&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x673A;&#x5236;</code>&#xFF0C;&#x5404;&#x6709;&#x5229;&#x5F0A;&#xFF0C;&#x4F46;&#x4E8C;&#x8005;&#x90FD;&#x9700;&#x8981;&#x7B49;&#x5F85;timeout&#xFF0C;&#x662F;<strong>&#x57FA;&#x4E8E;&#x65F6;&#x95F4;&#x9A71;&#x52A8;</strong>&#x7684;&#xFF0C;&#x6027;&#x80FD;&#x4E0E;timeout&#x7684;&#x957F;&#x5EA6;&#x5BC6;&#x5207;&#x76F8;&#x5173;&#x3002;&#x5982;&#x679C;timeout&#x5F88;&#x957F;&#xFF08;&#x666E;&#x904D;&#x60C5;&#x51B5;&#xFF09;&#xFF0C;&#x5219;&#x4E24;&#x79CD;&#x65B9;&#x6CD5;&#x7684;&#x6027;&#x80FD;&#x90FD;&#x4F1A;&#x53D7;&#x5230;&#x8F83;&#x5927;&#x5F71;&#x54CD;&#x3002;</p>
<h2 id="&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x673A;&#x5236;"><a href="#&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x673A;&#x5236;" class="headerlink" title="&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x673A;&#x5236;"></a>&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x673A;&#x5236;</h2><!--TODO 20170306 统一例子中的序号-->
<p>&#x6700;&#x7406;&#x60F3;&#x7684;&#x65B9;&#x6848;&#x662F;&#xFF1A;&#x5728;&#x8D85;&#x65F6;&#x4E4B;&#x524D;&#xFF0C;&#x901A;&#x8FC7;&#x67D0;&#x79CD;&#x673A;&#x5236;&#x8981;&#x6C42;&#x53D1;&#x9001;&#x65B9;&#x5C3D;&#x5FEB;&#x91CD;&#x4F20;timeout&#x7684;&#x5305;&#xFF08;&#x5373;Seq 3&#xFF09;&#xFF0C;&#x5982;<code>&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x673A;&#x5236;</code>&#xFF08;Fast Retransmit&#xFF09;&#x3002;&#x8FD9;&#x79CD;&#x65B9;&#x6848;&#x6D6A;&#x8D39;&#x8D44;&#x6E90;&#xFF08;&#x6D6A;&#x8D39;&#x591A;&#x5C11;&#x53D6;&#x51B3;&#x4E8E;&#x201C;&#x91CD;&#x4F20;&#x4E00;&#x4E2A;&#x8FD8;&#x662F;&#x91CD;&#x4F20;&#x6240;&#x6709;&#x201D;&#xFF0C;&#x89C1;&#x4E0B;&#xFF09;&#xFF0C;&#x4F46;&#x6548;&#x7387;&#x975E;&#x5E38;&#x9AD8;&#xFF08;&#x56E0;&#x4E3A;&#x4E0D;&#x9700;&#x8981;&#x7B49;&#x5F85;timeout&#x4E86;&#xFF09;&#x3002;</p>
<p>&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x673A;&#x5236;&#x4E0D;&#x57FA;&#x4E8E;&#x65F6;&#x95F4;&#x9A71;&#x52A8;&#xFF0C;&#x800C;<code>&#x57FA;&#x4E8E;&#x6570;&#x636E;&#x9A71;&#x52A8;</code>&#xFF1A;<em>&#x5982;&#x679C;&#x5305;&#x6CA1;&#x6709;&#x8FDE;&#x7EED;&#x5230;&#x8FBE;&#xFF0C;&#x5C31;Ack&#x6700;&#x540E;&#x90A3;&#x4E2A;&#x53EF;&#x80FD;&#x88AB;&#x4E22;&#x4E86;&#x7684;&#x5305;&#xFF1B;&#x5982;&#x679C;&#x53D1;&#x9001;&#x65B9;&#x8FDE;&#x7EED;&#x6536;&#x5230;3&#x6B21;&#x76F8;&#x540C;&#x7684;Ack&#xFF0C;&#x5C31;&#x91CD;&#x4F20;&#x5BF9;&#x5E94;&#x7684;Seq</em>&#x3002;</p>
<p>&#x6BD4;&#x5982;&#xFF1A;&#x5047;&#x8BBE;&#x53D1;&#x9001;&#x65B9;&#x4ECD;&#x7136;&#x53D1;&#x9001;1,2,3,4,5&#x5171;5&#x4EFD;&#x6570;&#x636E;&#xFF1B;&#x63A5;&#x6536;&#x65B9;&#x5148;&#x6536;&#x5230;Seq 1&#xFF0C;&#x56DE;Ack 2&#xFF1B;&#x7136;&#x540E;Seq 2&#x56E0;&#x7F51;&#x7EDC;&#x539F;&#x56E0;&#x4E22;&#x5931;&#x4E86;&#xFF0C;&#x6B63;&#x5E38;&#x6536;&#x5230;Seq 3&#xFF0C;&#x7EE7;&#x7EED;&#x56DE;Ack 2&#xFF1B;&#x540E;&#x9762;Seq 4&#x548C;Seq 5&#x90FD;&#x5230;&#x4E86;&#xFF0C;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x53EF;&#x80FD;&#x88AB;&#x4E22;&#x4E86;&#x7684;&#x5305;&#x8FD8;&#x662F;Seq 2&#xFF0C;&#x7EE7;&#x7EED;&#x56DE;Ack 2&#xFF1B;&#x73B0;&#x5728;&#xFF0C;&#x53D1;&#x9001;&#x65B9;&#x5DF2;&#x7ECF;&#x8FDE;&#x7EED;&#x6536;&#x5230;4&#x6B21;&#xFF08;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;3&#x6B21;&#xFF09;&#x76F8;&#x540C;&#x7684;Ack&#xFF08;&#x5373;Ack 2&#xFF09;&#xFF0C;&#x77E5;&#x9053;&#x6700;&#x5927;&#x5E8F;&#x53F7;&#x7684;&#x672A;&#x6536;&#x5230;&#x5305;&#x662F;Seq 2&#xFF0C;&#x4E8E;&#x662F;&#x91CD;&#x4F20;Seq 2&#xFF0C;&#x5E76;&#x6E05;&#x7A7A;Ack 2&#x7684;&#x8BA1;&#x6570;&#x5668;&#xFF1B;&#x6700;&#x540E;&#xFF0C;&#x63A5;&#x6536;&#x65B9;&#x6536;&#x5230;&#x4E86;Seq 2&#xFF0C;&#x67E5;&#x770B;&#x7A97;&#x53E3;&#x53D1;&#x73B0;Seq 3&#x3001;4&#x3001;5&#x90FD;&#x6536;&#x5230;&#x4E86;&#xFF0C;&#x56DE;Ack 6&#x3002;&#x793A;&#x610F;&#x56FE;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;TCP&#xFF08;1&#xFF09;&#xFF1A;&#x72B6;&#x6001;&#x673A;&#x4E0E;&#x91CD;&#x4F20;&#x673A;&#x5236;/&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x793A;&#x4F8B;.png" alt="&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x793A;&#x4F8B;"></p>
<p>&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x89E3;&#x51B3;&#x4E86;timeout&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x4F9D;&#x7136;&#x9762;&#x4E34;&#x201C;&#x91CD;&#x4F20;&#x4E00;&#x4E2A;&#x8FD8;&#x662F;&#x91CD;&#x4F20;&#x6240;&#x6709;&#x201D;&#x7684;&#x95EE;&#x9898;&#x3002;&#x5BF9;&#x4E8E;&#x4E0A;&#x9762;&#x7684;&#x793A;&#x4F8B;&#x6765;&#x8BF4;&#xFF0C;&#x662F;&#x53EA;&#x91CD;&#x4F20;Seq 2&#x5462;&#x8FD8;&#x662F;&#x91CD;&#x4F20;Seq 2&#x3001;3&#x3001;4&#x3001;5&#x5462;&#xFF1F;</p>
<p>&#x5982;&#x679C;&#x53EA;&#x4F7F;&#x7528;&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#xFF0C;&#x5219;&#x5FC5;&#x987B;&#x91CD;&#x4F20;&#x6240;&#x6709;&#xFF1A;&#x56E0;&#x4E3A;&#x53D1;&#x9001;&#x65B9;&#x5E76;&#x4E0D;&#x6E05;&#x695A;&#x4E0A;&#x8FF0;&#x8FDE;&#x7EED;&#x7684;4&#x6B21;Ack 2&#x662F;&#x56E0;&#x4E3A;&#x54EA;&#x4E9B;Seq&#x4F20;&#x56DE;&#x6765;&#x7684;&#x3002;&#x5047;&#x8BBE;&#x53D1;&#x9001;&#x65B9;&#x53D1;&#x51FA;&#x4E86;Seq 1&#x5230;Seq 20&#x4F9B;20&#x4EFD;&#x6570;&#x636E;&#xFF0C;&#x53EA;&#x6709;Seq 1&#x3001;6&#x3001;10&#x3001;20&#x5230;&#x8FBE;&#x4E86;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x89E6;&#x53D1;&#x91CD;&#x4F20;Ack 2&#xFF1B;&#x7136;&#x540E;&#x53D1;&#x9001;&#x65B9;&#x91CD;&#x4F20;Seq 2&#xFF0C;&#x63A5;&#x6536;&#x65B9;&#x6536;&#x5230;&#xFF0C;&#x56DE;&#x590D;Ack 3&#xFF1B;&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x53D1;&#x9001;&#x65B9;&#x4E0E;&#x63A5;&#x6536;&#x65B9;&#x90FD;&#x4E0D;&#x4F1A;&#x518D;&#x53D1;&#x9001;&#x4EFB;&#x4F55;&#x6570;&#x636E;&#xFF0C;&#x4E24;&#x7AEF;&#x9677;&#x5165;&#x7B49;&#x5F85;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x53D1;&#x9001;&#x65B9;&#x53EA;&#x80FD;&#x9009;&#x62E9;&#x201C;&#x91CD;&#x4F20;&#x6240;&#x6709;&#x201D;&#xFF0C;&#x8FD9;&#x4E5F;&#x662F;&#x67D0;&#x4E9B;TCP&#x534F;&#x8BAE;&#x7684;&#x5B9E;&#x9645;&#x5B9E;&#x73B0;&#xFF0C;&#x5BF9;&#x4E8E;&#x5E26;&#x5BBD;&#x672A;&#x6EE1;&#x65F6;&#x91CD;&#x4F20;&#x6548;&#x7387;&#x7684;&#x63D0;&#x5347;&#x975E;&#x5E38;&#x660E;&#x663E;&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x66F4;&#x5B8C;&#x7F8E;&#x7684;&#x8BBE;&#x8BA1;&#x662F;&#xFF1A;&#x5C06;&#x8D85;&#x65F6;&#x91CD;&#x4F20;&#x4E0E;&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x7ED3;&#x5408;&#x8D77;&#x6765;&#xFF0C;<em>&#x89E6;&#x53D1;&#x5FEB;&#x901F;&#x91CD;&#x4F20;&#x65F6;&#xFF0C;&#x53EA;&#x91CD;&#x4F20;&#x5C40;&#x90E8;&#x7684;&#x4E00;&#x5C0F;&#x6BB5;Seq&#xFF08;&#x5C40;&#x90E8;&#x6027;&#x539F;&#x7406;&#xFF0C;&#x751A;&#x81F3;&#x53EA;&#x91CD;&#x4F20;&#x4E00;&#x4E2A;Seq&#xFF09;&#xFF0C;&#x5176;&#x4ED6;Seq&#x8D85;&#x65F6;&#x540E;&#x91CD;&#x4F20;</em>&#x3002;</p>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="https://coolshell.cn/articles/11564.html" target="_blank" rel="external">TCP &#x7684;&#x90A3;&#x4E9B;&#x4E8B;&#x513F;&#xFF08;&#x4E0A;&#xFF09;</a></li>
<li><a href="http://coolnull.com/3605.html" target="_blank" rel="external">&#x5927;&#x91CF;TIME_WAIT&#x89E3;&#x51B3;&#x529E;&#x6CD5;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;TCP&amp;#x534F;&amp;#x8BAE;&amp;#x6BD4;&amp;#x8F83;&amp;#x590D;&amp;#x6742;&amp;#xFF0C;&amp;#x63A5;&amp;#x4E0B;&amp;#x6765;&amp;#x5206;&amp;#x4E24;&amp;#x7BC7;&amp;#x6587;&amp;#x7AE0;&amp;#x6D45;&amp;#x8981;&amp;#x4ECB;&amp;#x7ECD;TCP&amp;#x4E2D;&amp;#x7684;&amp;#x4E00;&amp;#x4E9B;&amp;#x8981;&amp;#x70B9;&amp;#x3002;&lt;/p&gt;
&lt;p&gt;&amp;#x672C;&amp;#x6587;&amp;#x4ECB;&amp;#x7ECD;TCP&amp;#x7684;&amp;#x72B6;&amp;#x6001;&amp;#x673A;&amp;#x4E0E;&amp;#x91CD;&amp;#x4F20;&amp;#x673A;&amp;#x5236;&amp;#xFF0C;&amp;#x4E0B;&amp;#x6587;&amp;#x8BB2;&amp;#x89E3;&amp;#x6D41;&amp;#x91CF;&amp;#x63A7;&amp;#x5236;&amp;#x4E0E;&amp;#x62E5;&amp;#x585E;&amp;#x63A7;&amp;#x5236;&amp;#x3002;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#x672C;&amp;#x6587;&amp;#x5927;&amp;#x90E8;&amp;#x5206;&amp;#x5185;&amp;#x5BB9;&amp;#x57FA;&amp;#x4E8E;&lt;a href=&quot;https://coolshell.cn/articles/11564.html&quot;&gt;TCP &amp;#x7684;&amp;#x90A3;&amp;#x4E9B;&amp;#x4E8B;&amp;#x513F;&amp;#xFF08;&amp;#x4E0A;&amp;#xFF09;&lt;/a&gt;&amp;#x4FEE;&amp;#x6539;&amp;#x800C;&amp;#x6765;&amp;#xFF0C;&amp;#x90E8;&amp;#x5206;&amp;#x89C2;&amp;#x70B9;&amp;#x4E0E;&amp;#x539F;&amp;#x6587;&amp;#x4E0D;&amp;#x540C;&amp;#xFF0C;&amp;#x91CD;&amp;#x8981;&amp;#x5730;&amp;#x65B9;&amp;#x589E;&amp;#x52A0;&amp;#x4E86;&amp;#x89E3;&amp;#x91CA;&amp;#x3002;&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="网络" scheme="https://monkeysayhi.github.io/tags/%E7%BD%91%E7%BB%9C/"/>
    
      <category term="TCP" scheme="https://monkeysayhi.github.io/tags/TCP/"/>
    
  </entry>
  
  <entry>
    <title>浅谈MySQL的B树索引与索引优化</title>
    <link href="https://monkeysayhi.github.io/2018/03/06/%E6%B5%85%E8%B0%88MySQL%E7%9A%84B%E6%A0%91%E7%B4%A2%E5%BC%95%E4%B8%8E%E7%B4%A2%E5%BC%95%E4%BC%98%E5%8C%96/"/>
    <id>https://monkeysayhi.github.io/2018/03/06/浅谈MySQL的B树索引与索引优化/</id>
    <published>2018-03-06T06:14:26.000Z</published>
    <updated>2018-03-19T04:50:54.000Z</updated>
    
    <content type="html"><![CDATA[<p>MySQL&#x7684;MyISAM&#x3001;InnoDB&#x5F15;&#x64CE;&#x9ED8;&#x8BA4;&#x5747;&#x4F7F;&#x7528;B+&#x6811;&#x7D22;&#x5F15;&#xFF08;&#x67E5;&#x8BE2;&#x65F6;&#x90FD;&#x663E;&#x793A;&#x4E3A;&#x201C;BTREE&#x201D;&#xFF09;&#xFF0C;&#x672C;&#x6587;&#x8BA8;&#x8BBA;&#x4E24;&#x4E2A;&#x95EE;&#x9898;&#xFF1A;</p>
<ul>
<li>&#x4E3A;&#x4EC0;&#x4E48;MySQL&#x7B49;&#x4E3B;&#x6D41;&#x6570;&#x636E;&#x5E93;&#x9009;&#x62E9;B+&#x6811;&#x7684;&#x7D22;&#x5F15;&#x7ED3;&#x6784;&#xFF1F;</li>
<li>&#x5982;&#x4F55;&#x57FA;&#x4E8E;&#x7D22;&#x5F15;&#x7ED3;&#x6784;&#xFF0C;&#x7406;&#x89E3;&#x5E38;&#x89C1;&#x7684;MySQL&#x7D22;&#x5F15;&#x4F18;&#x5316;&#x601D;&#x8DEF;&#xFF1F;</li>
</ul>
<a id="more"></a>
<h1 id="&#x4E3A;&#x4EC0;&#x4E48;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;"><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;" class="headerlink" title="&#x4E3A;&#x4EC0;&#x4E48;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;"></a>&#x4E3A;&#x4EC0;&#x4E48;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;</h1><p>&#x7D22;&#x5F15;&#x7ED3;&#x6784;&#x7684;&#x9009;&#x62E9;&#x57FA;&#x4E8E;&#x8FD9;&#x6837;&#x4E00;&#x4E2A;&#x6027;&#x8D28;&#xFF1A;<strong>&#x5927;&#x6570;&#x636E;&#x91CF;&#x65F6;&#xFF0C;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;</strong>&#x3002;</p>
<p>&#x4E3A;&#x4EC0;&#x4E48;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;&#xFF1F;&#x5047;&#x8BBE;&#x4F7F;&#x7528;&#x6811;&#x7ED3;&#x6784;&#x7EC4;&#x7EC7;&#x7D22;&#x5F15;&#xFF0C;&#x7B80;&#x5355;&#x4F30;&#x7B97;&#x4E00;&#x4E0B;&#xFF1A;</p>
<ul>
<li>&#x5047;&#x8BBE;&#x5355;&#x4E2A;&#x7D22;&#x5F15;&#x8282;&#x70B9;12B&#xFF0C;1000w&#x4E2A;&#x6570;&#x636E;&#x884C;&#xFF0C;unique&#x7D22;&#x5F15;&#xFF0C;&#x5219;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x5171;&#x5360;&#x7EA6;100MB&#xFF0C;&#x6574;&#x68F5;&#x6811;&#x6700;&#x591A;200MB&#x3002;</li>
<li>&#x5047;&#x8BBE;&#x4E00;&#x884C;&#x6570;&#x636E;&#x5360;&#x7528;200B&#xFF0C;&#x5219;&#x6570;&#x636E;&#x5171;&#x5360;&#x7EA6;2G&#x3002;</li>
</ul>
<p>&#x5047;&#x8BBE;&#x7D22;&#x5F15;&#x5B58;&#x50A8;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x6BCF;&#x5728;&#x7269;&#x7406;&#x76D8;&#x4E0A;&#x4FDD;&#x5B58;2G&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5C31;&#x8981;&#x5360;&#x7528;200MB&#x7684;&#x5185;&#x5B58;&#xFF0C;<em><code>&#x7D22;&#x5F15;:&#x6570;&#x636E;&#x7684;&#x5360;&#x7528;&#x6BD4;</code>&#x7EA6;&#x4E3A;1/10</em>&#x3002;1/10&#x7684;&#x5360;&#x7528;&#x6BD4;&#x7B97;&#x4E0D;&#x7B97;&#x5927;&#x5462;&#xFF1F;&#x7269;&#x7406;&#x76D8;&#x6BD4;&#x5185;&#x5B58;&#x5EC9;&#x4EF7;&#x7684;&#x591A;&#xFF0C;&#x4EE5;&#x4E00;&#x53F0;&#x5185;&#x5B58;16G&#x786C;&#x76D8;1T&#x7684;&#x670D;&#x52A1;&#x5668;&#x4E3A;&#x4F8B;&#xFF0C;<em>&#x5982;&#x679C;&#x8981;&#x5B58;&#x6EE1;1T&#x7684;&#x786C;&#x76D8;&#xFF0C;&#x81F3;&#x5C11;&#x9700;&#x8981;100G&#x7684;&#x5185;&#x5B58;</em>&#xFF0C;&#x8FDC;&#x5927;&#x4E8E;16G&#x3002;</p>
<p>&#x8003;&#x8651;&#x5230;&#x4E00;&#x4E2A;&#x8868;&#x4E0A;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x4E2A;&#x7D22;&#x5F15;&#x3001;&#x8054;&#x5408;&#x7D22;&#x5F15;&#x3001;&#x6570;&#x636E;&#x884C;&#x5360;&#x7528;&#x66F4;&#x5C0F;&#x7B49;&#x60C5;&#x51B5;&#xFF0C;&#x5B9E;&#x9645;&#x7684;&#x5360;&#x7528;&#x6BD4;&#x901A;&#x5E38;&#x5927;&#x4E8E;1/10&#xFF0C;&#x67D0;&#x4E9B;&#x65F6;&#x5019;&#x80FD;&#x8FBE;&#x5230;1/3&#x3002;<strong>&#x5728;&#x57FA;&#x4E8E;&#x7D22;&#x5F15;&#x7684;&#x5B58;&#x50A8;&#x67B6;&#x6784;&#x4E2D;&#xFF0C;<code>&#x7D22;&#x5F15;:&#x6570;&#x636E;&#x7684;&#x5360;&#x7528;&#x6BD4;</code>&#x8FC7;&#x9AD8;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x7D22;&#x5F15;&#x65E0;&#x6CD5;&#x5168;&#x90E8;&#x88C5;&#x5165;&#x5185;&#x5B58;</strong>&#x3002;</p>
<h1 id="&#x5176;&#x4ED6;&#x7ED3;&#x6784;&#x7684;&#x95EE;&#x9898;"><a href="#&#x5176;&#x4ED6;&#x7ED3;&#x6784;&#x7684;&#x95EE;&#x9898;" class="headerlink" title="&#x5176;&#x4ED6;&#x7ED3;&#x6784;&#x7684;&#x95EE;&#x9898;"></a>&#x5176;&#x4ED6;&#x7ED3;&#x6784;&#x7684;&#x95EE;&#x9898;</h1><p>&#x7531;&#x4E8E;&#x65E0;&#x6CD5;&#x88C5;&#x5165;&#x5185;&#x5B58;&#xFF0C;&#x5219;&#x5FC5;&#x7136;&#x4F9D;&#x8D56;&#x78C1;&#x76D8;&#xFF08;&#x6216;SSD&#xFF09;&#x5B58;&#x50A8;&#x3002;&#x800C;&#x5185;&#x5B58;&#x7684;&#x8BFB;&#x5199;&#x901F;&#x5EA6;&#x662F;&#x78C1;&#x76D8;&#x7684;&#x6210;&#x5343;&#x4E0A;&#x4E07;&#x500D;&#xFF08;&#x4E0E;&#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x6709;&#x5173;&#xFF09;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x6838;&#x5FC3;&#x95EE;&#x9898;&#x662F;&#x201C;<strong>&#x5982;&#x4F55;&#x51CF;&#x5C11;&#x78C1;&#x76D8;&#x8BFB;&#x5199;&#x6B21;&#x6570;</strong>&#x201D;&#x3002;</p>
<p>&#x9996;&#x5148;&#x4E0D;&#x8003;&#x8651;&#x9875;&#x8868;&#x673A;&#x5236;&#xFF0C;&#x5047;&#x8BBE;&#x6BCF;&#x6B21;&#x8BFB;&#x3001;&#x5199;&#x90FD;&#x76F4;&#x63A5;&#x7A7F;&#x900F;&#x5230;&#x78C1;&#x76D8;&#xFF0C;&#x90A3;&#x4E48;&#xFF1A;</p>
<ul>
<li>&#x7EBF;&#x6027;&#x7ED3;&#x6784;&#xFF1A;&#x8BFB;/&#x5199;&#x5E73;&#x5747;O(n)&#x6B21;</li>
<li>&#x4E8C;&#x53C9;&#x641C;&#x7D22;&#x6811;&#xFF08;BST&#xFF09;&#xFF1A;&#x8BFB;/&#x5199;&#x5E73;&#x5747;O(log2(n))&#x6B21;&#xFF1B;&#x5982;&#x679C;&#x6811;&#x4E0D;&#x5E73;&#x8861;&#xFF0C;&#x5219;&#x6700;&#x5DEE;&#x8BFB;/&#x5199;O(n)&#x6B21;</li>
<li>&#x81EA;&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x641C;&#x7D22;&#x6811;&#xFF08;AVL&#xFF09;&#xFF1A;&#x5728;BST&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x52A0;&#x5165;&#x4E86;&#x81EA;&#x5E73;&#x8861;&#x7B97;&#x6CD5;&#xFF0C;&#x8BFB;/&#x5199;&#x6700;&#x5927;O(log2(n))&#x6B21;</li>
<li>&#x7EA2;&#x9ED1;&#x6811;&#xFF08;RBT&#xFF09;&#xFF1A;&#x53E6;&#x4E00;&#x79CD;&#x81EA;&#x5E73;&#x8861;&#x7684;&#x67E5;&#x627E;&#x6811;&#xFF0C;&#x8BFB;/&#x5199;&#x6700;&#x5927;O(log2(n))&#x6B21;</li>
</ul>
<p>BST&#x3001;AVL&#x3001;RBT&#x5F88;&#x597D;&#x7684;&#x5C06;&#x8BFB;&#x5199;&#x6B21;&#x6570;&#x4ECE;O(n)&#x4F18;&#x5316;&#x5230;O(log2(n))&#xFF1B;&#x5176;&#x4E2D;&#xFF0C;AVL&#x548C;RBT&#x90FD;&#x6BD4;BST&#x591A;&#x4E86;&#x81EA;&#x5E73;&#x8861;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x5C06;&#x8BFB;&#x5199;&#x6B21;&#x6570;&#x964D;&#x5230;&#x6700;&#x5927;O(log2(n))&#x3002;</p>
<p>&#x5047;&#x8BBE;&#x4F7F;&#x7528;&#x81EA;&#x589E;&#x4E3B;&#x952E;&#xFF0C;&#x5219;&#x4E3B;&#x952E;&#x672C;&#x8EAB;&#x662F;&#x6709;&#x5E8F;&#x7684;&#xFF0C;&#x6811;&#x7ED3;&#x6784;&#x7684;&#x8BFB;&#x5199;&#x6B21;&#x6570;&#x80FD;&#x591F;&#x4F18;&#x5316;&#x5230;&#x6811;&#x9AD8;&#xFF0C;&#x6811;&#x9AD8;&#x8D8A;&#x4F4E;&#x8BFB;&#x5199;&#x6B21;&#x6570;&#x8D8A;&#x5C11;&#xFF1B;&#x81EA;&#x5E73;&#x8861;&#x4FDD;&#x8BC1;&#x4E86;&#x6811;&#x7ED3;&#x6784;&#x7684;&#x7A33;&#x5B9A;&#x3002;&#x5982;&#x679C;&#x60F3;&#x8FDB;&#x4E00;&#x6B65;&#x4F18;&#x5316;&#xFF0C;&#x53EF;&#x4EE5;&#x5F15;&#x5165;B&#x6811;&#x548C;B+&#x6811;&#x3002;</p>
<h1 id="B&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;"><a href="#B&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;" class="headerlink" title="B&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;"></a>B&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;</h1><blockquote>
<p>&#x5F88;&#x591A;&#x6587;&#x7AE0;&#x5C06;B&#x6811;&#x8BEF;&#x79F0;&#x4E3A;B-&#xFF08;&#x51CF;&#xFF09;&#x6811;&#xFF0C;&#x8FD9;&#x53EF;&#x80FD;&#x662F;&#x5BF9;&#x5176;&#x82F1;&#x6587;&#x540D;&#x201C;B-Tree&#x201D;&#x7684;&#x8BEF;&#x89E3;&#xFF08;&#x66F4;&#x6709;&#x751A;&#x8005;&#xFF0C;&#x5C06;B&#x6811;&#x79F0;&#x4E3A;&#x4E8C;&#x53C9;&#x6811;&#x6216;&#x4E8C;&#x53C9;&#x641C;&#x7D22;&#x6811;&#xFF09;&#x3002;&#x7279;&#x522B;&#x662F;&#x4E0E;B+&#x6811;&#x4E00;&#x8D77;&#x8BB2;&#x7684;&#x65F6;&#x5019;&#x3002;&#x60F3;&#x5F53;&#x7136;&#x7684;&#x8BA4;&#x4E3A;&#x6709;B+&#xFF08;&#x52A0;&#xFF09;&#x6811;&#x5C31;&#x6709;B-&#xFF08;&#x51CF;&#xFF09;&#x6811;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;B+&#x6811;&#x7684;&#x82F1;&#x6587;&#x540D;&#x662F;&#x201C;B+-Tree&#x201D;&#x3002;</p>
</blockquote>
<p>&#x5982;&#x679C;&#x629B;&#x5F00;&#x7EF4;&#x62A4;&#x64CD;&#x4F5C;&#xFF0C;&#x90A3;&#x4E48;B&#x6811;&#x5C31;&#x50CF;&#x4E00;&#x68F5;&#x201C;m&#x53C9;&#x641C;&#x7D22;&#x6811;&#x201D;&#xFF08;m&#x662F;&#x5B50;&#x6811;&#x7684;&#x6700;&#x5927;&#x4E2A;&#x6570;&#xFF09;&#xFF0C;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A;O(logm(n))&#x3002;&#x7136;&#x800C;&#xFF0C;B&#x6811;&#x8BBE;&#x8BA1;&#x4E86;&#x4E00;&#x79CD;&#x9AD8;&#x6548;&#x7B80;&#x5355;&#x7684;&#x7EF4;&#x62A4;&#x64CD;&#x4F5C;&#xFF0C;&#x4F7F;B&#x6811;&#x7684;&#x6DF1;&#x5EA6;&#x7EF4;&#x6301;&#x5728;&#x7EA6;log(ceil(m/2))(n)~logm(n)&#x4E4B;&#x95F4;&#xFF0C;<strong>&#x5927;&#x5927;&#x964D;&#x4F4E;&#x6811;&#x9AD8;</strong>&#x3002;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;MySQL&#x7684;B&#x6811;&#x7D22;&#x5F15;&#x4E0E;&#x7D22;&#x5F15;&#x4F18;&#x5316;/B&#x6811;.png" alt="B&#x6811;"></p>
<blockquote>
<p>&#x518D;&#x6B21;&#x5F3A;&#x8C03;&#xFF1A;</p>
<p>&#x4E0D;&#x8981;&#x7EA0;&#x7ED3;&#x4E8E;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#xFF0C;&#x4E0E;&#x5355;&#x7EAF;&#x7684;&#x7B97;&#x6CD5;&#x4E0D;&#x540C;&#xFF0C;&#x78C1;&#x76D8;IO&#x6B21;&#x6570;&#x624D;&#x662F;&#x66F4;&#x5927;&#x7684;&#x5F71;&#x54CD;&#x56E0;&#x7D20;&#x3002;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x63A8;&#x5BFC;&#x770B;&#x770B;&#xFF0C;B&#x6811;&#x4E0E;AVL&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x662F;&#x76F8;&#x540C;&#x7684;&#xFF0C;&#x4F46;&#x7531;&#x4E8E;B&#x6811;&#x7684;&#x5C42;&#x6570;&#x5C11;&#xFF0C;&#x78C1;&#x76D8;IO&#x6B21;&#x6570;&#x5C11;&#xFF0C;&#x5B9E;&#x8DF5;&#x4E2D;B&#x6811;&#x7684;&#x6027;&#x80FD;&#x8981;&#x4F18;&#x4E8E;AVL&#x7B49;&#x4E8C;&#x53C9;&#x6811;&#x3002;</p>
</blockquote>
<p>&#x540C;&#x4E8C;&#x53C9;&#x641C;&#x7D22;&#x6811;&#x7C7B;&#x4F3C;&#xFF0C;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x5B58;&#x50A8;&#x4E86;&#x591A;&#x4E2A;key&#x548C;&#x5B50;&#x6811;&#xFF0C;&#x5B50;&#x6811;&#x4E0E;key&#x6309;&#x987A;&#x5E8F;&#x6392;&#x5217;&#x3002;</p>
<p>&#x9875;&#x8868;&#x7684;&#x76EE;&#x7684;&#x662F;&#x6269;&#x5C55;&#x5185;&#x5B58;+&#x52A0;&#x901F;&#x78C1;&#x76D8;&#x8BFB;&#x5199;&#x3002;&#x4E00;&#x4E2A;&#x9875;&#xFF08;Page&#xFF09;&#x901A;&#x5E38;4K&#xFF08;&#x7B49;&#x4E8E;&#x78C1;&#x76D8;&#x6570;&#x636E;&#x5757;block&#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x89C1;inode&#x4E0E;block&#x7684;&#x5206;&#x6790;&#xFF09;&#xFF0C;&#x4ECE;&#x78C1;&#x76D8;&#x8BFB;&#x5199;&#x7684;&#x89D2;&#x5EA6;&#x51FA;&#x53D1;&#xFF0C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x6BCF;&#x6B21;&#x4EE5;&#x9875;&#x4E3A;&#x5355;&#x4F4D;&#x5C06;&#x5185;&#x5BB9;&#x4ECE;&#x78C1;&#x76D8;&#x52A0;&#x8F7D;&#x5230;&#x5185;&#x5B58;&#xFF08;&#x4EE5;&#x644A;&#x5206;&#x5BFB;&#x9053;&#x6210;&#x672C;&#xFF09;&#xFF0C;&#x4FEE;&#x6539;&#x9875;&#x540E;&#xFF0C;&#x518D;&#x62E9;&#x671F;&#x5C06;&#x8BE5;&#x9875;&#x5199;&#x56DE;&#x78C1;&#x76D8;&#x3002;&#x8003;&#x8651;&#x5230;&#x9875;&#x8868;&#x7684;&#x826F;&#x597D;&#x6027;&#x8D28;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x7684;&#x5927;&#x5C0F;&#x7EA6;&#x7B49;&#x4E8E;&#x4E00;&#x4E2A;&#x9875;&#xFF08;&#x4F7F;m&#x975E;&#x5E38;&#x5927;&#xFF09;&#xFF0C;&#x8FD9;&#x6BCF;&#x6B21;&#x52A0;&#x8F7D;&#x7684;&#x4E00;&#x4E2A;&#x9875;&#x5C31;&#x80FD;&#x5B8C;&#x6574;&#x8986;&#x76D6;&#x4E00;&#x4E2A;&#x8282;&#x70B9;&#xFF0C;&#x4EE5;&#x4FBF;&#x9009;&#x62E9;&#x4E0B;&#x4E00;&#x5C42;&#x5B50;&#x6811;&#xFF1B;&#x5BF9;&#x5B50;&#x6811;&#x540C;&#x7406;&#x3002;&#x5BF9;&#x4E8E;&#x9875;&#x8868;&#x6765;&#x8BF4;&#xFF0C;AVL&#xFF08;&#x6216;RBT&#xFF09;&#x76F8;&#x5F53;&#x4E8E;1&#x4E2A;key+2&#x4E2A;&#x5B50;&#x6811;&#x7684;B&#x6811;&#xFF0C;&#x7531;&#x4E8E;&#x903B;&#x8F91;&#x4E0A;&#x76F8;&#x90BB;&#x7684;&#x8282;&#x70B9;&#xFF0C;&#x7269;&#x7406;&#x4E0A;&#x901A;&#x5E38;&#x4E0D;&#x76F8;&#x90BB;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x8BFB;&#x5165;&#x4E00;&#x4E2A;4k&#x9875;&#xFF0C;&#x9875;&#x9762;&#x5185;&#x7EDD;&#x5927;&#x90E8;&#x5206;&#x7A7A;&#x95F4;&#x90FD;&#x5C06;&#x662F;&#x65E0;&#x6548;&#x6570;&#x636E;&#x3002;</p>
<p>&#x5047;&#x8BBE;key&#x3001;&#x5B50;&#x6811;&#x8282;&#x70B9;&#x6307;&#x9488;&#x5747;&#x5360;&#x7528;4B&#xFF0C;&#x5219;B&#x6811;&#x8282;&#x70B9;&#x6700;&#x5927;<code>m * (4 + 4) = 8m B</code>&#xFF1B;&#x9875;&#x9762;&#x5927;&#x5C0F;4KB&#x3002;&#x5219;<code>m = 4 * 1024 / 8 = 512</code>&#xFF0C;&#x4E00;&#x4E2A;512&#x53C9;&#x7684;B&#x6811;&#xFF0C;1000w&#x7684;&#x6570;&#x636E;&#xFF0C;&#x6DF1;&#x5EA6;&#x6700;&#x5927; <code>log(512/2)(10^7) = 3.02 ~= 4</code>&#x3002;&#x5BF9;&#x6BD4;&#x4E8C;&#x53C9;&#x6811;&#x5982;AVL&#x7684;&#x6DF1;&#x5EA6;&#x4E3A;<code>log(2)(10^7) = 23.25 ~= 24</code>&#xFF0C;&#x76F8;&#x5DEE;&#x4E86;5&#x500D;&#x4EE5;&#x4E0A;&#x3002;&#x9707;&#x60CA;&#xFF01;B&#x6811;&#x7D22;&#x5F15;&#x6DF1;&#x5EA6;&#x7ADF;&#x7136;&#x5982;&#x6B64;&#xFF01;</p>
<p>&#x53E6;&#x5916;&#xFF0C;B&#x6811;<strong>&#x5BF9;&#x5C40;&#x90E8;&#x6027;&#x539F;&#x7406;&#x975E;&#x5E38;&#x53CB;&#x597D;</strong>&#x3002;&#x5982;&#x679C;key&#x6BD4;&#x8F83;&#x5C0F;&#xFF08;&#x6BD4;&#x5982;&#x4E0A;&#x9762;4B&#x7684;&#x81EA;&#x589E;key&#xFF09;&#xFF0C;&#x5219;&#x9664;&#x4E86;&#x9875;&#x8868;&#x7684;&#x52A0;&#x6210;&#xFF0C;&#x7F13;&#x5B58;&#x8FD8;&#x80FD;&#x8FDB;&#x4E00;&#x6B65;&#x9884;&#x8BFB;&#x52A0;&#x901F;&#x3002;&#x7F8E;&#x6ECB;&#x6ECB;~</p>
<h1 id="B-&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;"><a href="#B-&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;" class="headerlink" title="B+&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;"></a>B+&#x6811;&#x89E3;&#x51B3;&#x4E86;&#x4EC0;&#x4E48;&#x95EE;&#x9898;</h1><h2 id="B&#x6811;&#x7684;&#x5269;&#x4F59;&#x95EE;&#x9898;"><a href="#B&#x6811;&#x7684;&#x5269;&#x4F59;&#x95EE;&#x9898;" class="headerlink" title="B&#x6811;&#x7684;&#x5269;&#x4F59;&#x95EE;&#x9898;"></a>B&#x6811;&#x7684;&#x5269;&#x4F59;&#x95EE;&#x9898;</h2><p>&#x7136;&#x800C;&#xFF0C;&#x5982;&#x679C;&#x8981;&#x5B9E;&#x9645;&#x5E94;&#x7528;&#x5230;&#x6570;&#x636E;&#x5E93;&#x7684;&#x7D22;&#x5F15;&#x4E2D;&#xFF0C;B&#x6811;&#x8FD8;&#x6709;&#x4E00;&#x4E9B;&#x95EE;&#x9898;&#xFF1A;</p>
<ol>
<li>&#x672A;&#x5B9A;&#x4F4D;&#x6570;&#x636E;&#x884C;</li>
<li>&#x65E0;&#x6CD5;&#x5904;&#x7406;&#x8303;&#x56F4;&#x67E5;&#x8BE2;</li>
</ol>
<h3 id="&#x95EE;&#x9898;1"><a href="#&#x95EE;&#x9898;1" class="headerlink" title="&#x95EE;&#x9898;1"></a>&#x95EE;&#x9898;1</h3><p>&#x6570;&#x636E;&#x8868;&#x7684;&#x8BB0;&#x5F55;&#x6709;&#x591A;&#x4E2A;&#x5B57;&#x6BB5;&#xFF0C;&#x4EC5;&#x4EC5;&#x5B9A;&#x4F4D;&#x5230;&#x4E3B;&#x952E;&#x662F;&#x4E0D;&#x591F;&#x7684;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x5B9A;&#x4F4D;&#x5230;&#x6570;&#x636E;&#x884C;&#x3002;&#x6709;3&#x4E2A;&#x65B9;&#x6848;&#x89E3;&#x51B3;&#xFF1A;</p>
<ol>
<li>&#x76F4;&#x63A5;&#x5C06;key&#x5BF9;&#x5E94;&#x7684;&#x6570;&#x636E;&#x884C;&#xFF08;&#x53EF;&#x80FD;&#x5BF9;&#x5E94;&#x591A;&#x884C;&#xFF09;&#x5B58;&#x50A8;&#x5728;&#x8282;&#x70B9;&#x4E2D;&#x3002;</li>
<li>&#x6570;&#x636E;&#x884C;&#x5355;&#x72EC;&#x5B58;&#x50A8;&#xFF1B;&#x8282;&#x70B9;&#x4E2D;&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;&#xFF0C;&#x5B9A;&#x4F4D;key&#x5BF9;&#x5E94;&#x6570;&#x636E;&#x884C;&#x7684;&#x4F4D;&#x7F6E;&#x3002;</li>
<li>&#x4FEE;&#x6539;key&#x4E0E;&#x5B50;&#x6811;&#x7684;&#x5224;&#x65AD;&#x903B;&#x8F91;&#xFF0C;&#x4F7F;&#x5B50;&#x6811;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;&#x4E0A;&#x4E00;key&#x5C0F;&#x4E8E;&#x4E0B;&#x4E00;key&#xFF0C;&#x6700;&#x7EC8;&#x6240;&#x6709;&#x8BBF;&#x95EE;&#x90FD;&#x5C06;&#x843D;&#x4E8E;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF1B;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4E2D;&#x76F4;&#x63A5;&#x5B58;&#x50A8;&#x6570;&#x636E;&#x884C;&#x6216;&#x6570;&#x636E;&#x884C;&#x7684;&#x4F4D;&#x7F6E;&#x3002;</li>
</ol>
<p>&#x65B9;&#x6848;1&#x4E2D;&#xFF0C;&#x6570;&#x636E;&#x884C;&#x901A;&#x5E38;&#x975E;&#x5E38;&#x5927;&#xFF0C;&#x5B58;&#x50A8;&#x6570;&#x636E;&#x884C;&#x5C06;&#x51CF;&#x5C11;&#x9875;&#x9762;&#x4E2D;&#x7684;&#x5B50;&#x6811;&#x4E2A;&#x6570;&#xFF0C;m&#x51CF;&#x5C0F;&#x6811;&#x9AD8;&#x589E;&#x5927;&#x3002;&#x5047;&#x8BBE;&#x6570;&#x636E;&#x884C;&#x5360;&#x7528;200B&#xFF0C;&#x53EF;&#x5FFD;&#x7565;&#x7EC4;&#x7EC7;B&#x6811;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x5219;&#x65B0;&#x7684;<code>m = 4 * 1024 / 200 = 20.48 ~= 21</code>&#xFF0C;&#x6DF1;&#x5EA6;&#x6700;&#x5927; <code>log(21/2)(10^7) ~= 7</code>&#x3002;&#x589E;&#x52A0;&#x4E86;&#x4E00;&#x500D;&#x4EE5;&#x4E0A;&#x7684;IO&#xFF0C;&#x4E0D;&#x8003;&#x8651;&#x3002;</p>
<p>&#x65B9;&#x6848;2&#x4E2D;&#xFF0C;&#x8282;&#x70B9;&#x589E;&#x52A0;&#x4E86;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;&#x3002;&#x5047;&#x8BBE;&#x662F;4B&#x7684;&#x6307;&#x9488;&#xFF0C;&#x5219;&#x65B0;&#x7684;<code>m = 4 * 1024 / 12 = 341.33 ~= 341</code>&#xFF0C;&#x6DF1;&#x5EA6;&#x6700;&#x5927; <code>log(341/2)(10^7) = 3.14 ~= 4</code>&#x3002;&#x4E0E;3&#x5DEE;&#x522B;&#x4E0D;&#x5927;&#xFF0C;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x3002;</p>
<p>&#x65B9;&#x6848;3&#x7684;&#x8282;&#x70B9;m&#x4E0E;&#x6DF1;&#x5EA6;&#x4E0D;&#x53D8;&#xFF0C;&#x4F46;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x53D8;&#x4E3A;&#x7A33;&#x5B9A;&#x7684;O(logm(n))&#x3002;&#x8003;&#x8651;&#x3002;</p>
<h3 id="&#x95EE;&#x9898;2"><a href="#&#x95EE;&#x9898;2" class="headerlink" title="&#x95EE;&#x9898;2"></a>&#x95EE;&#x9898;2</h3><p>&#x5B9E;&#x9645;&#x4E1A;&#x52A1;&#x4E2D;&#xFF0C;&#x8303;&#x56F4;&#x67E5;&#x8BE2;&#x7684;&#x9891;&#x7387;&#x975E;&#x5E38;&#x9AD8;&#xFF0C;B&#x6811;&#x53EA;&#x80FD;&#x5B9A;&#x4F4D;&#x5230;&#x4E00;&#x4E2A;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;&#xFF08;&#x53EF;&#x80FD;&#x5BF9;&#x5E94;&#x591A;&#x884C;&#xFF09;&#xFF0C;&#x5F88;&#x96BE;&#x5904;&#x7406;&#x8303;&#x56F4;&#x67E5;&#x8BE2;&#x3002;&#x7ED9;&#x51FA;2&#x79CD;&#x65B9;&#x6848;&#xFF1A;</p>
<ol>
<li>&#x4E0D;&#x6539;&#x52A8;&#xFF1A;&#x67E5;&#x8BE2;&#x7684;&#x65F6;&#x5019;&#x5148;&#x67E5;&#x5230;&#x5DE6;&#x754C;&#xFF0C;&#x518D;&#x67E5;&#x5230;&#x53F3;&#x754C;&#xFF0C;&#x7136;&#x540E;DFS&#xFF08;&#x6216;BFS&#xFF09;&#x904D;&#x5386;&#x5DE6;&#x754C;&#x3001;&#x53F3;&#x754C;&#x4E4B;&#x95F4;&#x7684;&#x8282;&#x70B9;&#x3002;</li>
<li>&#x5728;&#x201C;&#x95EE;&#x9898;1-&#x65B9;&#x6848;3&#x201D;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#xFF0C;&#x7531;&#x4E8E;&#x6240;&#x6709;&#x6570;&#x636E;&#x884C;&#x90FD;&#x5B58;&#x50A8;&#x5728;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF0C;B&#x6811;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x672C;&#x8EAB;&#x4E5F;&#x662F;&#x6709;&#x5E8F;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#xFF0C;&#x6307;&#x5411;&#x5F53;&#x524D;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x6309;&#x4E3B;&#x952E;&#x987A;&#x5E8F;&#x7684;&#x4E0B;&#x4E00;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF1B;&#x67E5;&#x8BE2;&#x65F6;&#x5148;&#x67E5;&#x5230;&#x5DE6;&#x754C;&#xFF0C;&#x518D;&#x67E5;&#x5230;&#x53F3;&#x754C;&#xFF0C;&#x7136;&#x540E;&#x4ECE;&#x5DE6;&#x754C;&#x5230;&#x6709;&#x754C;&#x7EBF;&#x6027;&#x904D;&#x5386;&#x3002;</li>
</ol>
<p>&#x4E4D;&#x4E00;&#x770B;&#x611F;&#x89C9;&#x65B9;&#x6848;1&#x6BD4;&#x65B9;&#x6848;2&#x597D;&#x2014;&#x2014;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x548C;&#x5E38;&#x6570;&#x9879;&#x90FD;&#x4E00;&#x6837;&#xFF0C;&#x65B9;&#x6848;1&#x8FD8;&#x4E0D;&#x9700;&#x8981;&#x6539;&#x52A8;&#x3002;&#x4F46;&#x662F;&#x522B;&#x5FD8;&#x4E86;&#x5C40;&#x90E8;&#x6027;&#x539F;&#x7406;&#xFF0C;&#x4E0D;&#x7BA1;&#x8282;&#x70B9;&#x4E2D;&#x5B58;&#x50A8;&#x7684;&#x662F;&#x6570;&#x636E;&#x884C;&#x8FD8;&#x662F;&#x6570;&#x636E;&#x884C;&#x4F4D;&#x7F6E;&#xFF0C;&#x65B9;&#x6848;2&#x7684;&#x597D;&#x5904;&#x5728;&#x4E8E;&#xFF0C;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x8FDE;&#x7EED;&#x5B58;&#x50A8;&#xFF0C;&#x5BF9;&#x9875;&#x8868;&#x548C;&#x7F13;&#x5B58;&#x53CB;&#x597D;&#x3002;&#x800C;&#x65B9;&#x6848;1&#x5219;&#x9762;&#x4E34;&#x8282;&#x70B9;&#x903B;&#x8F91;&#x76F8;&#x90BB;&#x3001;&#x7269;&#x7406;&#x5206;&#x79BB;&#x7684;&#x7F3A;&#x70B9;&#x3002;</p>
<h2 id="&#x5F15;&#x51FA;B-&#x6811;"><a href="#&#x5F15;&#x51FA;B-&#x6811;" class="headerlink" title="&#x5F15;&#x51FA;B+&#x6811;"></a>&#x5F15;&#x51FA;B+&#x6811;</h2><p>&#x7EFC;&#x4E0A;&#xFF0C;&#x95EE;&#x9898;1&#x7684;&#x65B9;&#x6848;2&#x4E0E;&#x95EE;&#x9898;2&#x7684;&#x65B9;&#x6848;1&#x53EF;&#x6574;&#x5408;&#x4E3A;&#x4E00;&#x79CD;&#x65B9;&#x6848;&#xFF08;&#x57FA;&#x4E8E;B&#x6811;&#x7684;&#x7D22;&#x5F15;&#xFF09;&#xFF0C;&#x95EE;&#x9898;1&#x7684;&#x65B9;&#x6848;3&#x4E0E;&#x95EE;&#x9898;2&#x7684;&#x65B9;&#x6848;2&#x53EF;&#x6574;&#x5408;&#x4E3A;&#x4E00;&#x79CD;&#xFF08;&#x57FA;&#x4E8E;B+&#x6811;&#x7684;&#x7D22;&#x5F15;&#xFF09;&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x6570;&#x636E;&#x5E93;&#x3001;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x6709;&#x4E9B;&#x91C7;&#x7528;&#x4E86;B&#x6811;&#xFF0C;&#x6709;&#x4E9B;&#x91C7;&#x7528;B+&#x6811;&#x3002;</p>
<p><strong>&#x7531;&#x4E8E;&#x67D0;&#x4E9B;&#x7334;&#x5B50;&#x6682;&#x672A;&#x660E;&#x767D;&#x7684;&#x539F;&#x56E0;</strong>&#xFF0C;&#x5305;&#x62EC;MySQL&#x5728;&#x5185;&#x7684;&#x4E3B;&#x6D41;&#x6570;&#x636E;&#x5E93;&#x591A;&#x9009;&#x62E9;&#x4E86;B+&#x6811;&#x3002;&#x5373;&#xFF1A;</p>
<p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/&#x6D45;&#x8C08;MySQL&#x7684;B&#x6811;&#x7D22;&#x5F15;&#x4E0E;&#x7D22;&#x5F15;&#x4F18;&#x5316;/B+&#x6811;.png" alt="B+&#x6811;"></p>
<p>&#x4E3B;&#x8981;&#x53D8;&#x52A8;&#x5982;&#x4E0A;&#x6240;&#x8FF0;&#xFF1A;</p>
<ul>
<li>&#x4FEE;&#x6539;key&#x4E0E;&#x5B50;&#x6811;&#x7684;&#x7EC4;&#x7EC7;&#x903B;&#x8F91;&#xFF0C;&#x5C06;&#x7D22;&#x5F15;&#x8BBF;&#x95EE;&#x90FD;&#x843D;&#x5230;&#x53F6;&#x5B50;&#x8282;&#x70B9;</li>
<li>&#x6309;&#x987A;&#x5E8F;&#x5C06;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4E32;&#x8D77;&#x6765;&#xFF08;&#x65B9;&#x4FBF;&#x8303;&#x56F4;&#x67E5;&#x8BE2;&#xFF09;</li>
</ul>
<h2 id="B&#x6811;&#x548C;B-&#x6811;&#x7684;&#x589E;&#x3001;&#x5220;&#x3001;&#x67E5;&#x8FC7;&#x7A0B;"><a href="#B&#x6811;&#x548C;B-&#x6811;&#x7684;&#x589E;&#x3001;&#x5220;&#x3001;&#x67E5;&#x8FC7;&#x7A0B;" class="headerlink" title="B&#x6811;&#x548C;B+&#x6811;&#x7684;&#x589E;&#x3001;&#x5220;&#x3001;&#x67E5;&#x8FC7;&#x7A0B;"></a>B&#x6811;&#x548C;B+&#x6811;&#x7684;&#x589E;&#x3001;&#x5220;&#x3001;&#x67E5;&#x8FC7;&#x7A0B;</h2><p>B&#x6811;&#x7684;&#x589E;&#x5220;&#x8FC7;&#x7A0B;&#x6682;&#x65F6;&#x53EF;&#x53C2;&#x8003;<a href="http://blog.csdn.net/v_JULY_v/article/details/6530142/" target="_blank" rel="external">&#x4ECE;B&#x6811;&#x3001;B+&#x6811;&#x3001;B*&#x6811;&#x8C08;&#x5230;R &#x6811;</a>&#x7684;&#x201C;6&#x3001;B&#x6811;&#x7684;&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#x201D;&#x5C0F;&#x8282;&#xFF0C;B+&#x6811;&#x7684;&#x589E;&#x5220;&#x540C;&#x7406;&#x3002;&#x6B64;&#x5904;&#x6682;&#x4E0D;&#x8D58;&#x8FF0;&#x3002;</p>
<!--TODO 20180306 举例-->
<h1 id="Mysql&#x7D22;&#x5F15;&#x4F18;&#x5316;"><a href="#Mysql&#x7D22;&#x5F15;&#x4F18;&#x5316;" class="headerlink" title="Mysql&#x7D22;&#x5F15;&#x4F18;&#x5316;"></a>Mysql&#x7D22;&#x5F15;&#x4F18;&#x5316;</h1><p>&#x6839;&#x636E;B+&#x6811;&#x7684;&#x6027;&#x8D28;&#xFF0C;&#x5F88;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#x5404;&#x79CD;&#x5E38;&#x89C1;&#x7684;MySQL&#x7D22;&#x5F15;&#x4F18;&#x5316;&#x601D;&#x8DEF;&#x3002;</p>
<blockquote>
<p>&#x6682;&#x4E0D;&#x8003;&#x8651;&#x4E0D;&#x540C;&#x5F15;&#x64CE;&#x4E4B;&#x95F4;&#x7684;&#x533A;&#x522B;&#x3002;</p>
</blockquote>
<h2 id="&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x81EA;&#x589E;key&#x4F5C;&#x4E3A;&#x4E3B;&#x952E;"><a href="#&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x81EA;&#x589E;key&#x4F5C;&#x4E3A;&#x4E3B;&#x952E;" class="headerlink" title="&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x81EA;&#x589E;key&#x4F5C;&#x4E3A;&#x4E3B;&#x952E;"></a>&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x81EA;&#x589E;key&#x4F5C;&#x4E3A;&#x4E3B;&#x952E;</h2><p>&#x524D;&#x9762;&#x7684;&#x5206;&#x6790;&#x4E2D;&#xFF0C;&#x5047;&#x8BBE;&#x7528;4B&#x7684;&#x81EA;&#x589E;key&#x4F5C;&#x4E3A;&#x7D22;&#x5F15;&#xFF0C;&#x5219;m&#x53EF;&#x8FBE;&#x5230;512&#xFF0C;&#x5C42;&#x9AD8;&#x4EC5;&#x6709;3&#x3002;&#x4F7F;&#x7528;&#x81EA;&#x589E;&#x7684;key&#x6709;&#x4E24;&#x4E2A;&#x597D;&#x5904;&#xFF1A;</p>
<ol>
<li>&#x81EA;&#x589E;key&#x4E00;&#x822C;&#x4E3A;int&#x7B49;&#x6574;&#x6570;&#x578B;&#xFF0C;key&#x6BD4;&#x8F83;&#x7D27;&#x51D1;&#xFF0C;&#x8FD9;&#x6837;m&#x53EF;&#x4EE5;&#x975E;&#x5E38;&#x5927;&#xFF0C;&#x800C;&#x4E14;&#x7D22;&#x5F15;&#x5360;&#x7528;&#x7A7A;&#x95F4;&#x5C0F;&#x3002;&#x6700;&#x6781;&#x7AEF;&#x7684;&#x4F8B;&#x5B50;&#xFF0C;&#x5982;&#x679C;&#x4F7F;&#x7528;50B&#x7684;varchar&#xFF08;&#x5305;&#x62EC;&#x957F;&#x5EA6;&#xFF09;&#xFF0C;&#x90A3;&#x4E48;<code>m = 4 * 1024 / 54m = 75.85 ~= 76</code>&#xFF0C;&#x6DF1;&#x5EA6;&#x6700;&#x5927; <code>log(76/2)(10^7) = 4.43 ~= 5</code>&#xFF0C;&#x518D;&#x52A0;&#x4E0A;cache&#x7F3A;&#x5931;&#x3001;&#x5B57;&#x7B26;&#x4E32;&#x6BD4;&#x8F83;&#x7684;&#x6210;&#x672C;&#xFF0C;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x589E;&#x52A0;&#x8F83;&#x5927;&#x3002;&#x540C;&#x65F6;&#xFF0C;key&#x7531;4B&#x589E;&#x957F;&#x5230;50B&#xFF0C;&#x6574;&#x68F5;&#x7D22;&#x5F15;&#x6811;&#x7684;&#x7A7A;&#x95F4;&#x5360;&#x7528;&#x589E;&#x957F;&#x4E5F;&#x662F;&#x6781;&#x4E3A;&#x6050;&#x6016;&#x7684;&#xFF08;&#x5982;&#x679C;&#x4E8C;&#x7EA7;&#x7D22;&#x5F15;&#x4F7F;&#x7528;&#x4E3B;&#x952E;&#x5B9A;&#x4F4D;&#x6570;&#x636E;&#x884C;&#xFF0C;&#x5219;&#x7A7A;&#x95F4;&#x589E;&#x957F;&#x66F4;&#x52A0;&#x4E25;&#x91CD;&#xFF09;&#x3002;</li>
<li>&#x81EA;&#x589E;&#x7684;&#x6027;&#x8D28;&#x4F7F;&#x5F97;&#x65B0;&#x6570;&#x636E;&#x884C;&#x7684;&#x63D2;&#x5165;&#x8BF7;&#x6C42;&#x5FC5;&#x7136;&#x843D;&#x5230;&#x7D22;&#x5F15;&#x6811;&#x7684;&#x6700;&#x53F3;&#x4FA7;&#xFF0C;&#x53D1;&#x751F;&#x8282;&#x70B9;&#x5206;&#x88C2;&#x7684;&#x9891;&#x7387;&#x8F83;&#x4F4E;&#xFF0C;&#x7406;&#x60F3;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x7D22;&#x5F15;&#x6811;&#x53EF;&#x4EE5;&#x8FBE;&#x5230;&#x201C;&#x6EE1;&#x201D;&#x7684;&#x72B6;&#x6001;&#x3002;&#x7D22;&#x5F15;&#x6811;&#x6EE1;&#xFF0C;&#x4E00;&#x65B9;&#x9762;&#x5C42;&#x9AD8;&#x66F4;&#x4F4E;&#xFF0C;&#x4E00;&#x65B9;&#x9762;&#x5220;&#x9664;&#x8282;&#x70B9;&#x65F6;&#x53D1;&#x751F;&#x8282;&#x70B9;&#x5408;&#x5E76;&#x7684;&#x9891;&#x7387;&#x4E5F;&#x8F83;&#x4F4E;&#x3002;</li>
</ol>
<blockquote>
<p>&#x4F18;&#x5316;&#x7ECF;&#x5386;&#xFF1A;</p>
<p>&#x7334;&#x5B50;&#x66FE;&#x4F7F;&#x7528;varchar(100)&#x7684;&#x5217;&#x505A;&#x8FC7;&#x4E3B;&#x952E;&#xFF0C;&#x5B58;&#x50A8;containerId&#xFF0C;&#x8FC7;&#x4E86;3&#x3001;4&#x5929;100G&#x7684;&#x6570;&#x636E;&#x5E93;&#x5C31;&#x6EE1;&#x4E86;&#xFF0C;DBA&#x5C0F;&#x59D0;&#x59D0;&#x90AE;&#x4EF6;&#x91CC;&#x59D4;&#x5A49;&#x8868;&#x793A;&#x4E86;&#x5BF9;&#x6211;&#x7684;&#x9119;&#x89C6;&#x3002;&#x3002;&#x3002;&#x4E4B;&#x540E;&#x589E;&#x52A0;&#x4E86;&#x81EA;&#x589E;&#x5217;&#x4F5C;&#x4E3A;&#x4E3B;&#x952E;&#xFF0C;containerId&#x4F5C;&#x4E3A;unique&#x7684;&#x4E8C;&#x7EA7;&#x7D22;&#x5F15;&#xFF0C;&#x65F6;&#x95F4;&#x3001;&#x7A7A;&#x95F4;&#x4F18;&#x5316;&#x6548;&#x679C;&#x76F8;&#x5F53;&#x663E;&#x8457;&#x3002;</p>
</blockquote>
<h2 id="&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x5339;&#x914D;"><a href="#&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x5339;&#x914D;" class="headerlink" title="&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x5339;&#x914D;"></a>&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x5339;&#x914D;</h2><p>&#x7D22;&#x5F15;&#x53EF;&#x4EE5;&#x7B80;&#x5355;&#x5982;&#x4E00;&#x4E2A;&#x5217;(a)&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x590D;&#x6742;&#x5982;&#x591A;&#x4E2A;&#x5217;(a, b, c, d)&#xFF0C;&#x5373;<code>&#x8054;&#x5408;&#x7D22;&#x5F15;</code>&#x3002;&#x5982;&#x679C;&#x662F;&#x8054;&#x5408;&#x7D22;&#x5F15;&#xFF0C;&#x90A3;&#x4E48;key&#x4E5F;&#x7531;&#x591A;&#x4E2A;&#x5217;&#x7EC4;&#x6210;&#xFF0C;&#x540C;&#x65F6;&#xFF0C;&#x7D22;&#x5F15;&#x53EA;&#x80FD;&#x7528;&#x4E8E;&#x67E5;&#x627E;key&#x662F;&#x5426;&#x5B58;&#x5728;&#xFF08;&#x76F8;&#x7B49;&#xFF09;&#xFF0C;&#x9047;&#x5230;&#x8303;&#x56F4;&#x67E5;&#x8BE2;(&gt;&#x3001;&lt;&#x3001;between&#x3001;like&#x5DE6;&#x5339;&#x914D;)&#x7B49;&#x5C31;&#x4E0D;&#x80FD;&#x8FDB;&#x4E00;&#x6B65;&#x5339;&#x914D;&#x4E86;&#xFF0C;&#x540E;&#x7EED;&#x9000;&#x5316;&#x4E3A;&#x7EBF;&#x6027;&#x67E5;&#x627E;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x5217;&#x7684;&#x6392;&#x5217;&#x987A;&#x5E8F;&#x51B3;&#x5B9A;&#x4E86;&#x53EF;&#x547D;&#x4E2D;&#x7D22;&#x5F15;&#x7684;&#x5217;&#x6570;&#x3002;</p>
<p>&#x5982;&#x6709;&#x7D22;&#x5F15;(a, b, c, d)&#xFF0C;&#x67E5;&#x8BE2;&#x6761;&#x4EF6;<code>a = 1 and b = 2 and c &gt; 3 and d = 4</code>&#xFF0C;&#x5219;&#x4F1A;&#x5728;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x4F9D;&#x6B21;&#x547D;&#x4E2D;a&#x3001;b&#x3001;c&#xFF0C;&#x65E0;&#x6CD5;&#x547D;&#x4E2D;d&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x5339;&#x914D;&#x539F;&#x5219;&#x3002;</p>
<h3 id="&#x3001;in&#x81EA;&#x52A8;&#x4F18;&#x5316;&#x987A;&#x5E8F;"><a href="#&#x3001;in&#x81EA;&#x52A8;&#x4F18;&#x5316;&#x987A;&#x5E8F;" class="headerlink" title="=&#x3001;in&#x81EA;&#x52A8;&#x4F18;&#x5316;&#x987A;&#x5E8F;"></a>=&#x3001;in&#x81EA;&#x52A8;&#x4F18;&#x5316;&#x987A;&#x5E8F;</h3><p>&#x4E0D;&#x9700;&#x8981;&#x8003;&#x8651;=&#x3001;in&#x7B49;&#x7684;&#x987A;&#x5E8F;&#xFF0C;mysql&#x4F1A;&#x81EA;&#x52A8;&#x4F18;&#x5316;&#x8FD9;&#x4E9B;&#x6761;&#x4EF6;&#x7684;&#x987A;&#x5E8F;&#xFF0C;&#x4EE5;&#x5339;&#x914D;&#x5C3D;&#x53EF;&#x80FD;&#x591A;&#x7684;&#x7D22;&#x5F15;&#x5217;&#x3002;</p>
<p>&#x5982;&#x6709;&#x7D22;&#x5F15;(a, b, c, d)&#xFF0C;&#x67E5;&#x8BE2;&#x6761;&#x4EF6;<code>c &gt; 3 and b = 2 and a = 1 and d &lt; 4</code>&#x4E0E;<code>a = 1 and c &gt; 3 and b = 2 and d &lt; 4</code>&#x7B49;&#x987A;&#x5E8F;&#x90FD;&#x662F;&#x53EF;&#x4EE5;&#x7684;&#xFF0C;MySQL&#x4F1A;&#x81EA;&#x52A8;&#x4F18;&#x5316;&#x4E3A;<code>a = 1 and b = 2 and c &gt; 3 and d &lt; 4</code>&#xFF0C;&#x4F9D;&#x6B21;&#x547D;&#x4E2D;a&#x3001;b&#x3001;c&#x3002;</p>
<h2 id="&#x7D22;&#x5F15;&#x5217;&#x4E0D;&#x80FD;&#x53C2;&#x4E0E;&#x8BA1;&#x7B97;"><a href="#&#x7D22;&#x5F15;&#x5217;&#x4E0D;&#x80FD;&#x53C2;&#x4E0E;&#x8BA1;&#x7B97;" class="headerlink" title="&#x7D22;&#x5F15;&#x5217;&#x4E0D;&#x80FD;&#x53C2;&#x4E0E;&#x8BA1;&#x7B97;"></a>&#x7D22;&#x5F15;&#x5217;&#x4E0D;&#x80FD;&#x53C2;&#x4E0E;&#x8BA1;&#x7B97;</h2><p>&#x6709;&#x7D22;&#x5F15;&#x5217;&#x53C2;&#x4E0E;&#x8BA1;&#x7B97;&#x7684;&#x67E5;&#x8BE2;&#x6761;&#x4EF6;&#x5BF9;&#x7D22;&#x5F15;&#x4E0D;&#x53CB;&#x597D;&#xFF08;&#x751A;&#x81F3;&#x65E0;&#x6CD5;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#xFF09;&#xFF0C;&#x5982;<code>from_unixtime(create_time) = &apos;2014-05-29&apos;</code>&#x3002;</p>
<p>&#x539F;&#x56E0;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5982;&#x4F55;&#x5728;&#x8282;&#x70B9;&#x4E2D;&#x67E5;&#x627E;&#x5230;&#x5BF9;&#x5E94;key&#xFF1F;&#x5982;&#x679C;&#x7EBF;&#x6027;&#x626B;&#x63CF;&#xFF0C;&#x5219;&#x6BCF;&#x6B21;&#x90FD;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x8BA1;&#x7B97;&#xFF0C;&#x6210;&#x672C;&#x592A;&#x9AD8;&#xFF1B;&#x5982;&#x679C;&#x4E8C;&#x5206;&#x67E5;&#x627E;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x9488;&#x5BF9;from_unixtime&#x65B9;&#x6CD5;&#x786E;&#x5B9A;&#x5927;&#x5C0F;&#x5173;&#x7CFB;&#x3002;</p>
<p>&#x56E0;&#x6B64;&#xFF0C;&#x7D22;&#x5F15;&#x5217;&#x4E0D;&#x80FD;&#x53C2;&#x4E0E;&#x8BA1;&#x7B97;&#x3002;&#x4E0A;&#x8FF0;<code>from_unixtime(create_time) = &apos;2014-05-29&apos;</code>&#x8BED;&#x53E5;&#x5E94;&#x8BE5;&#x5199;&#x6210;<code>create_time = unix_timestamp(&apos;2014-05-29&apos;)</code>&#x3002;</p>
<h2 id="&#x80FD;&#x6269;&#x5C55;&#x5C31;&#x4E0D;&#x8981;&#x65B0;&#x5EFA;&#x7D22;&#x5F15;"><a href="#&#x80FD;&#x6269;&#x5C55;&#x5C31;&#x4E0D;&#x8981;&#x65B0;&#x5EFA;&#x7D22;&#x5F15;" class="headerlink" title="&#x80FD;&#x6269;&#x5C55;&#x5C31;&#x4E0D;&#x8981;&#x65B0;&#x5EFA;&#x7D22;&#x5F15;"></a>&#x80FD;&#x6269;&#x5C55;&#x5C31;&#x4E0D;&#x8981;&#x65B0;&#x5EFA;&#x7D22;&#x5F15;</h2><p>&#x5982;&#x679C;&#x5DF2;&#x6709;&#x7D22;&#x5F15;(a)&#xFF0C;&#x60F3;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;(a, b)&#xFF0C;&#x5C3D;&#x91CF;&#x9009;&#x62E9;&#x4FEE;&#x6539;&#x7D22;&#x5F15;(a)&#x4E3A;&#x7D22;&#x5F15;(a, b)&#x3002;</p>
<p>&#x65B0;&#x5EFA;&#x7D22;&#x5F15;&#x7684;&#x6210;&#x672C;&#x5F88;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#x3002;&#x800C;&#x57FA;&#x4E8E;&#x7D22;&#x5F15;(a)&#x4FEE;&#x6539;&#x4E3A;&#x7D22;&#x5F15;(a, b)&#x7684;&#x8BDD;&#xFF0C;MySQL&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5728;&#x7D22;&#x5F15;a&#x7684;B+&#x6811;&#x4E0A;&#xFF0C;&#x7ECF;&#x8FC7;&#x5206;&#x88C2;&#x3001;&#x5408;&#x5E76;&#x7B49;&#x4FEE;&#x6539;&#x4E3A;&#x7D22;&#x5F15;(a, b)&#x3002;</p>
<h2 id="&#x4E0D;&#x9700;&#x8981;&#x5EFA;&#x7ACB;&#x524D;&#x7F00;&#x6709;&#x5305;&#x542B;&#x5173;&#x7CFB;&#x7684;&#x7D22;&#x5F15;"><a href="#&#x4E0D;&#x9700;&#x8981;&#x5EFA;&#x7ACB;&#x524D;&#x7F00;&#x6709;&#x5305;&#x542B;&#x5173;&#x7CFB;&#x7684;&#x7D22;&#x5F15;" class="headerlink" title="&#x4E0D;&#x9700;&#x8981;&#x5EFA;&#x7ACB;&#x524D;&#x7F00;&#x6709;&#x5305;&#x542B;&#x5173;&#x7CFB;&#x7684;&#x7D22;&#x5F15;"></a>&#x4E0D;&#x9700;&#x8981;&#x5EFA;&#x7ACB;&#x524D;&#x7F00;&#x6709;&#x5305;&#x542B;&#x5173;&#x7CFB;&#x7684;&#x7D22;&#x5F15;</h2><p>&#x5982;&#x679C;&#x5DF2;&#x6709;&#x7D22;&#x5F15;(a, b)&#xFF0C;&#x5219;&#x4E0D;&#x9700;&#x8981;&#x518D;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;(a)&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x6709;&#x5FC5;&#x8981;&#xFF0C;&#x5219;&#x4ECD;&#x7136;&#x9700;&#x8003;&#x8651;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;(b)&#x3002;</p>
<h2 id="&#x9009;&#x62E9;&#x533A;&#x5206;&#x5EA6;&#x9AD8;&#x7684;&#x5217;&#x4F5C;&#x7D22;&#x5F15;"><a href="#&#x9009;&#x62E9;&#x533A;&#x5206;&#x5EA6;&#x9AD8;&#x7684;&#x5217;&#x4F5C;&#x7D22;&#x5F15;" class="headerlink" title="&#x9009;&#x62E9;&#x533A;&#x5206;&#x5EA6;&#x9AD8;&#x7684;&#x5217;&#x4F5C;&#x7D22;&#x5F15;"></a>&#x9009;&#x62E9;&#x533A;&#x5206;&#x5EA6;&#x9AD8;&#x7684;&#x5217;&#x4F5C;&#x7D22;&#x5F15;</h2><p>&#x5F88;&#x5BB9;&#x6613;&#x7406;&#x89E3;&#x3002;&#x5982;&#xFF0C;&#x7528;&#x6027;&#x522B;&#x4F5C;&#x7D22;&#x5F15;&#xFF0C;&#x90A3;&#x4E48;&#x7D22;&#x5F15;&#x4EC5;&#x80FD;&#x5C06;1000w&#x884C;&#x6570;&#x636E;&#x5212;&#x5206;&#x4E3A;&#x4E24;&#x90E8;&#x5206;&#xFF08;&#x5982;500w&#x7537;&#xFF0C;500w&#x5973;&#xFF09;&#xFF0C;&#x7D22;&#x5F15;&#x51E0;&#x4E4E;&#x65E0;&#x6548;&#x3002;</p>
<p><code>&#x533A;&#x5206;&#x5EA6;</code>&#x7684;&#x516C;&#x5F0F;&#x662F;<code>count(distinct &lt;col&gt;) / count(*)</code>&#xFF0C;&#x8868;&#x793A;&#x5B57;&#x6BB5;&#x4E0D;&#x91CD;&#x590D;&#x7684;&#x6BD4;&#x4F8B;&#xFF0C;&#x6BD4;&#x4F8B;&#x8D8A;&#x5927;&#x533A;&#x5206;&#x5EA6;&#x8D8A;&#x597D;&#x3002;&#x552F;&#x4E00;&#x952E;&#x7684;&#x533A;&#x5206;&#x5EA6;&#x662F;1&#xFF0C;&#x800C;&#x4E00;&#x4E9B;&#x72B6;&#x6001;&#x3001;&#x6027;&#x522B;&#x5B57;&#x6BB5;&#x53EF;&#x80FD;&#x5728;&#x5927;&#x6570;&#x636E;&#x9762;&#x524D;&#x7684;&#x533A;&#x5206;&#x5EA6;&#x8D8B;&#x8FD1;&#x4E8E;0&#x3002;</p>
<blockquote>
<p>&#x8FD9;&#x4E2A;&#x503C;&#x5F88;&#x96BE;&#x786E;&#x5B9A;&#xFF0C;&#x4E00;&#x822C;&#x9700;&#x8981;join&#x7684;&#x5B57;&#x6BB5;&#x8981;&#x6C42;&#x662F;0.1&#x4EE5;&#x4E0A;&#xFF0C;&#x5373;&#x5E73;&#x5747;1&#x6761;&#x626B;&#x63CF;10&#x6761;&#x8BB0;&#x5F55;&#x3002;</p>
</blockquote>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="http://blog.csdn.net/v_JULY_v/article/details/6530142/" target="_blank" rel="external">&#x4ECE;B&#x6811;&#x3001;B+&#x6811;&#x3001;B*&#x6811;&#x8C08;&#x5230;R &#x6811;</a></li>
<li><a href="https://tech.meituan.com/mysql-index.html" target="_blank" rel="external">MySQL&#x7D22;&#x5F15;&#x539F;&#x7406;&#x53CA;&#x6162;&#x67E5;&#x8BE2;&#x4F18;&#x5316;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;MySQL&amp;#x7684;MyISAM&amp;#x3001;InnoDB&amp;#x5F15;&amp;#x64CE;&amp;#x9ED8;&amp;#x8BA4;&amp;#x5747;&amp;#x4F7F;&amp;#x7528;B+&amp;#x6811;&amp;#x7D22;&amp;#x5F15;&amp;#xFF08;&amp;#x67E5;&amp;#x8BE2;&amp;#x65F6;&amp;#x90FD;&amp;#x663E;&amp;#x793A;&amp;#x4E3A;&amp;#x201C;BTREE&amp;#x201D;&amp;#xFF09;&amp;#xFF0C;&amp;#x672C;&amp;#x6587;&amp;#x8BA8;&amp;#x8BBA;&amp;#x4E24;&amp;#x4E2A;&amp;#x95EE;&amp;#x9898;&amp;#xFF1A;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#x4E3A;&amp;#x4EC0;&amp;#x4E48;MySQL&amp;#x7B49;&amp;#x4E3B;&amp;#x6D41;&amp;#x6570;&amp;#x636E;&amp;#x5E93;&amp;#x9009;&amp;#x62E9;B+&amp;#x6811;&amp;#x7684;&amp;#x7D22;&amp;#x5F15;&amp;#x7ED3;&amp;#x6784;&amp;#xFF1F;&lt;/li&gt;
&lt;li&gt;&amp;#x5982;&amp;#x4F55;&amp;#x57FA;&amp;#x4E8E;&amp;#x7D22;&amp;#x5F15;&amp;#x7ED3;&amp;#x6784;&amp;#xFF0C;&amp;#x7406;&amp;#x89E3;&amp;#x5E38;&amp;#x89C1;&amp;#x7684;MySQL&amp;#x7D22;&amp;#x5F15;&amp;#x4F18;&amp;#x5316;&amp;#x601D;&amp;#x8DEF;&amp;#xFF1F;&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
      <category term="索引" scheme="https://monkeysayhi.github.io/tags/%E7%B4%A2%E5%BC%95/"/>
    
      <category term="数据库" scheme="https://monkeysayhi.github.io/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="算法" scheme="https://monkeysayhi.github.io/tags/%E7%AE%97%E6%B3%95/"/>
    
  </entry>
  
  <entry>
    <title>Linux文件系统目录结构</title>
    <link href="https://monkeysayhi.github.io/2018/02/10/Linux%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84/"/>
    <id>https://monkeysayhi.github.io/2018/02/10/Linux文件系统目录结构/</id>
    <published>2018-02-10T12:09:15.000Z</published>
    <updated>2018-03-08T13:06:43.000Z</updated>
    
    <content type="html"><![CDATA[<p>&#x672C;&#x6587;&#x4EE5;CentOS&#x7CFB;&#x7EDF;&#x4E3A;&#x4F8B;&#xFF0C;&#x4F46;&#x540C;&#x6837;&#x9002;&#x7528;&#x4E8E;Linux&#x7684;&#x5176;&#x4ED6;&#x53D1;&#x884C;&#x7248;&#x3002;&#x4E0D;&#x9700;&#x8981;&#x7EA0;&#x7ED3;&#x4E8E;&#x5177;&#x4F53;&#x7684;&#x7248;&#x672C;&#xFF0C;<strong>&#x4E86;&#x89E3;&#x8BBE;&#x8BA1;&#x610F;&#x56FE;</strong>&#x5373;&#x53EF;&#x3002;</p>
<a id="more"></a>
<blockquote>
<p>&#x672C;&#x6587;&#x968F;&#x65F6;&#x66F4;&#x65B0;&#x3002;&#x9664;&#x52D8;&#x8BEF;&#x5916;&#xFF0C;&#x4E0D;&#x53E6;&#x505A;&#x6279;&#x6CE8;&#x3002;</p>
</blockquote>
<h1 id="&#x6982;&#x89C8;"><a href="#&#x6982;&#x89C8;" class="headerlink" title="&#x6982;&#x89C8;"></a>&#x6982;&#x89C8;</h1><p><img src="https://raw.githubusercontent.com/monkeysayhi/HexoBlogOnGithub/master/qiniu/static/images/Linux&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x76EE;&#x5F55;&#x7ED3;&#x6784;/Linux&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x76EE;&#x5F55;&#x7ED3;&#x6784;.png" alt="Linux&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x76EE;&#x5F55;&#x7ED3;&#x6784;"></p>
<blockquote>
<ul>
<li>&#x5706;&#x578B;&#x8282;&#x70B9;&#x4EE3;&#x6307;&#x76EE;&#x5F55;&#xFF0C;&#x65B9;&#x578B;&#x8282;&#x70B9;&#x4EE3;&#x6307;&#x6587;&#x4EF6;&#x3002;</li>
<li>&#x56FE;&#x4E2D;&#x7701;&#x53BB;&#x4E86;&#x5F88;&#x591A;&#x4E0D;&#x5E38;&#x7528;&#x7684;&#x76EE;&#x5F55;&#x4E0E;&#x6587;&#x4EF6;&#x3002;</li>
<li>&#x7A0D;&#x540E;&#x5355;&#x72EC;&#x8BB2;<code>/proc</code>&#x76EE;&#x5F55;&#x4E0E;<code>/var</code>&#x76EE;&#x5F55;&#x3002;</li>
</ul>
</blockquote>
<p>Linux&#x5C06;&#x6574;&#x4E2A;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x770B;&#x505A;&#x4E00;&#x68F5;&#x6811;&#xFF0C;&#x8FD9;&#x68F5;&#x6811;&#x7684;&#x6811;&#x6839;&#x53EB;&#x505A;&#x6839;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#xFF0C;&#x7528;&#x201D;/&#x201C;&#x8868;&#x793A;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:left">&#x76EE;&#x5F55;</th>
<th style="text-align:left">&#x5185;&#x5BB9;</th>
<th style="text-align:left">&#x4E3E;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">/bin</td>
<td style="text-align:left">&#x4F9B;&#x6240;&#x6709;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x7684;&#x5B8C;&#x6210;&#x57FA;&#x672C;&#x7EF4;&#x62A4;&#x4EFB;&#x52A1;&#x7684;&#x547D;&#x4EE4;</td>
<td style="text-align:left">ls, cp</td>
</tr>
<tr>
<td style="text-align:left">/etc</td>
<td style="text-align:left">&#x7CFB;&#x7EDF;&#x548C;&#x5E94;&#x7528;&#x8F6F;&#x4EF6;&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</td>
<td style="text-align:left">bashrc, passwd</td>
</tr>
<tr>
<td style="text-align:left">/home</td>
<td style="text-align:left">&#x666E;&#x901A;&#x7528;&#x6237;&#x7684;&#x5BB6;&#x76EE;&#x5F55;</td>
<td style="text-align:left">/home/msh</td>
</tr>
<tr>
<td style="text-align:left">/lib</td>
<td style="text-align:left">&#x7CFB;&#x7EDF;&#x6700;&#x57FA;&#x672C;&#x7684;&#x5171;&#x4EAB;&#x94FE;&#x63A5;&#x5E93;&#x548C;&#x5185;&#x6838;&#x6A21;&#x5757;</td>
<td style="text-align:left">libc-2.17.so</td>
</tr>
<tr>
<td style="text-align:left">/root</td>
<td style="text-align:left">root&#x7528;&#x6237;&#x7684;&#x5BB6;&#x76EE;&#x5F55;</td>
<td style="text-align:left">.bashrc, .ssh</td>
</tr>
<tr>
<td style="text-align:left">/sbin</td>
<td style="text-align:left">&#x8D85;&#x7EA7;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x7684;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#xFF0C;&#x91CC;&#x9762;&#x591A;&#x662F;&#x7CFB;&#x7EDF;&#x7BA1;&#x7406;&#x547D;&#x4EE4;</td>
<td style="text-align:left">ifconfig, iptables</td>
</tr>
<tr>
<td style="text-align:left">/tmp</td>
<td style="text-align:left">&#x5B58;&#x50A8;&#x4E34;&#x65F6;&#x6587;&#x4EF6;</td>
</tr>
</tbody>
</table>
<p><code>/usr</code>&#x76EE;&#x5F55;&#x7684;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#x4E0E;&#x6839;&#x76EE;&#x5F55;&#x76F8;&#x4F3C;&#xFF0C;&#x4F46;&#x6839;&#x76EE;&#x5F55;&#x4E2D;&#x7684;&#x6587;&#x4EF6;&#x591A;&#x662F;&#x7CFB;&#x7EDF;&#x7EA7;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x800C;<code>/usr</code>&#x76EE;&#x5F55;&#x4E2D;&#x662F;&#x7528;&#x6237;&#x7EA7;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x4E00;&#x822C;&#x4E0E;&#x5177;&#x4F53;&#x7684;&#x7CFB;&#x7EDF;&#x65E0;&#x5173;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:left">&#x76EE;&#x5F55;</th>
<th style="text-align:left">&#x5185;&#x5BB9;</th>
<th style="text-align:left">&#x4E3E;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">/usr/bin</td>
<td style="text-align:left">&#x591A;&#x6570;&#x65E5;&#x5E38;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5B58;&#x653E;&#x7684;&#x4F4D;&#x7F6E;</td>
<td style="text-align:left">yum, git</td>
</tr>
<tr>
<td style="text-align:left">/usr/include</td>
<td style="text-align:left">C/C++&#x5934;&#x6587;&#x4EF6;</td>
<td style="text-align:left">ctype.h</td>
</tr>
<tr>
<td style="text-align:left">/usr/lib</td>
<td style="text-align:left">&#x666E;&#x901A;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x7684;&#x5E93;&#x6587;&#x4EF6;</td>
<td style="text-align:left">mysql&#x7684;&#x5E93;&#x6587;&#x4EF6;</td>
</tr>
<tr>
<td style="text-align:left">/usr/local</td>
<td style="text-align:left">&#x4E2A;&#x4EBA;&#x5B89;&#x88C5;&#x7684;&#x8F6F;&#x4EF6;&#xFF0C;&#x901A;&#x5E38;&#x9700;&#x8981;&#x624B;&#x52A8;&#x6307;&#x5B9A;&#xFF1B;&#x4E0E;&#x201D;/usr&#x201D;&#x76EE;&#x5F55;&#x7684;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#x76F8;&#x4F3C;</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">/usr/sbin</td>
<td style="text-align:left">&#x8D85;&#x7EA7;&#x7528;&#x6237;&#x4E0D;&#x9700;&#x8981;&#x7684;&#x7CFB;&#x7EDF;&#x7BA1;&#x7406;&#x7A0B;&#x5E8F;</td>
<td style="text-align:left">useradd</td>
</tr>
</tbody>
</table>
<h1 id="&#x91CD;&#x4E2D;&#x4E4B;&#x91CD;"><a href="#&#x91CD;&#x4E2D;&#x4E4B;&#x91CD;" class="headerlink" title="&#x91CD;&#x4E2D;&#x4E4B;&#x91CD;"></a>&#x91CD;&#x4E2D;&#x4E4B;&#x91CD;</h1><h2 id="proc&#x76EE;&#x5F55;"><a href="#proc&#x76EE;&#x5F55;" class="headerlink" title="/proc&#x76EE;&#x5F55;"></a>/proc&#x76EE;&#x5F55;</h2><p><code>/proc</code>&#x76EE;&#x5F55;&#x6302;&#x8F7D;&#x4E86;&#x4E00;&#x4E2A;<code>&#x865A;&#x62DF;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</code>&#xFF0C;&#x4EE5;<code>&#x865A;&#x62DF;&#x6587;&#x4EF6;</code>&#x7684;&#x5F62;&#x5F0F;&#x6620;&#x5C04;&#x7CFB;&#x7EDF;&#x4E0E;&#x8FDB;&#x7A0B;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x8FD0;&#x884C;&#x65F6;&#x4FE1;&#x606F;&#x3002;</p>
<h3 id="&#x7CFB;&#x7EDF;&#x4FE1;&#x606F;"><a href="#&#x7CFB;&#x7EDF;&#x4FE1;&#x606F;" class="headerlink" title="&#x7CFB;&#x7EDF;&#x4FE1;&#x606F;"></a>&#x7CFB;&#x7EDF;&#x4FE1;&#x606F;</h3><p><code>/proc</code>&#x4E0B;&#x7684;&#x76F4;&#x63A5;&#x5B50;&#x76EE;&#x5F55;&#x901A;&#x5E38;&#x5B58;&#x50A8;&#x7CFB;&#x7EDF;&#x4FE1;&#x606F;&#x3002;&#x7334;&#x5B50;&#x5E38;&#x7528;&#x7684;&#x53EA;&#x6709;&#x4E24;&#x4E2A;&#xFF1A;</p>
<table>
<thead>
<tr>
<th style="text-align:left">&#x76EE;&#x5F55;</th>
<th style="text-align:left">&#x5185;&#x5BB9;</th>
<th style="text-align:left">&#x4E3E;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">/proc/cpuinfo</td>
<td style="text-align:left">&#x5904;&#x7406;&#x5668;&#x7684;&#x76F8;&#x5173;&#x4FE1;&#x606F;</td>
<td style="text-align:left">physical id&#x3001;cpu cores&#x3001;siblings&#x3001;processor</td>
</tr>
<tr>
<td style="text-align:left">/proc/version</td>
<td style="text-align:left">&#x7CFB;&#x7EDF;&#x7684;&#x5185;&#x6838;&#x7248;&#x672C;&#x53F7;</td>
<td style="text-align:left">Linux version 3.10.0</td>
</tr>
</tbody>
</table>
<blockquote>
<p><code>/proc/version</code>&#x786E;&#x5B9A;&#x5185;&#x6838;&#x7248;&#x672C;&#x53F7;&#x548C;CPU&#x67B6;&#x6784;&#xFF08;&#x5982;i686&#xFF09;&#xFF1B;<code>/etc/centos-release</code>&#x786E;&#x5B9A;&#x53D1;&#x884C;&#x7248;&#x672C;&#x53F7;&#xFF08;&#x5176;&#x4ED6;&#x53D1;&#x884C;&#x7248;&#x7C7B;&#x4F3C;&#xFF09;&#x3002;</p>
<p><code>uname -a</code>&#x4E0E;<code>cat /proc/version</code>&#x7684;&#x4F5C;&#x7528;&#x7C7B;&#x4F3C;&#x3002;</p>
</blockquote>
<h3 id="&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;"><a href="#&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;" class="headerlink" title="&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;"></a>&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;</h3><p>&#x91CD;&#x70B9;&#x662F;<code>/proc/&lt;pid&gt;</code>&#x76EE;&#x5F55;&#x6620;&#x5C04;&#x7684;&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;&#x3002;&#x4EE5;rsyslogd&#x8FDB;&#x7A0B;&#x4E3A;&#x4F8B;&#xFF1A;</p>
<table>
<thead>
<tr>
<th style="text-align:left">&#x76EE;&#x5F55;</th>
<th style="text-align:left">&#x5185;&#x5BB9;</th>
<th style="text-align:left">&#x4E3E;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/cmdline</code></td>
<td style="text-align:left">&#x542F;&#x52A8;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x7684;&#x5B8C;&#x6574;&#x547D;&#x4EE4;</td>
<td style="text-align:left">/usr/sbin/rsyslogd-n</td>
</tr>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/cwd</code></td>
<td style="text-align:left">&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x5DE5;&#x4F5C;&#x76EE;&#x5F55;&#x7684;&#x8F6F;&#x94FE;</td>
<td style="text-align:left">cwd -&gt; /</td>
</tr>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/environ</code></td>
<td style="text-align:left">&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x5217;&#x8868;</td>
<td style="text-align:left">LANG=zh_CN.UTF-8</td>
</tr>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/exe</code></td>
<td style="text-align:left">&#x542F;&#x52A8;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x7684;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x7684;&#x8F6F;&#x94FE;</td>
<td style="text-align:left">exe -&gt; /usr/sbin/rsyslogd</td>
</tr>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/fd</code></td>
<td style="text-align:left">&#x76EE;&#x5F55;&#xFF0C;&#x4FDD;&#x5B58;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x6301;&#x6709;&#x7684;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26;&#xFF08;&#x4EE5;&#x8F6F;&#x94FE;&#x5F62;&#x5F0F;&#x5B58;&#x5728;&#xFF0C;&#x6307;&#x5411;&#x5B9E;&#x9645;&#x6587;&#x4EF6;&#xFF09;</td>
<td style="text-align:left">2 -&gt; /dev/null <br> 6 -&gt; /var/log/messages</td>
</tr>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/limits</code></td>
<td style="text-align:left">&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x4F7F;&#x7528;&#x8D44;&#x6E90;&#x7684;&#x8F6F;&#x9650;&#x5236;&#x3001;&#x786C;&#x9650;&#x5236;&#xFF08;&#x548C;&#x5355;&#x4F4D;&#xFF09;</td>
<td style="text-align:left">open files&#xFF08;&#x9ED8;&#x8BA4;&#x8F6F;&#x9650;&#x5236;1024&#xFF09;</td>
</tr>
<tr>
<td style="text-align:left"><code>/proc/&lt;pid&gt;/task</code></td>
<td style="text-align:left">&#x76EE;&#x5F55;&#xFF0C;&#x4FDD;&#x5B58;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x6240;&#x8FD0;&#x884C;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF1B;&#x4EE5;<code>&lt;tid&gt;</code>&#x4F5C;&#x4E3A;&#x5404;&#x7EBF;&#x7A0B;&#x7684;&#x76EE;&#x5F55;&#x540D;&#xFF0C;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#x4E0E;<code>/proc/&lt;pid&gt;</code>&#x76F8;&#x4F3C;</td>
<td style="text-align:left">1037&#x3001;1050&#x3001;1051</td>
</tr>
</tbody>
</table>
<p>&#x8865;&#x5145;&#x51E0;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x901A;&#x8FC7;ulimit&#x6765;&#x67E5;&#x770B;&#x6216;&#x4FEE;&#x6539;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x7684;&#x8D44;&#x6E90;&#x9650;&#x5236;&#x3002;</li>
<li>&#x8F6F;&#x9650;&#x5236;&#x53EF;&#x4EE5;&#x7531;&#x8FDB;&#x7A0B;&#x81EA;&#x5DF1;&#x5728;&#x4EFB;&#x4F55;&#x65F6;&#x95F4;&#x4FEE;&#x6539;&#xFF1B;&#x786C;&#x9650;&#x5236;&#x53EA;&#x80FD;&#x4F7F;&#x7528;root&#x6743;&#x9650;&#x4FEE;&#x6539;&#x3002;</li>
<li>Linux&#x4E0A;&#x8FDB;&#x7A0B;&#x4E0E;&#x7EBF;&#x7A0B;&#x7684;&#x5173;&#x7CFB;&#x53C2;&#x8003;<a href="/2017/11/29/&#x6D45;&#x8C08;linux&#x7EBF;&#x7A0B;&#x6A21;&#x578B;&#x548C;&#x7EBF;&#x7A0B;&#x5207;&#x6362;/">&#x6D45;&#x8C08;linux&#x7EBF;&#x7A0B;&#x6A21;&#x578B;&#x548C;&#x7EBF;&#x7A0B;&#x5207;&#x6362;</a>&#x3002;</li>
</ul>
<h2 id="var&#x76EE;&#x5F55;"><a href="#var&#x76EE;&#x5F55;" class="headerlink" title="/var&#x76EE;&#x5F55;"></a>/var&#x76EE;&#x5F55;</h2><p><code>/var</code>&#x76EE;&#x5F55;&#x5B58;&#x653E;&#x6570;&#x636E;&#x6587;&#x4EF6;&#xFF0C;&#x5982;&#x7A0B;&#x5E8F;&#x6570;&#x636E;&#x3001;&#x65E5;&#x5FD7;&#x7B49;&#xFF1B;&#x4F46;&#x7EBF;&#x4E0A;&#x901A;&#x5E38;&#x53EA;&#x5C06;&#x65E5;&#x5FD7;&#x653E;&#x5728;<code>/var</code>&#x76EE;&#x5F55;&#x3002;</p>
<h3 id="&#x7CFB;&#x7EDF;&#x65E5;&#x5FD7;-var-log-messages"><a href="#&#x7CFB;&#x7EDF;&#x65E5;&#x5FD7;-var-log-messages" class="headerlink" title="&#x7CFB;&#x7EDF;&#x65E5;&#x5FD7;/var/log/messages"></a>&#x7CFB;&#x7EDF;&#x65E5;&#x5FD7;/var/log/messages</h3><p>&#x901A;&#x8FC7;rsyslog&#x8BB0;&#x5F55;&#x7CFB;&#x7EDF;&#x7EA7;&#x65E5;&#x5FD7;&#xFF0C;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E3A;<code>/etc/rsyslog.conf</code>&#x3002;&#x91CD;&#x70B9;&#x770B;<code>/var/log/messages</code>&#x7684;&#x914D;&#x7F6E;&#xFF1A;</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"># Log anything (except mail) of level info or higher.</div><div class="line"># Don&apos;t log private authentication messages!</div><div class="line">*.info;mail.none;authpriv.none;cron.none                /var/log/messages</div></pre></td></tr></table></figure>
<blockquote>
<p><code>*.info</code>&#x8868;&#x793A;&#x6240;&#x6709;&#x670D;&#x52A1;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;info&#x4F18;&#x5148;&#x7EA7;&#x7684;&#x4FE1;&#x606F;&#x90FD;&#x4F1A;&#x8BB0;&#x5F55;&#x5230;<code>/var/log/messages</code>&#x4E2D;&#xFF1B;<br><code>mail.none</code>&#x8868;&#x793A;&#x4E0D;&#x8BB0;&#x5F55;&#x4EFB;&#x4F55;mail&#x7684;&#x4FE1;&#x606F;&#x5230;<code>/var/log/messages</code>&#x4E2D;&#x3002;</p>
</blockquote>
<p>&#x4EE5;&#x4E0A;&#x914D;&#x7F6E;&#x8868;&#x793A;&#xFF1A;<strong>&#x9664;&#x5B89;&#x5168;&#x8BA4;&#x8BC1;&#x3001;&#x90AE;&#x4EF6;&#x3001;&#x5B9A;&#x65F6;&#x4EFB;&#x52A1;&#x5916;&#xFF0C;&#x8F93;&#x51FA;&#x5230;stdout&#x3001;stderr&#x7684;info&#x53CA;&#x66F4;&#x9AD8;&#x7EA7;&#x522B;&#x7684;&#x65E5;&#x5FD7;&#x8BB0;&#x5F55;&#x5728;<code>/var/log/messages</code>&#x4E2D;</strong>&#x3002;</p>
<h4 id="OOM-kill"><a href="#OOM-kill" class="headerlink" title="OOM kill"></a>OOM kill</h4><p>&#x7334;&#x5B50;&#x5229;&#x7528;<code>/var/log/messages</code>&#x5B9A;&#x4F4D;&#x8FC7;&#x4E00;&#x6B21;OOM kill&#x95EE;&#x9898;&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x7ECF;&#x5E38;&#x62B1;&#x6028;&#x81EA;&#x5DF1;&#x7684;app&#x63D0;&#x5230;Yarn&#x540E;&#xFF0C;container&#x5404;&#x79CD;exit 137&#x7136;&#x540E;&#x91CD;&#x8BD5;&#x3002;&#x5047;&#x8BBE;&#x6846;&#x67B6;&#x4E0D;&#x4F1A;&#x81EA;&#x5DF1;exit 137&#x73A9;&#xFF0C;&#x90A3;&#x4E48;&#x901A;&#x5E38;137&#x4EE3;&#x8868;container&#x662F;&#x56E0;&#x4E3A;kill -9&#x9000;&#x51FA;&#xFF0C;&#x4E8E;&#x662F;mentor&#x63D0;&#x793A;&#x7334;&#x5B50;&#x53EF;&#x80FD;&#x56E0;&#x4E3A;OOM kill&#x3002;&#x8981;&#x9A8C;&#x8BC1;&#x8FD9;&#x4E2A;&#x60F3;&#x6CD5;&#xFF0C;&#x5FC5;&#x987B;&#x627E;&#x5230;&#x201C;&#x76F8;&#x5173;container&#x88AB;OOM kill&#x7684;&#x75D5;&#x8FF9;&#x201D;&#x3002;</p>
<p>Linux&#x4F1A;&#x76D1;&#x63A7;&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x60C5;&#x51B5;&#xFF0C;&#x5F53;&#x5185;&#x5B58;&#x4E0D;&#x8DB3;&#x7684;&#x65F6;&#x5019;&#xFF0C;OOM killer&#x8BA1;&#x7B97;&#x8FDB;&#x7A0B;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#xFF0C;&#x6740;&#x6B7B;&#x4F18;&#x5148;&#x7EA7;&#x6700;&#x9AD8;&#x7684;&#x8FDB;&#x7A0B;&#x91CA;&#x653E;&#x5185;&#x5B58;&#x3002;&#x800C;Yarn&#x96C6;&#x7FA4;&#x666E;&#x904D;&#x4F1A;&#x914D;&#x7F6E;&#x8D44;&#x6E90;&#x8D85;&#x53D1;&#xFF08;Linux&#x7CFB;&#x7EDF;&#x672C;&#x8EAB;&#x4E5F;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x8D85;&#x53D1;&#xFF09;&#xFF0C;&#x5F53;&#x96C6;&#x7FA4;&#x8D44;&#x6E90;&#x7D27;&#x5F20;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5927;container&#x5F88;&#x5BB9;&#x6613;&#x88AB;OOM kill&#x3002;</p>
<p><strong>OOM kill&#x7684;&#x4E09;&#x4E2A;&#x6B65;&#x9AA4;&#x201C;&#x53D1;&#x73B0;&#x5185;&#x5B58;&#x4E0D;&#x8DB3;&#x201D;&#x3001;&#x201C;&#x8BA1;&#x7B97;&#x4F18;&#x5148;&#x7EA7;&#x201D;&#x3001;&#x201C;&#x9009;&#x62E9;&#x8FDB;&#x7A0B;kill&#x201D;&#xFF0C;&#x90FD;&#x4F1A;&#x8BB0;&#x5F55;&#x5728;<code>/var/log/messages</code>&#x4E2D;</strong>&#xFF0C;&#x7334;&#x5B50;&#x786E;&#x5B9E;&#x5728;&#x7528;&#x6237;&#x7ED9;&#x5B9A;&#x7684;&#x65F6;&#x95F4;&#x70B9;&#x9644;&#x8FD1;&#x627E;&#x5230;&#x4E86;&#x5BF9;&#x5E94;container&#x7684;OOM kill&#x65E5;&#x5FD7;&#xFF0C;&#x5185;&#x5B58;&#x4E5F;&#x4E0E;container&#x7533;&#x8BF7;&#x7684;&#x8D44;&#x6E90;&#x76F8;&#x8FD1;&#x3002;</p>
<p>&#x5F97;&#x8BC1;&#x3002;</p>
<blockquote>
<p>&#x5224;&#x65AD;&#x8FC7;&#x7A0B;&#x4E2D;&#x5B58;&#x5728;&#x4E00;&#x4E9B;&#x5C0F;&#x95EE;&#x9898;&#xFF1A;</p>
<ul>
<li>&#x7334;&#x5B50;&#x6839;&#x636E;container&#x88AB;OOM kill&#x7684;&#x65F6;&#x95F4;&#x70B9;&#x548C;&#x5185;&#x5B58;&#x5224;&#x65AD;&#x662F;&#x5426;&#x662F;&#x76EE;&#x6807;&#x8FDB;&#x7A0B;&#xFF0C;&#x672A;&#x4E25;&#x683C;&#x786E;&#x5B9A;&#x3002;</li>
</ul>
</blockquote>
<h1 id="&#x4E2A;&#x4EBA;&#x4F7F;&#x7528;&#x65F6;&#x7684;&#x5EFA;&#x8BAE;"><a href="#&#x4E2A;&#x4EBA;&#x4F7F;&#x7528;&#x65F6;&#x7684;&#x5EFA;&#x8BAE;" class="headerlink" title="&#x4E2A;&#x4EBA;&#x4F7F;&#x7528;&#x65F6;&#x7684;&#x5EFA;&#x8BAE;"></a>&#x4E2A;&#x4EBA;&#x4F7F;&#x7528;&#x65F6;&#x7684;&#x5EFA;&#x8BAE;</h1><p>&#x5BF9;&#x4E8E;&#x672C;&#x6587;&#x7684;&#x7406;&#x89E3;&#xFF0C;&#x8BFB;&#x8005;&#x4E0D;&#x5FC5;&#x5173;&#x5FC3;&#x4E0D;&#x540C;&#x53D1;&#x884C;&#x7248;&#x672C;&#x3001;&#x5185;&#x6838;&#x7248;&#x672C;&#x4E4B;&#x95F4;&#x7684;&#x533A;&#x522B;&#x3002;</p>
<blockquote>
<p>&#x5BF9;&#xFF0C;&#x662F;&#x5B58;&#x5728;&#x533A;&#x522B;&#x7684;&#x3002;&#x5982;&#xFF1A;CentOS 6.5&#x53EF;&#x9A8C;&#x8BC1;&#x5F97;&#x672C;&#x6587;&#x5373;&#x5C06;&#x8BB2;&#x89E3;&#x7684;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#xFF1B;&#x4F46;CentOS 7.2&#x4E2D;&#xFF0C;<code>/bin</code>&#x7B49;&#x6240;&#x8C13;&#x201C;&#x7CFB;&#x7EDF;&#x7EA7;&#x76EE;&#x5F55;&#x201D;&#x90FD;&#x88AB;&#x8F6F;&#x94FE;&#x5230;&#x4E86;<code>/usr/bin</code>&#x7B49;&#x6240;&#x8C13;&#x201C;&#x7528;&#x6237;&#x7EA7;&#x76EE;&#x5F55;&#x201D;&#x3002;&#x5176;&#x4ED6;&#x53D1;&#x884C;&#x7248;&#x5982;Debian&#x53EF;&#x80FD;&#x5DEE;&#x522B;&#x66F4;&#x5927;&#x3002;</p>
</blockquote>
<p>&#x5982;&#x679C;&#x975E;&#x8981;&#x8FFD;&#x7A76;&#x7684;&#x8BDD;&#xFF0C;&#x4E00;&#x822C;&#x5EFA;&#x8BAE;&#x5C06;<em>&#x6240;&#x6709;&#x7528;&#x6237;&#x5171;&#x4EAB;&#x7684;&#x8F6F;&#x4EF6;&#x5B89;&#x88C5;&#x5230;<code>/usr/local</code>&#x76EE;&#x5F55;</em>&#xFF08;&#x7ED3;&#x6784;&#x4E0E;<code>/usr</code>&#x76EE;&#x5F55;&#x76F8;&#x4F3C;&#xFF09;&#x4E0B;&#xFF0C;<em>&#x5C06;&#x7528;&#x6237;&#x79C1;&#x6709;&#x7684;&#x8F6F;&#x4EF6;&#x5B89;&#x88C5;&#x5230;&#x7528;&#x6237;&#x81EA;&#x5DF1;&#x7684;&#x5BB6;&#x76EE;&#x5F55;</em>&#x3002;</p>
<hr>
<blockquote>
<p>&#x53C2;&#x8003;&#xFF1A;</p>
<ul>
<li><a href="https://github.com/Entiy/bravo/wiki/Linux%E6%A0%B9%E7%9B%AE%E5%BD%95%E4%B8%8B%E5%90%84%E5%AD%90%E7%9B%AE%E5%BD%95%E7%9A%84%E4%BD%9C%E7%94%A8" target="_blank" rel="external">Linux&#x6839;&#x76EE;&#x5F55;&#x4E0B;&#x5404;&#x5B50;&#x76EE;&#x5F55;&#x7684;&#x4F5C;&#x7528;</a></li>
<li><a href="http://www.cnblogs.com/cute/archive/2011/04/20/2022280.html" target="_blank" rel="external">&#x6DF1;&#x5165;&#x7406;&#x89E3;linux&#x7CFB;&#x7EDF;&#x4E0B;proc&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5185;&#x5BB9;</a></li>
</ul>
</blockquote>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;#x672C;&amp;#x6587;&amp;#x4EE5;CentOS&amp;#x7CFB;&amp;#x7EDF;&amp;#x4E3A;&amp;#x4F8B;&amp;#xFF0C;&amp;#x4F46;&amp;#x540C;&amp;#x6837;&amp;#x9002;&amp;#x7528;&amp;#x4E8E;Linux&amp;#x7684;&amp;#x5176;&amp;#x4ED6;&amp;#x53D1;&amp;#x884C;&amp;#x7248;&amp;#x3002;&amp;#x4E0D;&amp;#x9700;&amp;#x8981;&amp;#x7EA0;&amp;#x7ED3;&amp;#x4E8E;&amp;#x5177;&amp;#x4F53;&amp;#x7684;&amp;#x7248;&amp;#x672C;&amp;#xFF0C;&lt;strong&gt;&amp;#x4E86;&amp;#x89E3;&amp;#x8BBE;&amp;#x8BA1;&amp;#x610F;&amp;#x56FE;&lt;/strong&gt;&amp;#x5373;&amp;#x53EF;&amp;#x3002;&lt;/p&gt;
    
    </summary>
    
    
      <category term="面试" scheme="https://monkeysayhi.github.io/tags/%E9%9D%A2%E8%AF%95/"/>
    
      <category term="原创" scheme="https://monkeysayhi.github.io/tags/%E5%8E%9F%E5%88%9B/"/>
    
      <category term="Linux" scheme="https://monkeysayhi.github.io/tags/Linux/"/>
    
  </entry>
  
</feed>
