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

<channel>
	<title> &#187; too many open files</title>
	<atom:link href="http://www.liguosong.com/tag/too-many-open-files/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.liguosong.com</link>
	<description></description>
	<lastBuildDate>Tue, 08 May 2018 01:02:19 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>too many open files</title>
		<link>http://www.liguosong.com/2014/01/15/too-many-open-files/</link>
		<comments>http://www.liguosong.com/2014/01/15/too-many-open-files/#comments</comments>
		<pubDate>Tue, 14 Jan 2014 23:57:15 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[too many open files]]></category>

		<guid isPermaLink="false">http://www.liguosong.com/?p=244</guid>
		<description><![CDATA[最近两天可以说与这个too many open files是较上劲了。前段时间，redis服务器出现这个错误， [...]]]></description>
				<content:encoded><![CDATA[<p>最近两天可以说与这个too many open files是较上劲了。前段时间，redis服务器出现这个错误，更改了服务器的ulimit的限制。最近go开发的API的服务器也是出现了同样的错误。整的很郁闷啊。不过总得来说，还是学到了很多知识。在此做一个总结。<span id="more-244"></span></p>
<p>在linux服务器上，对于打开文件的描述符是有限制的。默认的1024。可以查看ulimit的设置。ulimit的讲述在网上很多了。可以网上查一下。</p>
<p>不过，当一个程序，在较短的时间内，出现了大量的打开文件描述符的操作还是很值得研究的。下面说说如何去查看这些描述符。</p>
<p>在linux上，有一个proc的目录。这下面记录了大量的进程id。找到你程序的pid。然后在shell输入下面的命令</p>
<pre class="brush:bash">cd /proc/pid/fd</pre>
<p>在每个进程下有很多内容。而文件打开的描述符都存放在fd下面。进入到fd目录后可以 ls -la看一下。就发现了这些打开的是哪些内容了。例如，我的程序是存在大量的socket的连接。那么就可以根据这些socket的id去查看是什么链接了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liguosong.com/2014/01/15/too-many-open-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>go 服务器出现too many open files的错误</title>
		<link>http://www.liguosong.com/2014/01/15/go-%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%87%ba%e7%8e%b0too-many-open-files%e7%9a%84%e9%94%99%e8%af%af/</link>
		<comments>http://www.liguosong.com/2014/01/15/go-%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%87%ba%e7%8e%b0too-many-open-files%e7%9a%84%e9%94%99%e8%af%af/#comments</comments>
		<pubDate>Tue, 14 Jan 2014 23:41:19 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[too many open files]]></category>

		<guid isPermaLink="false">http://www.liguosong.com/?p=241</guid>
		<description><![CDATA[最近两天服务器总是会出现too many open files的错误。真的很是头疼。在本地开发环境中，也用了压 [...]]]></description>
				<content:encoded><![CDATA[<p>最近两天服务器总是会出现too many open files的错误。真的很是头疼。在本地开发环境中，也用了压力测试，发现问题不存在。但是为什么服务器会出现这种错误，有些闹不明白。本来想用ulimit更改一下打开文件的描述符。但这样子觉得并不解决问题。好吧，那就查一下更本的原因。<span id="more-241"></span></p>
<p>服务器是亚马逊，开发语言：golang，数据库：mongo，mysql。缓存：redis。</p>
<p>测试脚本：写了一个golang的并发请求脚本。大概同时请求100.ulimit限制到50.发现错误立刻呈现。发现在程序的进程下打开了大量的socket连接。所以当时就认为是mongo的连接错误。决定mongo的连接使用单例模式。不过后来发现，这些socket是会降下去的。也就是说，连接用完了，就关闭了。但是服务器的socket连接已经明显超过了ulimit的默认限制。项目也刚刚上线，也没有这么大的用户群。所以问题肯定不是处在了mongo的连接错误上。那是redis，mysql?后经过测试，也并不是这些连接的错误。</p>
<p>整的真是很晕啊。最后想起来了，可以看一下服务器的socket的连接是哪些请求。经过查看，发现是80端口。一个网站的。。搞了一天，方向错了。。。突然想起来了，最近添加的一个小功能，需要使用外网的api。在go打开连接后，好像没有关闭请求。加上关闭请求后，问题解决。socket上去，然后会自动下来。</p>
<p>总结：以后要及时关闭这些请求连接。go与php不一样。php在执行完成后，即使你不关闭请求，在解析完成后，所以变量，都会自动释放。go是编译行语言，所以连接打开后，如果不手动关闭，会一直占用。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liguosong.com/2014/01/15/go-%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%87%ba%e7%8e%b0too-many-open-files%e7%9a%84%e9%94%99%e8%af%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
