<?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>Aleksey Parshukov &#187; unix soket</title>
	<atom:link href="http://www.filosof.name/tags/unix-soket/feed" rel="self" type="application/rss+xml" />
	<link>http://www.filosof.name</link>
	<description>Aleksey Parshukov persoonal blog</description>
	<lastBuildDate>Sat, 29 Jan 2011 20:59:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Проблема множества одновременных соединений (С10K Problem)</title>
		<link>http://www.filosof.name/articles/c10k-unix-socket.xhtml</link>
		<comments>http://www.filosof.name/articles/c10k-unix-socket.xhtml#comments</comments>
		<pubDate>Tue, 08 Sep 2009 06:58:51 +0000</pubDate>
		<dc:creator>Aleksey Parshukov</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[c10k]]></category>
		<category><![CDATA[limits.conf]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[unix soket]]></category>

		<guid isPermaLink="false">http://www.filosof.name/?p=92</guid>
		<description><![CDATA[Linux 2.6 Как известно, по умолчанию tcp/ip в Linux 2.6 настроен на довольно высокую пропускную нагрузку. Если предельное количество соединений для службы устанавливаться в раёне одной тысячи, а ресурсов системы более чем предостаточно поискать причину можно вот в какой месте: Рассмотрим конкретный пример. Служба состоит из двух частей front-end и back-end Front часть устанавливает соединение [...]]]></description>
			<content:encoded><![CDATA[<h2>Linux 2.6</h2>
<p>Как известно, по умолчанию tcp/ip в Linux 2.6 настроен на довольно высокую пропускную нагрузку.<br />
Если предельное количество соединений для службы устанавливаться в раёне одной тысячи, а ресурсов системы более чем предостаточно поискать причину можно вот в какой месте:</p>
<h2>Рассмотрим  конкретный пример.</h2>
<p>Служба состоит из двух частей <strong>front-end</strong> и <strong>back-end</strong><br />
<strong>Front </strong>часть устанавливает соединение в любом случае, но после приблизительно 1000 активных подключений соединения эти не доходят до <strong>back </strong>части.<br />
Дело всё в том, что по tcp обещаться только <strong>front-end</strong>, а связка <strong>front-back</strong> работала на UNIX сокетах. Причём каждое подключение порождает открытие дополнительного UNIX сокета.<br />
Кто знаком с UNIX сокетами знает, что каждый такой сокет требует создание отдельного дискриптора файла. А в linux есть явное ограничение открытых файлов для процесса. По умолчанию это 1024.</p>
<p>Проверить можно так:</p>
<div class="code">
<p># количество открытых Unix сокетов для демона back<br />
$  netstat -ux -p|grep back|wc -l</p>
<p># количество открытых Unix сокетов в системе<br />
$  netstat -ux -p|wc -l</p>
<p># количество открытых tpc сокетов для демона front<br />
$  netstat -tnp|grep front|wc -l</p>
<p># количество открытых tpc сокетов в системе<br />
$  netstat -tnp|wc -l</p></div>
<p>Везде нужны права root<br />
Снять ограничение можно здесь:</p>
<h2>/etc/security/limits.conf</h2>
<pre><code>demonusername            soft    nofile   2048
demonusername            hard    nofile   2048</code></pre>
<ul>
<li><strong>demonusername </strong>- имя пользователя с правами которого запускаться демон, использующий Unix сокеты. Можно устанавливать огриначение для группы (<strong>@demonusername</strong>) или для всех (<strong>*</strong>)</li>
<li>Параметры <strong>soft </strong>и <strong>hard </strong>используються для установки мягкого и жесткого лимита соответственно. <strong>soft </strong>может быть изменен в самой программе. <strong>hard</strong> может быть изменен только суперпользователем.<br />
<span style="color: #ff0000;">ВНИМАНИЕ!</span> Необходима установка и <strong>soft </strong>и <strong>hard </strong>ограничения.</li>
<li><strong>2048</strong> &#8211; собственно ограничение.<br />
<blockquote><p>Не изменяйте лимит для всей системы и не выставляйте слишком большого числа. Все эти лимиты введены не просто так. В случае взлома, атаки или просто сбоя это может привести к негативным результатам &#8211; например потере контроля за машиной.</p></blockquote>
</li>
</ul>
<p>Далее необходим ребут, чтобы преинициализировать ядро.</p>
<p>Ссылки на полезные статьи:<br />
<a href="http://www.kegel.com/c10k.html">http://www.kegel.com/c10k.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.filosof.name/articles/c10k-unix-socket.xhtml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

