<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]因timewait没快速回收导致的Cannot assign requested address的解决办法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Tue, 26 Jan 2016 05:26:07 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：一个队列client的服务器上，有一天运维网络调整后，发现其访问队列状态出现下面的提示：<br/><textarea name="code" class="php" rows="15" cols="100">
curl &quot;http://101.200.228.135:1218/?name=video&amp;opt=status&quot;&nbsp;&nbsp;
[root@XD_xiyou_mqp_10 ~]# telnet 101.200.228.135 1218&nbsp;&nbsp;
Trying 101.200.228.135...&nbsp;&nbsp;
telnet: connect to address 101.200.228.135: Cannot assign requested address&nbsp;&nbsp;
telnet: Unable to connect to remote host: Cannot assign requested address&nbsp;&nbsp;
</textarea><br/>根本原因是队列一直在跑，网络调整时出现有些请求因调整没有及时返回，网络可能路很差了，一堆的timewait导致client机上的fd耗尽引发上面的问题，<br/>可以用netstat看下TIMEWAIT情况，发现一大堆的TIMEWAIT，如下图：<br/><a href="http://www.2cto.com/uploadfile/Collfiles/20140816/201408160904132.png" target="_blank"><img src="http://www.2cto.com/uploadfile/Collfiles/20140816/201408160904132.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>据图得出形成很多TIMEWAIT的原因和网络调整有关，查看命令如下：<br/><textarea name="code" class="php" rows="15" cols="100">
netstat -na&#124;grep ESTABLISHED&#124;awk &#039;&#123;print $5&#125;&#039;&#124;awk -F: &#039;&#123;print $1&#125;&#039;&#124;sort&#124;uniq -c
</textarea><br/>——————————————————————————————————————————————<br/>&nbsp;&nbsp;&nbsp;&nbsp; 今天想试一下redis，写了个程序，对redis连续进行100000访问，却出现以了Cannot assign requested address的问题，我起先是以为是redis的问题（可能承受不了这么多访问量），可是redis被大家吹的那么NB，不会出现这么SB的问题吧，于 是google之,发现原来是：<br/>客户端频繁的连服务器，由于每次连接都在很短的时间内结束，导致很多的TIME_WAIT，以至于用光了可用的端 口号，所以新的连接没办法绑定端口，即“Cannot assign requested address”。是客户端的问题不是服务器端的问题。通过netstat，的确看到很多TIME_WAIT状态的连接。<br/>从网上找了解决办法：<br/>执行命令修改如下2个内核参数&nbsp;&nbsp;<br/>sysctl -w net.ipv4.tcp_timestamps=1&nbsp;&nbsp;开启对于TCP时间戳的支持,若该项设置为0，则下面一项设置不起作用<br/>sysctl -w net.ipv4.tcp_tw_recycle=1&nbsp;&nbsp;表示开启TCP连接中TIME-WAIT sockets的快速回收<br/>不过好像只有root用户才能有修改这两个参数的权限，我正好有机器的root权限，修改之，发现，还真可以。<br/>但是如果没有root权限怎么解决，能不能通过修改程序获得就不知道了。希望高人看到后指点一下！<br/>修改/etc/sysctl.conf的文件，加入TCP连接中TIME-WAIT sockets快速回收：<br/><textarea name="code" class="php" rows="15" cols="100">
#开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=1
</textarea><br/>只是修改sysctl文件不会马上生效，如果想使修改马上生效可以执行下面的命令：<br/>#立即对刚修改/etc/sysctl.conf的文件生效<br/>sysctl -p&nbsp;&nbsp;<br/><br/>备注：<br/>sysctl 只是临时的修改配置信息，可以直接修改 /etc/sysctl.conf 文件进行永久修改<br/>sysctl 命令使用：http://blog.chinaunix.net/uid-20622737-id-3759357.html<br/><br/>实践来自：http://blog.chinaunix.net/uid-20622737-id-3759352.html
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]因timewait没快速回收导致的Cannot assign requested address的解决办法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>