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

<channel>
	<title>LinuxSEE</title>
	<atom:link href="http://www.linuxsee.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxsee.com</link>
	<description>LinuxSEE</description>
	<lastBuildDate>Mon, 30 Jan 2012 06:36:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>linux下的/dev/shm/</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8b%e7%9a%84devshm.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8b%e7%9a%84devshm.html#comments</comments>
		<pubDate>Fri, 20 Jan 2012 03:48:22 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[tmpfs]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=375</guid>
		<description><![CDATA[/dev/shm/是linux下一个非常有用的目录，因为这个目录不在硬盘上，而是在内存里。因此在linux下，就不需要大费周折去建ramdisk，直接使用/dev/shm/就可达到很好的优化效果。 /dev /shm/需要注意的一个是容量问题，在linux下，它默认最大为内存的一半大小，使用df -h命令可以看到。但它并不会真正的占用这块内存，如果/dev/shm/下没有任何文件，它占用的内存实际上就是0字节；如果它最大为1G，里头放有 100M文件，那剩余的900M仍然可为其它应用程序所使用，但它所占用的100M内存，是绝不会被系统回收重新划分的，否则谁还敢往里头存文件呢？ 默认的最大一半内存大小在某些场合可能不够用，并且默认的inode数量很低一般都要调高些，这时可以用mount命令来管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm 在2G的机器上，将最大容量调到1.5G，并且inode数量调到1000000，这意味着大致可存入最多一百万个小文件。 &#160; 为当/dev/shm空间不够时可以占用swap的空间，所以不用担心存储空间不够用。想想看，从磁盘IO操作到内存操作，php读写SESSION的速度会快多少？只是需要注意，存储在/dev/shm的数据，在服务器重启后会全部丢失。 &#160; 默认系统就会加载/dev/shm ，它就是所谓的tmpfs，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，tmpfs 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。 tmpfs有以下优势： 1，动态文件系统的大小。 2，tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎可以是瞬间的。 3，tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载，绑定的操作。 好了讲了一些大道理，还是讲讲应用吧： 首先在/dev/stm建个tmp文件夹，然后与实际/tmp绑定 mkdir /dev/shm/tmp chmod 1777 /dev/shm/tmp mount &#8211;bind /dev/shm/tmp /tmp（&#8211;bind ） 在使用mount &#8211;bind olderdir newerdir命令来挂载一个目录到另一个目录后，newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性，除了名称。 巧用tmpfs加速你的linux服务器,就是使用虚拟磁盘来存放squid的缓存文件和php的seesion。速度快不少哦！ 默 [...]]]></description>
			<content:encoded><![CDATA[<p>/dev/shm/是linux下一个非常有用的目录，因为这个目录不在硬盘上，而是在内存里。因此在linux下，就不需要大费周折去建ramdisk，直接使用/dev/shm/就可达到很好的优化效果。<br />
/dev /shm/需要注意的一个是容量问题，在linux下，它默认最大为内存的一半大小，使用df -h命令可以看到。但它并不会真正的占用这块内存，如果/dev/shm/下没有任何文件，它占用的内存实际上就是0字节；如果它最大为1G，里头放有 100M文件，那剩余的900M仍然可为其它应用程序所使用，但它所占用的100M内存，是绝不会被系统回收重新划分的，否则谁还敢往里头存文件呢？<br />
默认的最大一半内存大小在某些场合可能不够用，并且默认的inode数量很低一般都要调高些，这时可以用mount命令来管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm</p>
<div>
<p>在2G的机器上，将最大容量调到1.5G，并且inode数量调到1000000，这意味着大致可存入最多一百万个小文件。</p>
<p>&nbsp;</p>
<p>为当/dev/shm空间不够时可以占用swap的空间，所以不用担心存储空间不够用。想想看，从磁盘IO操作到内存操作，php读写SESSION的速度会快多少？只是需要注意，存储在/dev/shm的数据，在服务器重启后会全部丢失。</p>
<p>&nbsp;</p>
<p>默认系统就会加载/dev/shm ，它就是所谓的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/tmpfs" title="查看 tmpfs 的全部文章" target="_blank">tmpfs</a></span>，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/tmpfs" title="查看 tmpfs 的全部文章" target="_blank">tmpfs</a></span> 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。<br />
tmpfs有以下优势：<br />
1，动态文件系统的大小。<br />
2，tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎可以是瞬间的。<br />
3，tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载，绑定的操作。<br />
好了讲了一些大道理，还是讲讲应用吧：<br />
首先在/dev/stm建个tmp文件夹，然后与实际/tmp绑定<br />
mkdir /dev/shm/tmp<br />
chmod 1777 /dev/shm/tmp<br />
mount &#8211;bind /dev/shm/tmp /tmp（&#8211;bind ）<br />
在使用mount &#8211;bind olderdir newerdir命令来挂载一个目录到另一个目录后，newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性，除了名称。<br />
巧用tmpfs加速你的linux服务器,就是使用虚拟磁盘来存放<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>的缓存文件和php的seesion。速度快不少哦！<br />
默 认系统就会加载/dev/shm ，它就是所谓的tmpfs，有人说跟ramdisk（虚拟磁盘），但不一样。象虚拟磁盘一样，tmpfs 可以使用您的 RAM，但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备，并需要一个 mkfs 之类的命令才能真正地使用它，tmpfs 是一个文件系统，而不是块设备；您只是安装它，它就可以使用了。<br />
tmpfs有以下优势：<br />
1。动态文件系统的大小，<br />
2。tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中，读写几乎可以是瞬间的。<br />
3。tmpfs 数据在重新启动之后不会保留，因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载，绑定的操作。<br />
好了讲了一些大道理，大家看的烦了吧，还是讲讲我的应用吧：）<br />
首先在/dev/shm建个tmp文件夹，然后与实际/tmp绑定<br />
mkdir /dev/shm/tmp<br />
chmod 1777 /dev/shm/tmp<br />
mount &#8211;bind /dev/shm/tmp /tmp</p>
<p>1. <span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>的缓存目录设置<br />
vi /etc/<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>/squid.conf<br />
修改成<br />
cache_dir ufs /tmp 256 16 256<br />
这 里的第一个256表示使用256M内存，我觉得http://www.linuxaid.com.cn/articles/4/4 /441672019.shtml里使用ramdisk的方法还不如直接使用tmpfs，至少每次启动不用mkfs，还可以动态改变大小。这时的/tmp 实际就是/dev/shm/tmp<br />
然后重启一下服务，ok，现在所有的squid缓存文件都保存倒tmpfs文件系统里了，很快哦。</p>
<p>2. 对php性能的优化<br />
对于一个访问量大的以<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/apache" title="apache" rel="nofollow" target="_blank">apache</a></span>+php的网站，可能tmp下的临时文件都会很多，比如seesion或者一些缓存文件，那么你可以把它保存到tmpfs文件。<br />
保存seesion的方法很简单了只要修改php.ini就行了，由于我已经把/dev/stm/tmp与/tmp绑定，所以不改写也行，至于php程序产生的缓存文件那只能改自己的php程序了：）<br />
至于tmpfs的其他应用，我想大家可能通过这篇文章会有所启发。</p>
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e4%b8%8b%e7%9a%84devshm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>详解Linux系统内存中buffer和cache</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e8%af%a6%e8%a7%a3linux%e7%b3%bb%e7%bb%9f%e5%86%85%e5%ad%98%e4%b8%adbuffer%e5%92%8ccache.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e8%af%a6%e8%a7%a3linux%e7%b3%bb%e7%bb%9f%e5%86%85%e5%ad%98%e4%b8%adbuffer%e5%92%8ccache.html#comments</comments>
		<pubDate>Thu, 19 Jan 2012 07:50:23 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=371</guid>
		<description><![CDATA[我们一开始，先从free命令说起。free 命令相对于top提供了更简洁的查看系统内存使用情况： # free total       used       free     shared    buffers     cached Mem:       4129428    2830048    1299380          0     208524    1838492 -/+ buffers/Cache:     783032    3346396 SWAP:      4192956          0    4192956 解释下各个参数的意思： Mem：表示物理内存统计 -/+ buffers/cached：表示物理内存的缓存统计。 Swap：表示硬盘上交换分区的使用情况，这里我们不去关心。 系统的总物理内存：4129428（4096MB），但系统当前真正可用的内存并不是第一行free 标记的 2830048，它仅代表未被分配的内存。 单位为MB的查看方法： # free -m total       used       free     shared    buffers     cached Mem:          4032       2764       1268          0        203       1795 -/+ buffers/cache:        765       3267 Swap:         [...]]]></description>
			<content:encoded><![CDATA[<p>我们一开始，先从<strong>free命令</strong>说起。free 命令相对于top提供了更简洁的查看系统<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>使用情况：</p>
<p># free<br />
total       used       free     shared    buffers     cached<br />
Mem:       4129428    2830048    1299380          0     208524    1838492<br />
-/+ buffers/Cache:     783032    3346396<br />
SWAP:      4192956          0    4192956</p>
<p><strong>解释下各个参数的意思：</strong></p>
<p><strong>Mem：</strong>表示物理<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>统计<br />
<strong>-/+ buffers/cached：</strong>表示物理内存的缓存统计。<br />
<strong>Swap：</strong>表示硬盘上交换分区的使用情况，这里我们不去关心。<br />
系统的总物理内存：4129428（4096MB），但系统当前真正可用的内存并不是第一行free 标记的 2830048，它仅代表未被分配的内存。</p>
<p>单位为MB的查看方法：<br />
# free -m<br />
total       used       free     shared    buffers     cached<br />
Mem:          4032       2764       1268          0        203       1795<br />
-/+ buffers/cache:        765       3267<br />
Swap:         4094          0       4094</p>
<p>我们使用totalA、usedA、freeA、usedB、freeB等名称来代表上面统计数据的各值，A和B分别代表第一行和第二行的数据。<br />
[totalA] 4032：表示物理内存总量。<br />
[usedA] 2764：表示总计分配给缓存（包含buffers 与cache ）使用的数量，但其中可能部分缓存并未实际使用。<br />
[freeA] 1268：未被分配的内存。<br />
[sharedA] 0 ：共享内存，一般系统不会用到，这里也不讨论。<br />
[buffersA] 203：系统分配但未被使用的buffers 数量。<br />
[cachedA] 1795：系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。</p>
<p>[usedB] 771：实际使用的buffers 与cache 总量，也是实际使用的内存总量。<br />
[freeB] 3261：未被使用的buffers 与cache 和未被分配的内存之和，这就是系统当前实际可用内存。</p>
<p><strong>可以整理出如下等式：<br />
</strong>totalA = usedA + free1<br />
totalA = used2 + free2<br />
usedA = buffersA + cachedA + usedB<br />
freeB = buffersA + cachedA + freeA</p>
<p><strong>buffer 与cache 的区别<br />
</strong>A buffer is something that has yet to be &#8220;written&#8221; to disk. A cache is something that has been &#8220;read&#8221; from the disk and stored for later use.<br />
对于共享内存（Shared memory），主要用于在Unix 环境下不同进程之间共享数据，是进程间通信的一种方法，一般的应用程序不会申请使用共享内存，笔者也没有去验证共享内存对上面等式的影响。</p>
<p><strong>cache 和 buffer的区别：<br />
</strong>Cache：高速缓存，是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存，CPU直接从内存中存取数据要等待一定时间周期，Cache中保存着CPU刚用过或循环使用的一部分数据，当CPU再次使用该部分数据时可从Cache中直接调用，这样就减少了CPU的等待时间，提高了系统的效率。Cache又分为一级Cache（L1 Cache）和二级Cache（L2 Cache），L1 Cache集成在CPU内部，L2 Cache早期一般是焊在主板上，现在也都集成在CPU内部，常见的容量有256KB或512KB L2 Cache。</p>
<p>Buffer：缓冲区，一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区，可以使进程之间的相互等待变少，从而使从速度慢的设备读入数据时，速度快的设备的操作进程不发生间断。</p>
<p><strong>Free中的buffer和cache：（它们都是占用内存）：<br />
</strong>buffer : 作为buffer cache的内存，是块设备的读写缓冲区<br />
cache: 作为page cache的内存， 文件系统的cache<br />
如果 cache 的值很大，说明cache住的文件数很多。如果频繁访问到的文件都能被cache住，那么磁盘的读IO必会非常小。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e8%af%a6%e8%a7%a3linux%e7%b3%bb%e7%bb%9f%e5%86%85%e5%ad%98%e4%b8%adbuffer%e5%92%8ccache.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux 内存管理机制简介(ZT)</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6%e7%ae%80%e4%bb%8bzt.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6%e7%ae%80%e4%bb%8bzt.html#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:14:58 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=369</guid>
		<description><![CDATA[在Linux中经常发现空闲内存很少，似乎所有的内存都被系统占用了，表面感觉是内存不够用了，其实不然。这是Linux内存管理的一个优秀特性，在这方面，区别于 Windows的内存管理。主要特点是，无论物理内存有多大，Linux 都将其充份利用，将一些程序调用过的硬盘数据读入内存，利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时，才为应用程序分配内存，并不能充分利用大容量的内存空间。换句话说，每增加一些物理内存，Linux 都将能充分利用起来，发挥了硬件投资带来的好处，而Windows只将其做为摆设，即使增加8GB甚至更大。 Linux 的这一特性，主要是利用空闲的物理内存，划分出一部份空间，做为 cache 和 buffers ，以此提高数据访问性能。 1、什么是 cache ? 页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲，是通过把磁盘中的数据缓存到物理内存中，把对磁盘的访问变为对物理内存的访问。 磁盘高速缓存的价值在于两个方面：第一，访问磁盘的速度要远远低于访问内存的速度，因此，从内存访问数据比从磁盘访问速度更快。第二，数据一旦被访问，就很有可能在短期内再次被访问到。 页高速缓存是由内存中的物理页组成的，缓存中每一页都对应着磁盘中的多个块。每当内核开始执行一个页I/O操作时(通常是对普通文件中页大小的块进行磁盘操作)，首先会检查需要的数据是否在高速缓存中，如果在，那么内核就直接使用高速缓存中的数据，从而避免访问磁盘。 举个例子，当使用文本编辑器打开一个源程序文件时，该文件的数据就被调入内存。编辑该文件的过程中，越来越多的数据会相继被调入内存页。最后，当你编译它的时候，内核可以直接使用页高速缓存中的页，而不需要重新从磁盘读取该文件了。因为用户往往会反复读取或操作同一个文件，所以页高速缓存能减少大量的磁盘操作。 2、cache 如何更新? 由于页高速缓存的缓存作用，写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时，那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时，脏页被写回磁盘： ◆当空闲内存低于一个特定的阈值时，内核必须将脏页写回磁盘，以便释放内存。 ◆当脏页在内存中驻留时间超过一个特定的阈值时，内核必须将超时的脏页写回磁盘，以确保脏页不会无限期地驻留在内存中。 在2.6内核中，由一群内核线程—pdflush后台回写例程统一执行两种工作。 首先，pdflush线程在系统中的空闲内存低于一个特定的阈值时，将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时，释放脏页以重新获得内存。特定的内存阈值可以通过dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值：dirty_background_ratio还低时，内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程，随后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数，该参数指定试图写回的页面数目。函数background_writeout()会连续地写出数据，直到满足以下两个条件： ◆已经有指定的最小数目的页被写出到磁盘。 ◆空闲内存数已经回升，超过了阈值dirty_background_ratio。 上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止，除非pdflush写回了所有的脏页，没有剩下的脏页可再被写回了。 为了满足第二个目标，pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关)，将那些在内存中驻留时间过长的脏页写出，确保内存中不会有长期存在的脏页。如果系统发生崩溃，由于内存处于混乱之中，所以那些在内存中还没来得及写回磁盘的脏页就会丢失，所以周期性同步页高速缓存和磁盘非常重要。在系统启动时，内核初始化一个定时器，让它周期地唤醒pdflush线程，随后使其运行函数wb_kupdate()。 &#160;]]></description>
			<content:encoded><![CDATA[<p>在<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span>中经常发现空闲<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>很少，似乎所有的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>都被系统占用了，表面感觉是<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>不够用了，其实不然。这是<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span>内存管理的一个优秀特性，在这方面，区别于 Windows的内存管理。主要特点是，无论物理内存有多大，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span> 都将其充份利用，将一些程序调用过的硬盘数据读入内存，利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时，才为应用程序分配内存，并不能充分利用大容量的内存空间。换句话说，每增加一些物理内存，Linux 都将能充分利用起来，发挥了硬件投资带来的好处，而Windows只将其做为摆设，即使增加8GB甚至更大。</p>
<p>Linux 的这一特性，主要是利用空闲的物理内存，划分出一部份空间，做为 cache 和 buffers ，以此提高数据访问性能。</p>
<p>1、什么是 cache ?</p>
<p>页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲，是通过把磁盘中的数据缓存到物理内存中，把对磁盘的访问变为对物理内存的访问。</p>
<p>磁盘高速缓存的价值在于两个方面：第一，访问磁盘的速度要远远低于访问内存的速度，因此，从内存访问数据比从磁盘访问速度更快。第二，数据一旦被访问，就很有可能在短期内再次被访问到。</p>
<p>页高速缓存是由内存中的物理页组成的，缓存中每一页都对应着磁盘中的多个块。每当内核开始执行一个页I/O操作时(通常是对普通文件中页大小的块进行磁盘操作)，首先会检查需要的数据是否在高速缓存中，如果在，那么内核就直接使用高速缓存中的数据，从而避免访问磁盘。</p>
<p>举个例子，当使用文本编辑器打开一个源程序文件时，该文件的数据就被调入内存。编辑该文件的过程中，越来越多的数据会相继被调入内存页。最后，当你编译它的时候，内核可以直接使用页高速缓存中的页，而不需要重新从磁盘读取该文件了。因为用户往往会反复读取或操作同一个文件，所以页高速缓存能减少大量的磁盘操作。</p>
<p>2、cache 如何更新?</p>
<p>由于页高速缓存的缓存作用，写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时，那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时，脏页被写回磁盘：</p>
<p>◆当空闲内存低于一个特定的阈值时，内核必须将脏页写回磁盘，以便释放内存。</p>
<p>◆当脏页在内存中驻留时间超过一个特定的阈值时，内核必须将超时的脏页写回磁盘，以确保脏页不会无限期地驻留在内存中。</p>
<p>在2.6内核中，由一群内核线程—pdflush后台回写例程统一执行两种工作。</p>
<p>首先，pdflush线程在系统中的空闲内存低于一个特定的阈值时，将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时，释放脏页以重新获得内存。特定的内存阈值可以通过dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值：dirty_background_ratio还低时，内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程，随后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数，该参数指定试图写回的页面数目。函数background_writeout()会连续地写出数据，直到满足以下两个条件：</p>
<p>◆已经有指定的最小数目的页被写出到磁盘。</p>
<p>◆空闲内存数已经回升，超过了阈值dirty_background_ratio。</p>
<p>上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止，除非pdflush写回了所有的脏页，没有剩下的脏页可再被写回了。</p>
<p>为了满足第二个目标，pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关)，将那些在内存中驻留时间过长的脏页写出，确保内存中不会有长期存在的脏页。如果系统发生崩溃，由于内存处于混乱之中，所以那些在内存中还没来得及写回磁盘的脏页就会丢失，所以周期性同步页高速缓存和磁盘非常重要。在系统启动时，内核初始化一个定时器，让它周期地唤醒pdflush线程，随后使其运行函数wb_kupdate()。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%9c%ba%e5%88%b6%e7%ae%80%e4%bb%8bzt.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>squid日志内容详解</title>
		<link>http://www.linuxsee.com/squid/squid%e6%97%a5%e5%bf%97%e5%86%85%e5%ae%b9%e8%af%a6%e8%a7%a3.html</link>
		<comments>http://www.linuxsee.com/squid/squid%e6%97%a5%e5%bf%97%e5%86%85%e5%ae%b9%e8%af%a6%e8%a7%a3.html#comments</comments>
		<pubDate>Tue, 10 Jan 2012 05:34:36 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[SQUID]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=365</guid>
		<description><![CDATA[使用 #cat /var/log/squid/access.log&#124;gawk &#8216;{print $4}&#8217;&#124;sort&#124;uniq -c&#124;sort -nr 434524 TCP_IMS_HIT/304 331078 TCP_MEM_HIT/200 97985 TCP_MISS/200 79076 TCP_HIT/200 11049 TCP_IMS_HIT/200 8110 TCP_NEGATIVE_HIT/404 3666 TCP_HIT/206 3496 TCP_MISS/304 2843 TCP_MISS/302 1929 TCP_CLIENT_REFRESH_MISS/200 935 TCP_MISS/404 430 TCP_MISS/000 233 TCP_MEM_HIT/206 86 TCP_REFRESH_MISS/200 73 TCP_CLIENT_REFRESH_MISS/404 60 TCP_REFRESH_HIT/200 53 TCP_REFRESH_HIT/304 18 TCP_SWAPFAIL_MISS/200 6 TCP_SWAPFAIL_MISS/304 如果看到很多的TCP_MEM_HIT ，这表明该文件是从内存缓存读取的，squid已经起作用了！你再用浏览器打开该文件，应该是快如闪电了。。呵呵，大功告成了！还有其他类型的HIT，如TCP_HIT等等，这些是从磁盘读取的，我觉得加速的意义不大，只不过缓解了apache的压力而已。 相应于HTTP请求，下列标签可能出现在access.log文件的第四个域。 TCP_HIT squid发现请求资源的貌似新鲜的拷贝，并将其立即发送到客户端。 TCP_MISS Squid没有请求资源的cache拷贝。 TCP_REFERSH_HIT Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。原始服务器返回304（未修改）响应，指示squid的拷贝仍旧是新鲜的。 TCP_REF_FAIL_HIT [...]]]></description>
			<content:encoded><![CDATA[<p>使用<br />
#cat /var/log/<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>/access.log|gawk &#8216;{print $4}&#8217;|sort|uniq -c|sort -nr<br />
434524 TCP_IMS_HIT/304<br />
331078 TCP_MEM_HIT/200<br />
97985 TCP_MISS/200<br />
79076 TCP_HIT/200<br />
11049 TCP_IMS_HIT/200<br />
8110 TCP_NEGATIVE_HIT/404<br />
3666 TCP_HIT/206<br />
3496 TCP_MISS/304<br />
2843 TCP_MISS/302<br />
1929 TCP_CLIENT_REFRESH_MISS/200<br />
935 TCP_MISS/404<br />
430 TCP_MISS/000<br />
233 TCP_MEM_HIT/206<br />
86 TCP_REFRESH_MISS/200<br />
73 TCP_CLIENT_REFRESH_MISS/404<br />
60 TCP_REFRESH_HIT/200<br />
53 TCP_REFRESH_HIT/304<br />
18 TCP_SWAPFAIL_MISS/200<br />
6 TCP_SWAPFAIL_MISS/304</p>
<p>如果看到很多的TCP_MEM_HIT ，这表明该文件是从内存缓存读取的，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>已经起作用了！你再用浏览器打开该文件，应该是快如闪电了。。呵呵，大功告成了！还有其他类型的HIT，如TCP_HIT等等，这些是从磁盘读取的，我觉得加速的意义不大，只不过缓解了<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/apache" title="apache" rel="nofollow" target="_blank">apache</a></span>的压力而已。</p>
<p>相应于HTTP请求，下列标签可能出现在access.log文件的第四个域。</p>
<p><strong>TCP_HIT</strong></p>
<p><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/squid" title="squid" rel="nofollow" target="_blank">squid</a></span>发现请求资源的貌似新鲜的拷贝，并将其立即发送到客户端。</p>
<p><strong>TCP_MISS</strong></p>
<p>Squid没有请求资源的cache拷贝。</p>
<p><strong>TCP_REFERSH_HIT</strong></p>
<p>Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。原始服务器返回304（未修改）响应，指示<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/squid-2" title="查看 squid 的全部文章" target="_blank">squid</a></span>的拷贝仍旧是新鲜的。</p>
<p><strong>TCP_REF_FAIL_HIT</strong></p>
<p>Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。然而，原始服务器响应失败，或者返回的响应Squid不能理解。在此情形下，<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/squid-2" title="查看 squid 的全部文章" target="_blank">squid</a></span>发送现有cache拷贝（很可能是陈旧的）到客户端。</p>
<p><strong>TCP_REFRESH_MISS</strong></p>
<p>Squid发现请求资源的貌似陈旧的拷贝，并发送确认请求到原始服务器。原始服务器响应新的内容，指示这个cache拷贝确实是陈旧的。</p>
<p><strong>TCP_CLIENT_REFRESH_MISS</strong></p>
<p>Squid发现了请求资源的拷贝，但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器，强迫cache确认。</p>
<p><strong>TCP_IMS_HIT</strong></p>
<p>客户端发送确认请求，Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端，而不联系原始服务器。<br />
<strong><br />
TCP_SWAPFAIL_MISS</strong></p>
<p>Squid发现请求资源的有效拷贝，但从磁盘装载它失败。这时<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/squid-2" title="查看 squid 的全部文章" target="_blank">squid</a></span>发送请求到原始服务器，就如同这是个cache丢失一样。</p>
<p><strong>TCP_NEGATIVE_HIT</strong></p>
<p>在对原始服务器的请求导致HTTP错误时，Squid也会cache这个响应。在短时间内对这些资源的重复请求，导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache，不会写往磁盘。下列HTTP状态码可能导致否定 cache（也遵循于其他约束）： 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。</p>
<p><strong>TCP_MEM_HIT</strong></p>
<p>Squid在内存cache里发现请求资源的有效拷贝，并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如，某些cache在内存里，但要求确认的响应，会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。</p>
<p><strong>TCP_DENIED</strong></p>
<p>因为http_access或http_reply_access规则，客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-，然而被http_reply_access拒绝的请求，在相应地方有一个有效值。</p>
<p><strong>TCP_OFFLINE_HIT</strong></p>
<p>当offline_mode激活时，Squid对任何cache响应返回cache命中，而不用考虑它的新鲜程度。</p>
<p><strong>TCP_REDIRECT</strong></p>
<p>重定向程序告诉Squid产生一个HTTP重定向到新的URI（见11.1节）。正常的，Squid不会记录这些重定向。假如要这样做，必须在编译squid前，手工定义LOG_TCP_REDIRECTS预处理指令。</p>
<p><strong>NONE</strong></p>
<p>无分类的结果用于特定错误，例如无效主机名。</p>
<p>相应于ICP查询，下列标签可能出现在access.log文件的第四域。</p>
<p><strong>UDP_HIT</strong></p>
<p>Squid在cache里发现请求资源的貌似新鲜的拷贝。</p>
<p><strong>UDP_MISS</strong></p>
<p>Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求，就可能是个cache丢失。请对比UDP_MISS_NOFETCH。</p>
<p><strong>UDP_MISS_NOFETCH</strong></p>
<p>跟UDP_MISS类似，不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项，Squid在启动并编译其内存索引时，会返回这个标签而不是UDP_MISS。</p>
<p><strong>UDP_DENIED</strong></p>
<p>因为icp_access规则，ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED，并且客户端数据库激活了（见附录A），Squid在1小时内，停止发送任何ICP响应到该客户端。若这点发生，你也可在cache.log里见到一个警告。</p>
<p><strong>UDP_INVALID</strong></p>
<p>Squid接受到无效查询（例如截断的消息、无效协议版本、URI里的空格等）。Squid发送UDP_INVALID响应到客户端。</p>
<p><span id="more-365"></span></p>
<h4>附:HTTP响应状态码</h4>
<p>Table 13-1列出了数字HTTP响应CODE和理由短句。注意Squid和其他HTTP客户端仅仅关注这些数字值。理由短句是纯解释性的，不会影响响应的意 义。对每个状态码，也提供了一个到RFC 2616的具体节的索引。注意状态码0和600是squid使用的非标准的值，不会在RFC里提到。<br />
Table 13-1. HTTP response status codes</p>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Code</td>
<td>Reason phrase</td>
<td>RFC 2616 section</td>
</tr>
<tr>
<td>0</td>
<td>No Response Received (Squid-specific)</td>
<td>N/A</td>
</tr>
<tr>
<td>1xx</td>
<td>Informational</td>
<td>10.1</td>
</tr>
<tr>
<td>100</td>
<td>Continue</td>
<td>10.1.1</td>
</tr>
<tr>
<td>101</td>
<td>Switching Protocols</td>
<td>10.1.2</td>
</tr>
<tr>
<td>2xx</td>
<td>Successful</td>
<td>10.2</td>
</tr>
<tr>
<td>200</td>
<td>OK</td>
<td>10.2.1</td>
</tr>
<tr>
<td>201</td>
<td>Created</td>
<td>10.2.2</td>
</tr>
<tr>
<td>202</td>
<td>Accepted</td>
<td>10.2.3</td>
</tr>
<tr>
<td>203</td>
<td>Non-Authoritative Information</td>
<td>10.2.4</td>
</tr>
<tr>
<td>204</td>
<td>No Content</td>
<td>10.2.5</td>
</tr>
<tr>
<td>205</td>
<td>Reset Content</td>
<td>10.2.6</td>
</tr>
<tr>
<td>206</td>
<td>Partial Content</td>
<td>10.2.7</td>
</tr>
<tr>
<td>3xx</td>
<td>Redirection</td>
<td>10.3</td>
</tr>
<tr>
<td>300</td>
<td>Multiple Choices</td>
<td>10.3.1</td>
</tr>
<tr>
<td>301</td>
<td>Moved Permanently</td>
<td>10.3.2</td>
</tr>
<tr>
<td>302</td>
<td>Found</td>
<td>10.3.3</td>
</tr>
<tr>
<td>303</td>
<td>See Other</td>
<td>10.3.4</td>
</tr>
<tr>
<td>304</td>
<td>Not Modified</td>
<td>10.3.5</td>
</tr>
<tr>
<td>305</td>
<td>Use Proxy</td>
<td>10.3.6</td>
</tr>
<tr>
<td>306</td>
<td>(Unused)</td>
<td>10.3.7</td>
</tr>
<tr>
<td>307</td>
<td>Temporary Redirect</td>
<td>10.3.8</td>
</tr>
<tr>
<td>4xx</td>
<td>Client Error</td>
<td>10.4</td>
</tr>
<tr>
<td>400</td>
<td>Bad Request</td>
<td>10.4.1</td>
</tr>
<tr>
<td>401</td>
<td>Unauthorized</td>
<td>10.4.2</td>
</tr>
<tr>
<td>402</td>
<td>Payment Required</td>
<td>10.4.3</td>
</tr>
<tr>
<td>403</td>
<td>Forbidden</td>
<td>10.4.4</td>
</tr>
<tr>
<td>404</td>
<td>Not Found</td>
<td>10.4.5</td>
</tr>
<tr>
<td>405</td>
<td>Method Not Allowed</td>
<td>10.4.6</td>
</tr>
<tr>
<td>406</td>
<td>Not Acceptable</td>
<td>10.4.7</td>
</tr>
<tr>
<td>407</td>
<td>Proxy Authentication Required</td>
<td>10.4.8</td>
</tr>
<tr>
<td>408</td>
<td>Request Timeout</td>
<td>10.4.9</td>
</tr>
<tr>
<td>409</td>
<td>Conflict</td>
<td>10.4.10</td>
</tr>
<tr>
<td>410</td>
<td>Gone</td>
<td>10.4.11</td>
</tr>
<tr>
<td>411</td>
<td>Length Required</td>
<td>10.4.12</td>
</tr>
<tr>
<td>412</td>
<td>Precondition Failed</td>
<td>10.4.13</td>
</tr>
<tr>
<td>413</td>
<td>Request Entity Too Large</td>
<td>10.4.14</td>
</tr>
<tr>
<td>414</td>
<td>Request-URI Too Long</td>
<td>10.4.15</td>
</tr>
<tr>
<td>415</td>
<td>Unsupported Media Type</td>
<td>10.4.16</td>
</tr>
<tr>
<td>416</td>
<td>Requested Range Not Satisfiable</td>
<td>10.4.17</td>
</tr>
<tr>
<td>417</td>
<td>Expectation Failed</td>
<td>10.4.18</td>
</tr>
<tr>
<td>5xx</td>
<td>Server Error</td>
<td>10.5</td>
</tr>
<tr>
<td>500</td>
<td>Internal Server Error</td>
<td>10.5.1</td>
</tr>
<tr>
<td>501</td>
<td>Not Implemented</td>
<td>10.5.2</td>
</tr>
<tr>
<td>502</td>
<td>Bad Gateway</td>
<td>10.5.3</td>
</tr>
<tr>
<td>503</td>
<td>Service Unavailable</td>
<td>10.5.4</td>
</tr>
<tr>
<td>504</td>
<td>Gateway Timeout</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/squid/squid%e6%97%a5%e5%bf%97%e5%86%85%e5%ae%b9%e8%af%a6%e8%a7%a3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过EXPLAIN分析低效SQL 的执行计划</title>
		<link>http://www.linuxsee.com/mysql/%e9%80%9a%e8%bf%87explain%e5%88%86%e6%9e%90%e4%bd%8e%e6%95%88sql-%e7%9a%84%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html</link>
		<comments>http://www.linuxsee.com/mysql/%e9%80%9a%e8%bf%87explain%e5%88%86%e6%9e%90%e4%bd%8e%e6%95%88sql-%e7%9a%84%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html#comments</comments>
		<pubDate>Thu, 29 Dec 2011 08:53:25 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[explain]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=362</guid>
		<description><![CDATA[我们可以通过explain 或者desc 获取mysql 如何执行SELECT 语句的信息，包括select 语句执行过程表如何连接和连接的次序。explain 可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。 mysql&#62; explain SELECT u.*,Y(n.Flocal) lat,X(n.Flocal) lng FROM ylx_user as u JOIN ylx_near_user AS n USING(Fuid) WHERE MBRContains(GeomFromText(&#8216;Polygon((116.415584 40.006519,116.395260 40.033120,116.380138 39.999711,116.404332 39.981661,116.413262 40.019689,116.386783 40.028007,116.384629 39.987850,116.411660 39.989809,116.406896 40.029465,116.381084 40.017357,116.415584 40.006519))&#8217;),n.Flocal) AND n.Ftype=0\G *************************** 1. row *************************** id: 1  select_type: SIMPLE table: n type: ALLpossible_keys: Fuid,Flocal key: NULL key_len: NULL ref: [...]]]></description>
			<content:encoded><![CDATA[<p>我们可以通过<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/explain" title="查看 explain 的全部文章" target="_blank">explain</a></span> 或者desc 获取<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span> 如何执行SELECT 语句的信息，包括select 语句执行过程表如何连接和连接的次序。<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/explain" title="查看 explain 的全部文章" target="_blank">explain</a></span> 可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。</p>
<p><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span>&gt; <span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/explain" title="查看 explain 的全部文章" target="_blank">explain</a></span> SELECT u.*,Y(n.Flocal) lat,X(n.Flocal) lng FROM ylx_user as u JOIN ylx_near_user AS n USING(Fuid) WHERE MBRContains(GeomFromText(&#8216;Polygon((116.415584 40.006519,116.395260 40.033120,116.380138 39.999711,116.404332 39.981661,116.413262 40.019689,116.386783 40.028007,116.384629 39.987850,116.411660 39.989809,116.406896 40.029465,116.381084 40.017357,116.415584 40.006519))&#8217;),n.Flocal) AND n.Ftype=0\G</p>
<p>*************************** 1. row ***************************</p>
<p>id: 1  select_type: SIMPLE</p>
<p>table: n</p>
<p>type: ALLpossible_keys: Fuid,Flocal</p>
<p>key: NULL</p>
<p>key_len: NULL</p>
<p>ref: NULL</p>
<p>rows: 30</p>
<p>Extra: Using where</p>
<p>*************************** 2. row ***************************</p>
<p>id: 1  select_type: SIMPLE</p>
<p>table: u</p>
<p>type: eq_refpossible_keys: PRIMARY</p>
<p>key: PRIMARY</p>
<p>key_len: 4</p>
<p>ref: youlianxidb.n.Fuid</p>
<p>rows: 1</p>
<p>Extra: 2 rows in set (0.00 sec)</p>
<p>select_type： select 类型</p>
<p>table： 输出结果集的表</p>
<p>type： 表示表的连接类型当表中仅有一行是type的值为system是最佳的连接类型；当select操作中使用索引进行表连接时type的值为ref；当select的表连接没有使用索引时，经常会看到type的值为ALL，表示对该表进行了全表扫描，这时需要考虑通过创建索引来提高表连接的效率。</p>
<p>possible_keys： 表示查询时,可以使用的索引列.</p>
<p>key： 表示使用的索引</p>
<p>key_len： 索引长度</p>
<p>rows： 扫描范围</p>
<p>Extra： 执行情况的说明和描述</p>
<p>&nbsp;</p>
<p>确定问题，并采取相应的优化措施：经过以上步骤，基本可以确认问题出现的原因，可以根据情况采取相应的措施，进行优化提高执行的效率。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/mysql/%e9%80%9a%e8%bf%87explain%e5%88%86%e6%9e%90%e4%bd%8e%e6%95%88sql-%e7%9a%84%e6%89%a7%e8%a1%8c%e8%ae%a1%e5%88%92.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>中国最完整的sysctl.conf优化方案(ZT)</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e4%b8%ad%e5%9b%bd%e6%9c%80%e5%ae%8c%e6%95%b4%e7%9a%84sysctl-conf%e4%bc%98%e5%8c%96%e6%96%b9%e6%a1%88zt.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e4%b8%ad%e5%9b%bd%e6%9c%80%e5%ae%8c%e6%95%b4%e7%9a%84sysctl-conf%e4%bc%98%e5%8c%96%e6%96%b9%e6%a1%88zt.html#comments</comments>
		<pubDate>Thu, 29 Dec 2011 06:45:08 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sysctl]]></category>
		<category><![CDATA[调优]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=359</guid>
		<description><![CDATA[网上关于sysctl.conf的优化方案有各种版本，大多都是抄来抄去的，让新人看了很迷茫。为解决此问题，经过两天的整理，查了N多资料，将大家常用的总结如下，很多默认的不需要修改的暂未涉及，今后将逐步把所有的项目都有个翻译、讲解、修改建议，如有修改，将以此文为准，其他地方的内容，本人不负责更新。因此转载请注明链接地址：http://www.bsdlover.cn/html/38/n-138.html如果您有补充或修订意见，请于本文后评论或邮件联系cujxtm@gmail.com，万分感谢！ ################### 所有rfc相关的选项都是默认启用的，因此网上的那些还自己写rfc支持的都可以扔掉了:) ############################### net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 ############################# 通过源路由，攻击者可以尝试到达内部IP地址 &#8211;包括RFC1918中的地址，所以 不接受源路由信息包可以防止你的内部网络被探测。 ################################# net.inet.tcp.drop_synfin=1 ################################### 安全参数，编译内核的时候加了options TCP_DROP_SYNFIN才可以用，可以阻止某些OS探测。 ################################## kern.maxvnodes=8446 #################http://www.bsdlover.cn######### vnode 是对文件或目录的一种内部表达。 因此， 增加可以被操作系统利用的 vnode 数量将降低磁盘的 I/O。 一般而言， 这是由操作系统自行完成的，也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈， 而系统的 vnode 不足， 则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。 要查看当前在用的 vnode 数量： # sysctl vfs.numvnodes vfs.numvnodes: 91349 要查看最大可用的 vnode 数量： # sysctl kern.maxvnodes kern.maxvnodes: 100000 如果当前的 vnode 用量接近最大值，则将 kern.maxvnodes 值增大 1,000 [...]]]></description>
			<content:encoded><![CDATA[<p>网上关于<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/sysctl" title="查看 sysctl 的全部文章" target="_blank">sysctl</a></span>.conf的优化方案有各种版本，大多都是抄来抄去的，让新人看了很迷茫。为解决此问题，经过两天的整理，查了N多资料，将大家常用的总结如下，很多默认的不需要修改的暂未涉及，今后将逐步把所有的项目都有个翻译、讲解、修改建议，如有修改，将以此文为准，其他地方的内容，本人不负责更新。因此转载请注明链接地址：<a href="http://www.bsdlover.cn/html/38/n-138.html" target="_blank">http://www.bsdlover.cn/html/38/n-138.html</a>如果您有补充或修订意见，请于本文后评论或邮件联系<a href="mailto:cujxtm@gmail.com">cujxtm@gmail.com</a>，万分感谢！</p>
<p>###################<br />
所有rfc相关的选项都是默认启用的，因此网上的那些还自己写rfc支持的都可以扔掉了:)<br />
###############################</p>
<p>net.inet.ip.sourceroute=0<br />
net.inet.ip.accept_sourceroute=0<br />
#############################<br />
通过源路由，攻击者可以尝试到达内部IP地址 &#8211;包括RFC1918中的地址，所以<br />
不接受源路由信息包可以防止你的内部网络被探测。<br />
#################################</p>
<p>net.inet.tcp.drop_synfin=1<br />
###################################<br />
安全参数，编译内核的时候加了options TCP_DROP_SYNFIN才可以用，可以阻止某些OS探测。<br />
##################################</p>
<p>kern.maxvnodes=8446<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
vnode 是对文件或目录的一种内部表达。 因此， 增加可以被操作系统利用的 vnode 数量将降低磁盘的 I/O。<br />
一般而言， 这是由操作系统自行完成的，也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈，<br />
而系统的 vnode 不足， 则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。<br />
要查看当前在用的 vnode 数量：<br />
# <span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/sysctl" title="查看 sysctl 的全部文章" target="_blank">sysctl</a></span> vfs.numvnodes<br />
vfs.numvnodes: 91349<br />
要查看最大可用的 vnode 数量：<br />
# sysctl kern.maxvnodes<br />
kern.maxvnodes: 100000<br />
如果当前的 vnode 用量接近最大值，则将 kern.maxvnodes 值增大 1,000 可能是个好主意。<br />
您应继续查看 vfs.numvnodes 的数值， 如果它再次攀升到接近最大值的程度，<br />
仍需继续提高 kern.maxvnodes。 在 top(1) 中显示的内存用量应有显著变化，<br />
更多内存会处于活跃 (active) 状态。<br />
####################################</p>
<p>kern.maxproc: 964<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
Maximum number of processes<br />
####################################<br />
kern.maxprocperuid: 867<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
Maximum processes allowed per userid<br />
####################################<br />
因为我的maxusers设置的是256，20+16*maxusers＝4116。<br />
maxprocperuid至少要比maxproc少1，因为init(8) 这个系统程序绝对要保持在运作状态。<br />
我给它设置的2068。</p>
<p>kern.maxfiles: 1928<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
系统中支持最多同时开启的文件数量，如果你在运行数据库或大的很吃描述符的进程，那么应该设置在20000以上，<br />
比如kde这样的桌面环境，它同时要用的文件非常多。<br />
一般推荐设置为32768或者65536。<br />
####################################</p>
<p>kern.argmax: 262144<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
maximum number of bytes (or characters) in an argument list.<br />
命令行下最多支持的参数，比如你在用find命令来批量删除一些文件的时候<br />
find . -name &#8220;*.old&#8221; -delete，如果文件数超过了这个数字，那么会提示你数字太多的。<br />
可以利用find . -name &#8220;*.old&#8221; -ok rm {} \;来删除。<br />
默认的参数已经足够多了，因此不建议再做修改。<br />
####################################</p>
<p>kern.securelevel: -1<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
-1：这是系统默认级别，没有提供任何内核的保护错误；<br />
0：基本上作用不多，当你的系统刚启动就是0级别的，当进入多用户模式的时候就自动变成1级了。<br />
1：在这个级别上，有如下几个限制：<br />
a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块；<br />
b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存；<br />
c. 不能直接往已经装在(mounted)的磁盘写东西，也就是不能格式化磁盘，但是可以通过标准的内核接口执行写操作；<br />
d. 不能启动X-windows，同时不能使用chflags来修改文件属性；<br />
2：在 1 级别的基础上还不能写没装载的磁盘，而且不能在1秒之内制造多次警告，这个是防止DoS控制台的；<br />
3：在 2 级别的级别上不允许修改IPFW防火墙的规则。<br />
如果你已经装了防火墙，并且把规则设好了，不轻易改动，那么建议使用3级别，如果你没有装防火墙，而且还准备装防火墙的话，不建议使用。<br />
我们这里推荐使用 2 级别，能够避免比较多对内核攻击。<br />
####################################</p>
<p>kern.maxfilesperproc: 1735<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
每个进程能够同时打开的最大文件数量，网上很多资料写的是32768<br />
除非用异步I/O或大量线程，打开这么多的文件恐怕是不太正常的。<br />
我个人建议不做修改，保留默认。<br />
####################################</p>
<p>kern.ipc.maxsockbuf: 262144<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
最大的套接字缓冲区，网上有建议设置为2097152（2M）、8388608（8M）的。<br />
我个人倒是建议不做修改，保持默认的256K即可，缓冲区大了可能造成碎片、阻塞或者丢包。<br />
####################################</p>
<p>kern.ipc.somaxconn: 128<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
最大的等待连接完成的套接字队列大小，即并发连接数。<br />
高负载服务器和受到Dos攻击的系统也许会因为这个队列被塞满而不能提供正常服务。<br />
默认为128，推荐在1024-4096之间，根据机器和实际情况需要改动，数字越大占用内存也越大。<br />
####################################</p>
<p>kern.ipc.nmbclusters: 4800<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
这个值用来调整系统在开机后所要分配给网络 mbufs 的 cluster 数量，<br />
由于每个 cluster 大小为 2K，所以当这个值为 1024 时，也是会用到 2MB 的核心内存空间。<br />
假设我们的网页同时约有 1000 个联机，而 TCP 传送及接收的暂存区大小都是 16K，<br />
则最糟的情况下，我们会需要 (16K+16K) * 1024，也就是 32MB 的空间，<br />
然而所需的 mbufs 大概是这个空间的二倍，也就是 64MB，所以所需的 cluster 数量为 64MB/2K，也就是 32768。<br />
对于内存有限的机器，建议值是 1024 到 4096 之间，而当拥有海量存储器空间时，我们可以将它设定为 4096 到 32768 之间。<br />
我们可以使用 netstat 这个指令并加上参数 -m 来查看目前所使用的 mbufs 数量。<br />
要修改这个值必须在一开机就修改，所以只能在 /boot/loader.conf 中加入修改的设定<br />
kern.ipc.nmbclusters=32768<br />
####################################</p>
<p>kern.ipc.shmmax: 33554432<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
共享内存和信号灯(&#8220;System VIPC&#8221;)如果这些过小的话，有些大型的软件将无法启动<br />
安装xine和mplayer提示的设置为67108864，即64M，<br />
如果内存多的话，可以设置为134217728，即128M<br />
####################################</p>
<p>kern.ipc.shmall: 8192<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
共享内存和信号灯(&#8220;System VIPC&#8221;)如果这些过小的话，有些大型的软件将无法启动<br />
安装xine和mplayer提示的设置为32768<br />
####################################</p>
<p>kern.ipc.shm_use_phys: 0<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
如果我们将它设成 1，则所有 System V 共享内存 (share memory，一种程序间沟通的方式)部份都会被留在实体的内存 (physical memory) 中，<br />
而不会被放到硬盘上的 swap 空间。我们知道物理内存的存取速度比硬盘快许多，而当物理内存空间不足时，<br />
部份数据会被放到虚拟的内存上，从物理内存和虚拟内存之间移转的动作就叫作 swap。如果时常做 swap 的动作，<br />
则需要一直对硬盘作 I/O，速度会很慢。因此，如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间，<br />
或者是共享内存空间很大时，我们可以将这个值打开。<br />
这一项，我个人建议不做修改，除非你的内存非常大。<br />
####################################</p>
<p>kern.ipc.shm_allow_removed: 0<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
共享内存是否允许移除？这项似乎是在fb下装vmware需要设置为1的，否则会有加载SVGA出错的提示<br />
作为服务器，这项不动也罢。<br />
####################################</p>
<p>kern.ipc.numopensockets: 12<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
已经开启的socket数目，可以在最繁忙的时候看看它是多少，然后就可以知道maxsockets应该设置成多少了。<br />
####################################</p>
<p>kern.ipc.maxsockets: 1928<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
这是用来设定系统最大可以开启的 socket 数目。如果您的服务器会提供大量的 FTP 服务，<br />
而且常快速的传输一些小档案，您也许会发现常传输到一半就中断。因为 FTP 在传输档案时，<br />
每一个档案都必须开启一个 socket 来传输，但关闭 socket 需要一段时间，如果传输速度很快，<br />
而档案又多，则同一时间所开启的 socket 会超过原本系统所许可的值，这时我们就必须把这个值调大一点。<br />
除了 FTP 外，也许有其它网络程序也会有这种问题。<br />
然而，这个值必须在系统一开机就设定好，所以如果要修改这项设定，我们必须修改 /boot/loader.conf 才行<br />
kern.ipc.maxsockets=&#8221;16424&#8243;<br />
####################################</p>
<p>kern.ipc.nsfbufs: 1456<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
经常使用 sendfile(2) 系统调用的繁忙的服务器，<br />
有必要通过 NSFBUFS 内核选项或者在 /boot/loader.conf (查看 loader(8) 以获得更多细节) 中设置它的值来调节 sendfile(2) 缓存数量。<br />
这个参数需要调节的普通原因是在进程中看到 sfbufa 状态。sysctl kern.ipc.nsfbufs 变量在内核配置变量中是只读的。<br />
这个参数是由 kern.maxusers 决定的，然而它可能有必要因此而调整。<br />
在/boot/loader.conf里加入<br />
kern.ipc.nsfbufs=&#8221;2496&#8243;<br />
####################################</p>
<p><span id="more-359"></span><br />
kern.maxusers: 59<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
maxusers 的值决定了处理程序所容许的最大值，20+16*maxusers 就是你将得到的所容许处理程序。<br />
系统一开机就必须要有 18 个处理程序 (process)，即便是简单的执行指令 man 又会产生 9 个 process，<br />
所以将这个值设为 64 应该是一个合理的数目。<br />
如果你的系统会出现 proc table full 的讯息的话，可以就把它设大一点，例如 128。<br />
除非您的系统会需要同时开启很多档案，否则请不要设定超过 256。</p>
<p>可以在 /boot/loader.conf 中加入该选项的设定，<br />
kern.maxusers=256<br />
####################################</p>
<p>kern.coredump: 1<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
如果设置为0，则程序异常退出时不会生成core文件，作为服务器，不建议这样。<br />
####################################</p>
<p>kern.corefile: %N.core<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
可设置为kern.corefile=&#8221;/data/coredump/%U-%P-%N.core&#8221;<br />
其中 %U是UID，%P是进程ID，%N是进程名，当然/data/coredump必须是一个实际存在的目录<br />
####################################</p>
<p>vm.swap_idle_enabled: 0<br />
vm.swap_idle_threshold1: 2<br />
vm.swap_idle_threshold2: 10<br />
#########################<br />
在有很多用户进入、离开系统和有很多空闲进程的大的多用户系统中很有用。<br />
可以让进程更快地进入内存，但它会吃掉更多的交换和磁盘带宽。<br />
系统默认的页面调度算法已经很好了，最好不要更改。<br />
########################</p>
<p>vfs.ufs.dirhash_maxmem: 2097152<br />
#########################<br />
默认的dirhash最大内存,默认2M<br />
增加它有助于改善单目录超过100K个文件时的反复读目录时的性能<br />
建议修改为33554432（32M）<br />
#############################</p>
<p>vfs.vmiodirenable: 1<br />
#################<br />
这个变量控制目录是否被系统缓存。大多数目录是小的，在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 (典型的是512字节)。<br />
当这个变量设置为关闭 (0) 时，缓存器仅仅缓存固定数量的目录，即使您有很大的内存。<br />
而将其开启 (设置为1) 时，则允许缓存器用 VM 页面缓存来缓存这些目录，让所有可用内存来缓存目录。<br />
不利的是最小的用来缓存目录的核心内存是大于 512 字节的物理页面大小(通常是 4k)。<br />
我们建议如果您在运行任何操作大量文件的程序时保持这个选项打开的默认值。<br />
这些服务包括 web 缓存，大容量邮件系统和新闻系统。<br />
尽管可能会浪费一些内存，但打开这个选项通常不会降低性能。但还是应该检验一下。<br />
####################</p>
<p>vfs.hirunningspace: 1048576<br />
############################<br />
这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可，<br />
但当我们有多颗硬盘时，我们可以将它调大为 4MB 或 5MB。<br />
注意这个设置成很高的值(超过缓存器的写极限)会导致坏的性能。<br />
不要盲目的把它设置太高！高的数值会导致同时发生的读操作的迟延。<br />
#############################</p>
<p>vfs.write_behind: 1<br />
#########################<br />
这个选项预设为 1，也就是打开的状态。在打开时，在系统需要写入数据在硬盘或其它储存设备上时，<br />
它会等到收集了一个 cluster 单位的数据后再一次写入，否则会在一个暂存区空间有写入需求时就立即写到硬盘上。<br />
这个选项打开时，对于一个大的连续的文件写入速度非常有帮助。但如果您遇到有很多行程延滞在等待写入动作时，您可能必须关闭这个功能。<br />
############################</p>
<p>net.local.stream.sendspace: 8192<br />
##################################<br />
本地套接字连接的数据发送空间<br />
建议设置为65536<br />
###################################<br />
net.local.stream.recvspace: 8192<br />
##################################<br />
本地套接字连接的数据接收空间<br />
建议设置为65536<br />
###################################</p>
<p>net.inet.ip.portrange.lowfirst: 1023<br />
net.inet.ip.portrange.lowlast: 600<br />
net.inet.ip.portrange.first: 49152<br />
net.inet.ip.portrange.last: 65535<br />
net.inet.ip.portrange.hifirst: 49152<br />
net.inet.ip.portrange.hilast: 65535<br />
###################<br />
以上六项是用来控制TCP及UDP所使用的port范围，这个范围被分成三个部份，低范围、预设范围、及高范围。<br />
这些是你的服务器主动发起连接时的临时端口的范围，预设的已经1万多了，一般的应用就足够了。<br />
如果是比较忙碌的FTP server，一般也不会同时提供给1万多人访问的，<br />
当然如果很不幸，你的服务器就要提供很多，那么可以修改first的值，比如直接用1024开始<br />
#########################</p>
<p>net.inet.ip.redirect: 1<br />
#########################<br />
设置为0，屏蔽ip重定向功能<br />
###########################</p>
<p>net.inet.ip.rtexpire: 3600<br />
net.inet.ip.rtminexpire: 10<br />
########################<br />
很多<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/apache" title="apache" rel="nofollow" target="_blank">apache</a></span>产生的CLOSE_WAIT状态，这种状态是等待客户端关闭，但是客户端那边并没有正常的关闭，于是留下很多这样的东东。<br />
建议都修改为2<br />
#########################</p>
<p>net.inet.ip.intr_queue_maxlen: 50<br />
########################<br />
Maximum size of the IP input queue，如果下面的net.inet.ip.intr_queue_drops一直在增加，<br />
那就说明你的队列空间不足了，那么可以考虑增加该值。<br />
##########################<br />
net.inet.ip.intr_queue_drops: 0<br />
####################<br />
Number of packets dropped from the IP input queue,如果你sysctl它一直在增加，<br />
那么增加net.inet.ip.intr_queue_maxlen的值。<br />
#######################</p>
<p>net.inet.ip.fastforwarding: 0<br />
#############################<br />
如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表，节约路由的计算时间<br />
但会需要大量的内核内存空间来保存路由表。<br />
如果内存够大，打开吧，呵呵<br />
#############################</p>
<p>net.inet.ip.random_id: 0<br />
#####################<br />
默认情况下，ip包的id号是连续的，而这些可能会被攻击者利用，比如可以知道你nat后面带了多少主机。<br />
如果设置成1，则这个id号是随机的，嘿嘿。<br />
#####################</p>
<p>net.inet.icmp.maskrepl: 0<br />
############################<br />
防止广播风暴，关闭其他广播探测的响应。默认即是，无须修改。<br />
###############################</p>
<p>net.inet.icmp.icmplim: 200<br />
##############################<br />
限制系统发送ICMP速率，改为100吧，或者保留也可，并不会给系统带来太大的压力。<br />
###########################<br />
net.inet.icmp.icmplim_output: 1<br />
###################################<br />
如果设置成0，就不会看到提示说Limiting icmp unreach response from 214 to 200 packets per second 等等了<br />
不过禁止输出容易让我们忽视攻击的存在。这个自己看着办吧。<br />
######################################</p>
<p>net.inet.icmp.drop_redirect: 0<br />
net.inet.icmp.log_redirect: 0<br />
###################################<br />
设置为1，屏蔽ICMP重定向功能<br />
###################################<br />
net.inet.icmp.bmcastecho: 0<br />
############################<br />
防止广播风暴，关闭广播ECHO响应，默认即是，无须修改。<br />
###############################</p>
<p>net.inet.tcp.mssdflt: 512<br />
net.inet.tcp.minmss: 216<br />
###############################<br />
数据包数据段最小值，以上两个选项最好不动！或者只修改mssdflt为1460，minmss不动。<br />
原因详见<a href="http://www.bsdlover.cn/security/2007/1211/article_4.html" target="_blank">http://www.bsdlover.cn/security/2007/1211/article_4.html</a><br />
#############################</p>
<p>net.inet.tcp.keepidle: 7200000<br />
######################<br />
TCP的套接字的空闲时间，默认时间太长，可以改为600000（10分钟）。<br />
##########################</p>
<p>net.inet.tcp.sendspace: 32768<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
最大的待发送TCP数据缓冲区空间，应用程序将数据放到这里就认为发送成功了，系统TCP堆栈保证数据的正常发送。<br />
####################################<br />
net.inet.tcp.recvspace: 65536<br />
###################################<br />
最大的接受TCP缓冲区空间，系统从这里将数据分发给不同的套接字，增大该空间可提高系统瞬间接受数据的能力以提高性能。<br />
###################################<br />
这二个选项分别控制了网络 TCP 联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K，而接收暂存区为 64K。<br />
如果需要加速 TCP 的传输，可以将这二个值调大一点，但缺点是太大的值会造成系统核心占用太多的内存。<br />
如果我们的机器会同时服务数百或数千个网络联机，那么这二个选项最好维持默认值，否则会造成系统核心内存不足。<br />
但如果我们使用的是 gigabite 的网络，将这二个值调大会有明显效能的提升。<br />
传送及接收的暂存区大小可以分开调整，<br />
例如，假设我们的系统主要做为网页服务器，我们可以将接收的暂存区调小一点，并将传送的暂存区调大，如此一来，我们就可以避免占去太多的核心内存空间。</p>
<p>net.inet.udp.maxdgram: 9216<br />
#########################<br />
最大的发送UDP数据缓冲区大小，网上的资料大多都是65536，我个人认为没多大必要，<br />
如果要调整，可以试试24576。<br />
##############################<br />
net.inet.udp.recvspace: 42080<br />
##################<br />
最大的接受UDP缓冲区大小，网上的资料大多都是65536，我个人认为没多大必要，<br />
如果要调整，可以试试49152。<br />
#######################<br />
以上四项配置通常不会导致问题，一般说来网络流量是不对称的，因此应该根据实际情况调整，并观察其效果。<br />
如果我们将传送或接收的暂存区设为大于 65535，除非服务器本身及客户端所使用的操作系统都支持 TCP 协议的 windows scaling extension (请参考 RFC 1323 文件)。<br />
FreeBSD默认已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 选项)。<br />
###################################################</p>
<p>net.inet.tcp.log_in_vain: 0<br />
##################<br />
记录下任何TCP连接，这个一般情况下不应该更改。<br />
####################</p>
<p>net.inet.tcp.blackhole: 0<br />
##################################<br />
建议设置为2，接收到一个已经关闭的端口发来的所有包，直接drop，如果设置为1则是只针对TCP包<br />
#####################################</p>
<p>net.inet.tcp.delayed_ack: 1<br />
###########################<br />
当一台计算机发起TCP连接请求时，系统会回应ACK应答数据包。<br />
该选项设置是否延迟ACK应答数据包，把它和包含数据的数据包一起发送。<br />
在高速网络和低负载的情况下会略微提高性能，但在网络连接较差的时候，<br />
对方计算机得不到应答会持续发起连接请求，反而会让网络更加拥堵，降低性能。<br />
因此这个值我建议您看情况而定，如果您的网速不是问题，可以将封包数量减少一半<br />
如果网络不是特别好，那么就设置为0，有请求就先回应，这样其实浪费的网通、电信的带宽速率而不是你的处理时间:)<br />
############################</p>
<p>net.inet.tcp.inflight.enable: 1<br />
net.inet.tcp.inflight.debug: 0<br />
net.inet.tcp.inflight.rttthresh: 10<br />
net.inet.tcp.inflight.min: 6144<br />
net.inet.tcp.inflight.max: 1073725440<br />
net.inet.tcp.inflight.stab: 20<br />
###########################<br />
限制 TCP 带宽延迟积和 NetBSD 的 TCP/Vegas 类似。<br />
它可以通过将 sysctl 变量 net.inet.tcp.inflight.enable 设置成 1 来启用。<br />
系统将尝试计算每一个连接的带宽延迟积，并将排队的数据量限制在恰好能保持最优吞吐量的水平上。<br />
这一特性在您的服务器同时向使用普通调制解调器，千兆以太网，乃至更高速度的光与网络连接 (或其他带宽延迟积很大的连接) 的时候尤为重要，<br />
特别是当您同时使用滑动窗缩放，或使用了大的发送窗口的时候。<br />
如果启用了这个选项，您还应该把 net.inet.tcp.inflight.debug 设置为 0 (禁用调试)，<br />
对于生产环境而言， 将 net.inet.tcp.inflight.min 设置成至少 6144 会很有好处。<br />
然而， 需要注意的是，这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。<br />
这个限制特性减少了在路由和交换包队列的堵塞数据数量，也减少了在本地主机接口队列阻塞的数据的数量。<br />
在少数的等候队列中、交互式连接，尤其是通过慢速的调制解调器，也能用低的 往返时间操作。<br />
但是，注意这只影响到数据发送 (上载/服务端)。对数据接收(下载)没有效果。<br />
调整 net.inet.tcp.inflight.stab 是 不 推荐的。<br />
这个参数的默认值是 20，表示把 2 个最大包加入到带宽延迟积窗口的计算中。<br />
额外的窗口似的算法更为稳定，并改善对于多变网络环境的相应能力，<br />
但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 inflight 算法低许多)。<br />
对于这些情形， 您可能会希望把这个参数减少到 15， 10， 或 5；<br />
并可能因此而不得不减少 net.inet.tcp.inflight.min (比如说， 3500) 来得到希望的效果。<br />
减少这些参数的值， 只应作为最后不得已时的手段来使用。<br />
############################</p>
<p>net.inet.tcp.syncookies: 1<br />
#########################<br />
SYN cookies是一种用于通过选择加密的初始化TCP序列号，可以对回应的包做验证来降低SYN&#8217;洪水&#8217;攻击的影响的技术。<br />
默认即是，不需修改<br />
########################</p>
<p>net.inet.tcp.msl: 30000<br />
#######################<br />
这个值网上很多文章都推荐的7500，<br />
还可以改的更小一些(如2000或2500)，这样可以加快不正常连接的释放过程(三次握手2秒、FIN_WAIT4秒)。<br />
#########################<br />
net.inet.tcp.always_keepalive: 1<br />
###########################<br />
帮助系统清除没有正常断开的TCP连接，这增加了一些网络带宽的使用，但是一些死掉的连接最终能被识别并清除。<br />
死的TCP连接是被拨号用户存取的系统的一个特别的问题，因为用户经常断开modem而不正确的关闭活动的连接。<br />
#############################</p>
<p>net.inet.udp.checksum: 1<br />
#########################<br />
防止不正确的udp包的攻击，默认即是，不需修改<br />
##############################</p>
<p>net.inet.udp.log_in_vain: 0<br />
#######################<br />
记录下任何UDP连接,这个一般情况下不应该修改。<br />
#######################</p>
<p>net.inet.udp.blackhole: 0<br />
####################<br />
建议设置为1，接收到一个已经关闭的端口发来的所有UDP包直接drop<br />
#######################</p>
<p>net.inet.raw.maxdgram: 8192<br />
#########################<br />
Maximum outgoing raw IP datagram size<br />
很多文章建议设置为65536，好像没多大必要。<br />
######################################<br />
net.inet.raw.recvspace: 8192<br />
######################<br />
Maximum incoming raw IP datagram size<br />
很多文章建议设置为65536，好像没多大必要。<br />
#######################</p>
<p>net.link.ether.inet.max_age: 1200<br />
####################<br />
调整ARP清理的时间，通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。<br />
这项似乎大家都未做改动，我建议不动或者稍微减少，比如300（HP-UX默认的5分钟）<br />
#######################</p>
<p>net.inet6.ip6.redirect: 1<br />
###############################<br />
设置为0，屏蔽ipv6重定向功能<br />
###########################</p>
<p>net.isr.direct: 0<br />
#################<a href="http://www.bsdlover.cn/" target="_blank">http://www.bsdlover.cn</a>#########<br />
所有MPSAFE的网络ISR对包做立即响应,提高网卡性能，设置为1。<br />
####################################</p>
<p>hw.ata.wc: 1<br />
#####################<br />
这个选项用来打开 IDE 硬盘快取。当打开时，如果有数据要写入硬盘时，硬盘会假装已完成写入，并将数据快取起来。<br />
这种作法会加速硬盘的存取速度，但当系统异常关机时，比较容易造成数据遗失。<br />
不过由于关闭这个功能所带来的速度差异实在太大，建议还是保留原本打开的状态吧，不做修改。<br />
###################</p>
<p>security.bsd.see_other_uids: 1<br />
security.bsd.see_other_gids: 1<br />
#####################<br />
不允许用户看到其他用户的进程,因此应该改成0，<br />
#######################</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/%e4%b8%ad%e5%9b%bd%e6%9c%80%e5%ae%8c%e6%95%b4%e7%9a%84sysctl-conf%e4%bc%98%e5%8c%96%e6%96%b9%e6%a1%88zt.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux内存使用的体会(ZT)</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8%e7%9a%84%e4%bd%93%e4%bc%9azt.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8%e7%9a%84%e4%bd%93%e4%bc%9azt.html#comments</comments>
		<pubDate>Wed, 21 Dec 2011 03:27:29 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=356</guid>
		<description><![CDATA[Linux的内存管理，实际上跟windows的内存管理有很相像的地方，都是用虚拟内存这个的概念，说到这里不得不骂MS，为什么在很多时候还有很大的物理内存的时候，却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小，以及如何分配这个问题，在Linux大家就不用再吵什么swap大小的问题，我个人认为，swap设个512M已经足够了，如果你问说512M的SWAP不够用怎么办？只能说大哥你还是加内存吧，要不就检查你的应用，是不是真的出现了memory leak. 夜也深了，就不再说废话了。 在Linux下查看内存我们一般用command free [root@nonamelinux ~]# free total       used       free     shared    buffers     cached Mem:    386024     377116    8908      0      21280     155468 -/+ buffers/cache:     200368    185656 Swap:    393552        0      393552 下面是对这些数值的解释： 第二行(mem)： total:总计物理内存的大小。 used:已使用多大。 free:可用有多少。 Shared:多个进程共享的内存总额。 Buffers/cached:磁盘缓存的大小。 第三行(-/+ buffers/cached): used:已使用多大。 free:可用有多少。 第四行就不多解释了。 [...]]]></description>
			<content:encoded><![CDATA[<p><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span>的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>管理，实际上跟windows的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e5%ad%98" title="查看 内存 的全部文章" target="_blank">内存</a></span>管理有很相像的地方，都是用虚拟内存这个的概念，说到这里不得不骂MS，为什么在很多时候还有很大的物理内存的时候，却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小，以及如何分配这个问题，在<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span>大家就不用再吵什么swap大小的问题，我个人认为，swap设个512M已经足够了，如果你问说512M的SWAP不够用怎么办？只能说大哥你还是加内存吧，要不就检查你的应用，是不是真的出现了memory leak.<br />
夜也深了，就不再说废话了。</p>
<p>在Linux下查看内存我们一般用command free<br />
[root@nonamelinux ~]# free<br />
total       used       free     shared    buffers     cached<br />
Mem:    386024     377116    8908      0      21280     155468<br />
-/+ buffers/cache:     200368    185656<br />
Swap:    393552        0      393552<br />
下面是对这些数值的解释：<br />
第二行(mem)：<br />
total:总计物理内存的大小。<br />
used:已使用多大。<br />
free:可用有多少。<br />
Shared:多个进程共享的内存总额。<br />
Buffers/cached:磁盘缓存的大小。<br />
第三行(-/+ buffers/cached):<br />
used:已使用多大。<br />
free:可用有多少。<br />
第四行就不多解释了。<br />
区别：<br />
第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。<br />
这两个的区别在于使用的角度来看，第一行是从OS的角度来看，因为对于OS，buffers/cached 都是属于被使用，所以他的可用内存是8908KB,已用内存是377116KB,其中包括，内核（OS）使用+Application(X,oracle,etc)使用的+buffers+cached.<br />
第三行所指的是从应用程序角度来看，对于应用程序来说，buffers/cached 是等于可用的，因为buffer/cached是为了提高文件读取的性能，当应用程序需在用到内存的时候，buffer/cached会很快地被回收。<br />
所以从应用程序的角度来说，可用内存=系统free memory+buffers+cached.<br />
如上例：<br />
185656=8908+21280+155468<br />
接下来解释什么时候内存会被交换，以及按什么方交换。<br />
当可用内存少于额定值的时候，就会开会进行交换.<br />
如何看额定值（RHEL4.0）：<br />
#cat /proc/meminfo<br />
交换将通过三个途径来减少系统中使用的物理页面的个数：<br />
1.减少缓冲与页面cache的大小，<br />
2.将系统V类型的内存页面交换出去，<br />
3.换出或者丢弃页面。(Application 占用的内存页，也就是物理内存不足）。<br />
事实上，少量地使用swap是不是影响到系统性能的。</p>
<p>下面是buffers与cached的区别。<br />
buffers是指用来给块设备做的缓冲大小，他只记录文件系统的metadata以及 tracking in-flight pages.<br />
cached是用来给文件做缓冲。<br />
那就是说：buffers是用来存储，目录里面有什么内容，权限等等。<br />
而cached直接用来记忆我们打开的文件，如果你想知道他是不是真的生效，你可以试一下，先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。<br />
实验：在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次，如果想多做请换一个文件名。<br />
#free<br />
#man X<br />
#free<br />
#man X<br />
#free<br />
你可以先后比较一下free后显示buffers的大小。<br />
另一个实验：<br />
#free<br />
#ls /dev<br />
#free<br />
你比较一下两个的大小，当然这个buffers随时都在增加，但你有ls过的话，增加的速度会变得快，这个就是buffers/chached的区别。</p>
<p>&nbsp;</p>
<p>转自：<a href="http://bbs.chinaunix.net/thread-615686-1-1.html">http://bbs.chinaunix.net/thread-615686-1-1.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8%e7%9a%84%e4%bd%93%e4%bc%9azt.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux内核参数优化</title>
		<link>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%bc%98%e5%8c%96.html</link>
		<comments>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%bc%98%e5%8c%96.html#comments</comments>
		<pubDate>Thu, 08 Dec 2011 08:50:26 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LINUX杂记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[内核]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=352</guid>
		<description><![CDATA[Linux内核参数优化 &#160; 我的内核心参数调整原则是，哪个遇到瓶颈调哪个，谨慎使用，不能凭想象乱调一气。看下面例子，其中default是我们公司定做的系统默认的一些参数值。add by yangjian2并非全部都要调整，我只挑几个比较重要的参数说明一下，更多TCP方面的调优请参见 man 7 tcp 。 #++++++++++++++++++default++++++++++++++++++++++++++++++ net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_tw_buckets = 180000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096        87380   4194304 net.ipv4.tcp_wmem = 4096        16384   4194304 #++++++++++++++++++add by yangjian2++++++++++++++++++++++ net.ipv4.tcp_max_syn_backlog = 65536 net.core.netdev_max_backlog =  32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e6%a0%b8" title="查看 内核 的全部文章" target="_blank">内核</a></span>参数<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e4%bc%98%e5%8c%96" title="查看 优化 的全部文章" target="_blank">优化</a></span></strong></p>
<p>&nbsp;</p>
<p>我的<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e5%86%85%e6%a0%b8" title="查看 内核 的全部文章" target="_blank">内核</a></span>心参数调整原则是，哪个遇到瓶颈调哪个，谨慎使用，不能凭想象乱调一气。看下面例子，其中default是我们公司定做的系统默认的一些参数值。add by yangjian2并非全部都要调整，我只挑几个比较重要的参数说明一下，更多TCP方面的调优请参见 man 7 tcp 。<br />
#++++++++++++++++++default++++++++++++++++++++++++++++++<br />
net.ipv4.tcp_syncookies = 1<br />
net.ipv4.tcp_max_tw_buckets = 180000<br />
net.ipv4.tcp_sack = 1<br />
net.ipv4.tcp_window_scaling = 1<br />
net.ipv4.tcp_rmem = 4096        87380   4194304<br />
net.ipv4.tcp_wmem = 4096        16384   4194304<br />
#++++++++++++++++++add by yangjian2++++++++++++++++++++++<br />
net.ipv4.tcp_max_syn_backlog = 65536<br />
net.core.netdev_max_backlog =  32768<br />
net.core.somaxconn = 32768</p>
<p>net.core.wmem_default = 8388608<br />
net.core.rmem_default = 8388608<br />
net.core.rmem_max = 16777216<br />
net.core.wmem_max = 16777216</p>
<p>net.ipv4.tcp_timestamps = 0<br />
net.ipv4.tcp_synack_retries = 2<br />
net.ipv4.tcp_syn_retries = 2</p>
<p>net.ipv4.tcp_tw_recycle = 1<br />
#net.ipv4.tcp_tw_len = 1<br />
net.ipv4.tcp_tw_reuse = 1</p>
<p>net.ipv4.tcp_mem = 94500000 915000000 927000000<br />
net.ipv4.tcp_max_orphans = 3276800<br />
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p>
<p>maxfd: 对于系统所能打开的最大文件描述符fd，可以通过以root启动程序，setrlimit()设置maxfd后，再通过setuid()转为普通用户提供服务,我用的 int set_max_fds(int maxfds); 函数是zhongying提供的。这比用ulimit来的方便的多，不晓得为什么那么多开源软件都没这样用。</p>
<p>net.ipv4.tcp_max_syn_backlog = 65536 : 这个参数可以肯定是必须要修改的，默认值1024，我google了一下，几乎是人云亦云，没有说的明白的。 要讲明白得从man listen说起，int listen(int sockfd, int backlog);  早期的网络编程都中描述，int backlog 代表未完成队列SYN_RECV状态+已完成队列ESTABLISHED的和。但是这个意义在<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/linux" title="查看 Linux 的全部文章" target="_blank">Linux</a></span> 2.2以后的实现中已经被改变了，int backlog只代表已完成队列ESTABLISHED的长度，在AF_INET协议族中（我们广泛使用的就是这个），当int backlog大于SOMAXCONN　 (128 in Linux　2.0 &amp; 2.2)的时候，会被调整为常量SOMAXCONN大小。这个常量可以通过net.core.somaxconn来修改。而未完成队列大小可以通过net.ipv4.tcp_max_syn_backlog来调整，一般遭受syn flood攻击的网站，都存在大量SYN_RECV状态，所以调大tcp_max_syn_backlog值能增加抵抗syn攻击的能力。</p>
<p>net.ipv4.tcp_syncookies = 1 : 当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击 , 默认值是 0。 不过man　listen说当启用syncookies时候，tcp_max_syn_backlog的sysctl调整将失效，和这个描述不是很符合。参见下面两个描述分别是man　listen和man 7 tcp:<br />
When syncookies are enabled there is no logical maximum length and this tcp_max_syn_backlog sysctl  setting  is  ignored.<br />
Send out  syncookies  when the syn backlog queue of a socket overflows.<br />
但我可以肯定的说这个选项对你的性能不会有提高，而且它严重的违背TCP协议，不允许使用TCP扩展,除非遭受攻击，否则不推荐使用。</p>
<p>net.ipv4.tcp_synack_retries = 2 : 对于远端的连接请求SYN，内核会发送SYN ＋ ACK数据报，以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。如果你的网站SYN_RECV状态确实挺多，为了避免syn攻击，那么可以调节重发的次数。</p>
<p>net.ipv4.tcp_syn_retries = 2 : 对于一个新建连接，内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255，默认值是5，对应于180秒左右。这个对防止syn攻击其实是没有用处的，也没必要调节。</p>
<p>net.ipv4.tcp_max_orphans = 3276800 : 这个最好不要修改，因为每增加1，将消耗~64k内存。即使报错 TCP: too many of orphaned sockets 也有可能是由于你的net.ipv4.tcp_mem过小，导致的Out of socket memory，继而引发的。</p>
<p>net.ipv4.tcp_wmem = 4096 16384 4194304 :  为自动调优定义每个socket使用的内存。第一个值是为socket的发送缓冲区分配的最少字节数。第二个值是默认值（该值会被 wmem_default覆盖），缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数（该值会被wmem_max覆盖）。</p>
<p>net.ipv4.tcp_rmem = 4096 87380 4194304 : 接收缓冲区，原理同上。</p>
<p>net.ipv4.tcp_mem = 94500000 915000000 927000000 :<br />
low：当TCP使用了低于该值的内存页面数时，TCP不会考虑释放内存。<br />
pressure：当TCP使用了超过该值的内存页面数量时，TCP试图稳定其内存使用，进入pressure模式，当内存消耗低于low值时则退出pressure状态。<br />
high：允许所有tcp sockets用于排队缓冲数据报的内存页数。</p>
<p>一般情况下这个值是在系统启动时根据系统内存数量计算得到的，如果你的dmesg报　Out of socket memory，你可以试着修改这个参数，顺便介绍３个修改方法:<br />
1, echo &#8220;94500000 915000000 927000000&#8243; &gt; /proc/sys/net/ipv4/tcp_wmem<br />
<span style="font-family: Verdana;"><code>2, sysctl -w "</code></span>net.ipv4.tcp_mem = 94500000 915000000 927000000<span style="font-family: Verdana;"><code>"</code></span><br />
3, net.ipv4.tcp_mem = 94500000 915000000 927000000<span style="font-family: Verdana;"><code> (vi /etc/sysctl.conf</code></span> 然后 <span style="font-family: Verdana;"><code>sysctl -p生效)</code></span></p>
<p>下面命令也许能提供些信息，在你修改tcp参数时做个参考:<br />
[sports@xk-6-244-a8 nbahttpd_beta4.0]$ cat  /proc/net/sockstat<br />
sockets: used 1195<br />
TCP: inuse 1177 orphan 30 tw 199 alloc 1181 mem 216<br />
UDP: inuse 0 mem 0<br />
RAW: inuse 0<br />
FRAG: inuse 0 memory 0</p>
<p>其他我就不多说了，知道这些基本就能解决绝大部分问题了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/linux%e6%9d%82%e8%ae%b0/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%bc%98%e5%8c%96.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LVS+KEEPALIVED配置文档</title>
		<link>http://www.linuxsee.com/lvskeepalived/lvskeepalived%e9%85%8d%e7%bd%ae%e6%96%87%e6%a1%a3.html</link>
		<comments>http://www.linuxsee.com/lvskeepalived/lvskeepalived%e9%85%8d%e7%bd%ae%e6%96%87%e6%a1%a3.html#comments</comments>
		<pubDate>Thu, 24 Nov 2011 09:07:15 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[LVS+KEEPALIVED]]></category>
		<category><![CDATA[keepalived]]></category>
		<category><![CDATA[lvs]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=345</guid>
		<description><![CDATA[LVS+KEEPALIVED配置文档 近期又参考之前写的LVS+KEEPALIVED文档重新写了一遍，加入实例测试部分，分享出来…… LVS+KEEPALIVED配置文档]]></description>
			<content:encoded><![CDATA[<p><strong>LVS</strong>+<strong>KEEPALIVED</strong>配置文档</p>
<p>近期又参考之前写的LVS+KEEPALIVED文档重新写了一遍，加入实例测试部分，分享出来……</p>
<p><a href="http://www.linuxsee.com/wp-content/uploads/2011/11/LVS+KEEPALIVED配置文档_by-linuxsee.com_.pdf">LVS+KEEPALIVED配置文档</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/lvskeepalived/lvskeepalived%e9%85%8d%e7%bd%ae%e6%96%87%e6%a1%a3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL优化笔记</title>
		<link>http://www.linuxsee.com/mysql/mysql%e4%bc%98%e5%8c%96%e7%ac%94%e8%ae%b0.html</link>
		<comments>http://www.linuxsee.com/mysql/mysql%e4%bc%98%e5%8c%96%e7%ac%94%e8%ae%b0.html#comments</comments>
		<pubDate>Wed, 16 Nov 2011 03:38:23 +0000</pubDate>
		<dc:creator>雨尚</dc:creator>
				<category><![CDATA[MYSQL]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.linuxsee.com/?p=333</guid>
		<description><![CDATA[mysql优化笔记 &#160; 近期工作之余边学边记录，总结了一些基础mysql优化笔记…… &#160; 下载：MySQL优化笔记]]></description>
			<content:encoded><![CDATA[<p><strong><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span></strong><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e4%bc%98%e5%8c%96" title="查看 优化 的全部文章" target="_blank">优化</a></span>笔记</p>
<p>&nbsp;</p>
<p>近期工作之余边学边记录，总结了一些基础<span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/category/mysql" title="mysql" rel="nofollow" target="_blank">mysql</a></span><span class='wp_keywordlink_affiliate'><a href="http://www.linuxsee.com/tag/%e4%bc%98%e5%8c%96" title="查看 优化 的全部文章" target="_blank">优化</a></span>笔记……</p>
<p>&nbsp;</p>
<p>下载：<a href="http://www.linuxsee.com/wp-content/uploads/2011/11/MySQL优化笔记.pdf">MySQL优化笔记</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsee.com/mysql/mysql%e4%bc%98%e5%8c%96%e7%ac%94%e8%ae%b0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

