<?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>Reborn &#187; php</title>
	<atom:link href="http://www.getoto.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.getoto.net</link>
	<description>And from the ashes the Phoenix rose reborn</description>
	<lastBuildDate>Wed, 04 Jan 2012 22:47:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>To cache or not to cache &#8230; that&#8217;s a stupid question</title>
		<link>http://www.getoto.net/2011/02/09/to-cache-or-not-to-cache-thats-a-stupid-question/</link>
		<comments>http://www.getoto.net/2011/02/09/to-cache-or-not-to-cache-thats-a-stupid-question/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 17:08:49 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[eaccelerator]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xcache]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=233</guid>
		<description><![CDATA[След едно случайно заиграване покрай http://neo2shyalien.eu/2011/01/28/eaccelerator.html и великият facepalm момент си поставих задачката аджеба да видим колко производителност се печели от използването на Opcode Caching при PHP. Речено сторено. По долу ще откриете до какви резултати се стигна. Задачката Измисляме си задачка да проверим каква е разликата в производителност между чисто PHP и PHP с [...]]]></description>
			<content:encoded><![CDATA[<p>След едно случайно заиграване покрай <a href="http://neo2shyalien.eu/2011/01/28/eaccelerator.html">http://neo2shyalien.eu/2011/01/28/eaccelerator.html</a> и великият facepalm момент си поставих задачката аджеба да видим колко производителност се печели от използването на <a href="https://secure.wikimedia.org/wikipedia/en/wiki/List_of_PHP_accelerators">Opcode Caching</a> при PHP.</p>
<p>Речено сторено.</p>
<p>По долу ще откриете до какви резултати се стигна.<br />
<span id="more-233"></span><br />
<strong>Задачката</strong><br />
Измисляме си задачка да проверим каква е разликата в производителност между чисто PHP и PHP с добавено разширение за кеширане.</p>
<p><strong>Защо</strong><br />
Факт е че PHP е интерпретаторен език и за да се изпълни каквото и било трябва да се заредят необходимите файлове, да се разпарсят променливите, да се заместят всички референции и други подобни, след това да се сведе то така наречения опкод и този опкод да се рендерира и изпрати към клиента.<br />
Разширенията за кеширане на опкод изпълняват задачката да кешират полученият вече опкод преди изпращането му към клиента. И ако в някакъв разумен интервал има заявка за същото нещо, то да се извади директно от кеша и да се прескочи целият процес на четене, парсене и генерация.<br />
Всичко това е много хубаво и общото правило е че е наистина полезно ама колко точно полезно. Из нета се намират стотици ако не и милиони статии за производителността на този или онзи кеш когато се използва това или онова приложение, но някак си все още не съм се натъкнал на изчерпателно изследване.<br />
Е може би вече ще се натъквам. (моето моето)</p>
<p><strong>Постановката</strong><br />
Имаме виртуална машина със следните характеристики:</p>
<ul>
<li>ЦПУ: 2 х Intel(R) Core(TM)2 Duo CPU     P8400  @ 2.26GHz &#8211; вярно виртуализирани но все пак два</li>
<li>Диск: 8Г &#8211; предостатъчен е</li>
<li>Рам: 512М &#8211; няма да товарим с кой знае какво</li>
<li>ОС: Debian 6.0 (Squeze)</li>
<li>директорията <strong>/var/lib/php5</strong> е монтирана в рам &#8211; по време на предварителните тестове се оказа че за половин час бях успял да натъпча 4Г файлове за сесии в нея и стана грозно</li>
</ul>
<p>Върху тази машина ще изпробваме комбинациите между уеб сървър (<a href="http://httpd.apache.org/">аpache2</a>, <a href="http://www.lighttpd.net/">Lighttpd</a>, <a href="http://nginx.org">nginx</a>), <a href="http://php.net">php</a> (mod_php, mod_fcgid, fastcgi), модули за кеширане (<a href="http://php.net/manual/en/book.apc.php">apc</a>, <a href="http://xcache.lighttpd.net/">xcache</a>, <a href="http://eaccelerator.net/">eAccelerator</a>) и различни опции на тези модули.</p>
<p>Версиите които използваме са тези достъпни в стандартното хранилище на дебиан, а ако няма последните достъпни от официалният сайт (единствено eAccelerator няма пакет в дебиан). А именно:</p>
<ul>
<li>apache2 &#8211; 2.2.16-6</li>
<li>lighttpd &#8211; 1.4.28-2</li>
<li>nginx &#8211; 0.7.67-3</li>
<li>php &#8211; 5.3.3-7</li>
<li>apc &#8211; 3.1.3p1-2</li>
<li>xcache &#8211; 1.3.0-7</li>
<li>eAccelerator &#8211; 0.9.6</li>
</ul>
<p><strong>Методология</strong><br />
За всяка една комбинация между уеб сървър, метод за стартиране на php, модул за кеширане и настройка извършваме по 10 теста като резултатите от тях в последствие се усредняват. Между всеки тест, без значение дали променяме комбинацията или не рестартираме виртуалната машина за да имаме чиста среда. За автоматизиране на процеса използваме нещо подобно на testing framework. Грозно е но върши работа.</p>
<p>Комбинациите на които сме се спряли са:<br />
За Уеб Сървър и метод на изпълнение на PHP</p>
<ul>
<li>apache2 + mod_php</li>
<li>apache2 + mod_fcgid</li>
<li>lighttpd + fastcgi</li>
<li>nginx + fastcgi</li>
</ul>
<p>За настройки на apc:</p>
<ul>
<li>apc &#8211; стандартна конфигурация както пристига</li>
<li>apc-nostat &#8211; изключена е проверката за промяна на файла. Това е рискова настройка и не се препоръчва.</li>
</ul>
<p>За eAccelerator:</p>
<ul>
<li>eaccelerator &#8211; стандартна конфигурация</li>
<li>eaccelerator-nomtime &#8211; изключена проверка за промяна на файла</li>
<li>eaccelerator-noopt &#8211; изключен оптимизатор</li>
<li>eaccelerator-noopt-nomtime &#8211; изключен оптимизатор и проверка за промяна на файла</li>
<li>eaccelerator-zend &#8211; модулът е зареден като Zend разширение. Не съм сигурен че има смисъл но за пълнота</li>
<li>eaccelerator-zend-nomtime</li>
<li>eaccelerator-zend-noopt</li>
<li>eaccelerator-zend-noopt-nomtime</li>
</ul>
<p>За xcache</p>
<ul>
<li>xcahe &#8211; стандартна конфигурация</li>
<li>xcahe-nostat &#8211; изключена проверка за промяна на файловете</li>
<li>xcahe-nostat-optimizer &#8211; изключена проверка за промяна на файловете и включен оптимизатор</li>
<li>xcahe-optimizer &#8211; включен оптимизатор</li>
<li>xcahe-varcache &#8211; включено кеширане на променливите</li>
<li>xcahe-varcache-nostat</li>
<li>xcahe-varcache-nostat-optimizer</li>
<li>xcahe-varcache-optimizer</li>
</ul>
<p>В крайна сметка получаваме 19 комбинации на модули за кеширане и опции с които те вървят и 4 уеб сървъра или иначе казано 760 измервания. И тук може би ви става ясно защо използвахме виртуална машина.</p>
<p>Приложението срещу което тестваме е phpfreechat-1.3 и по конкретно едно от демотата което се разпространява с него (demo9_with_a_utf8_encoded_nickname.php)</p>
<p>За генератор на натоварването (заявките) използваме apache-bench с настройки:</p>
<ul>
<li>заявки: 10000</li>
<li>конкурентни заявки: 10</li>
</ul>
<p>10 заявки не са точно реално натоварване но все пак е по добре от една.</p>
<p><strong>Резултатите</strong><br />
Както можеше и да се очаква всякакво кеширане помага да се намали времето за изпълнение. Средното наблюдавано подобрение беше около 400% (понякога и повече)</p>
<p>Най-добри резултати се получават при <strong>Apache2 + mod_php + apc-nostat</strong> веднага по петите му е <strong>nginx + fastcgi + apc-nostat</strong> и за съжаление най-накрая се нарежда <strong>lighttpd + fastcgi + eaccelerator-zend</strong>.</p>
<p>И понеже никой няма да ми повярва ето и резултатите:</p>
<ul>
<li><a href='http://www.getoto.net/wp-content/uploads/2011/02/result-table.ods'>Резултати (ods)</a></li>
<li><a href='http://www.getoto.net/wp-content/uploads/2011/02/result-table.xls'>Резултати (xls)</a></li>
<li><a href='http://www.getoto.net/wp-content/uploads/2011/02/opcode-caching-test-ab-results.tar.gz'>Сурови резултати от apache-bench</a></li>
<li><a href='http://www.getoto.net/wp-content/uploads/2011/02/framework.tar.gz'>Фреймуърк за тестовете</a></li>
</ul>
<p>В таблиците резултатите са в милисекунди за изпълняване на заявка. Зелените полета са минималните стойности (най бързият вариант).<br />
Ако някой се интересува силно мога да му дам и плот данните от apache-bench</p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2011/02/09/to-cache-or-not-to-cache-thats-a-stupid-question/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>The Perfect SOHO router &#8211; Part 5</title>
		<link>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/</link>
		<comments>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 17:59:19 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Статии]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[Head]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mrtg]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[simple]]></category>
		<category><![CDATA[soho]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web swap]]></category>

		<guid isPermaLink="false">http://www.getoto.net/?p=41</guid>
		<description><![CDATA[Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.

Тук демонстрираме една много проста и елементарна система която дава полезна информация с един поглед.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Това е петата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.</p>
<p>Серията се състои от следните статии:</p>
<ul>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-1/">Общи насоки, идеи, нужни услуги и размисли</a> &#8211; тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-2/">Инсталация на базовата система </a>- ще опиша методът по който ще инсталираме и минимизираме нашата система</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-3/">Конфигуриране на DNS и DHCP услугите</a> &#8211; тук ще опиша обосновано конфигурациите които смятам за оптимални</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-4/">Конфигуриране на рутирането</a> &#8211; като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи</li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/">Конфигуриране на елементарна система за наблюдение и статистика</a></li>
<li><a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">Разширяване възможностите на нашият рутер</a> &#8211; ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен</li>
</ul>
</blockquote>
<p>В тази част ще изградим една много проста система за наблюдение и диагностика на нашият рутер.<br />
<strong>Защо</strong><br />
За да знаем какво се случва с нашият рутер. Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.</p>
<p><strong>Какво ще има</strong><br />
Личното ми предложение за елементарна система е както следва:</p>
<ul>
<li>Web базирана &#8211; за лесен достъп от всякъде</li>
<li>Проверка на състоянието на интернет свързаността &#8211; за да може с един поглед да се каже дали имаме връзка и дали проблема е някъде при нашият доставчик</li>
<li>Проверка на състоянието на мрежовите карти &#8211; дали са включени, да не би кабелчето да е избягало и т.н.</li>
<li>Проверка на използването на паметта &#8211; да не би случайно да сме влезнали в swap зоната и харда да траши</li>
<li>Проверка броя активни сесии &#8211; за да видим до къде е стигнало използването</li>
<li>Трафик статистика с помощта на mrtg</li>
<li>Пълна системна информация от phpsysinfo</li>
</ul>
<p><strong>Скрипт за проверка на състоянието на интернет свързаността</strong><br />
Това е един много прост скрипт който ще се опита да направи няколко пинг-а до определен адрес който сме сигурни че е винаги на линия. Използваме ип адрес а не име за да избегнем проблема с пропаднал DNS.<br />
За да работи коректно този скрипт е необходимо да имаме <strong>ping, tail, cut, php</strong></p>
<pre class="brush: php; title: ; notranslate">&lt;?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Connection check&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;body&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Checking Conection with
&lt;?php
$target=&quot;194.145.63.12&quot;;
if (isset($_REQUEST['t'])){
        $target=$_REQUEST['t'];
}
echo &quot;&lt;font color=#000000&gt;&quot; . $target . &quot;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&quot;;
$OK=&quot;&lt;div class=ok&gt;CONNECTION IS UP&lt;/div&gt;&quot;;
$NO=&quot;&lt;div class=no&gt;CONNECTION DOWN&lt;/div&gt;&quot;;

$status=exec(&quot;ping -q -c3 $target | tail -n 1 | cut -d' ' -f1&quot;);

if ($status == &quot;rtt&quot;) { echo $OK; } else { echo $NO; }
?&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div class=sub&gt;&lt;a href=&quot;?t=www.abv.bg&quot;&gt;Check with abv.bg&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;?t=www.google.com&quot;&gt;Check with Google&lt;/a&gt;&lt;/div&gt;

&lt;?php include &quot;footer.php&quot;; ?&gt;&lt;/center&gt;</pre>
<p>Самият скрипт изобщо не е красив а да не говорим и че не е много сигурен но върши работа. Ето примерен изглед на успешна и неуспешна проверка.<br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-ok.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-ok.png" alt="pingcheck-ok" title="pingcheck-ok" width="520" height="215" class="aligncenter size-full wp-image-42" /></a><br />
<a href="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-no.png"><img src="http://www.getoto.net/wp-content/uploads/2009/12/pingcheck-no.png" alt="pingcheck-no" title="pingcheck-no" width="499" height="221" class="aligncenter size-full wp-image-43" /></a><br />
както забелязвате ако подадем хост който не съществува за проверка ще ни върне отговор че нямаме интернет, което може да не е вярно. Поради тази причина освен проверка с ip са сложени два популярни сайта които се очаква че са винаги на линия.</p>
<p><strong>Скрипт за проверка на състоянието на мрежовите карти</strong><br />
Идеята на този скрипт е да установи дали имаме физическа свързаност. Не винаги е полезен но върши работа.<br />
За да работи скрипта имаме нужда от <strong>sudo, mii-tool</strong>.</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
// simple checking of network cards
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;NIC check&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;body&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Checking Network Cards&lt;/h2&gt;&lt;br /&gt;
&lt;?php
$status=exec(&quot;sudo /sbin/mii-tool eth0 | md5sum | cut -d' ' -f1&quot;);
if ($status === '011d899f145c89793888771019335049'){
        echo &quot;&lt;div class=ok&gt;External network is UP&quot;;
} else {
        echo &quot;&lt;div class=no&gt;External network is DOWN&lt;br /&gt;Please check Cable (eth0)&lt;/div&gt;&quot;;
}
$status=exec(&quot;sudo /sbin/mii-tool eth1 | md5sum | cut -d' ' -f1&quot;);
if ($status === 'e413ff927a35f4df4c8bdecd70111902'){
        echo &quot;&lt;div class=ok&gt;Internal network is UP&lt;/div&gt;&quot;;
} else {
        echo &quot;&lt;div class=no&gt;Internal network is DOWN&lt;br /&gt;Please check Cable (eth1)&lt;/div&gt;&quot;;
}
?&gt;
&lt;/center&gt;

&lt;?php include &quot;footer.php&quot;; ?&gt;</pre>
<p>Проверката на картите не е универсална поради използваните md5 суми, но това може да се коригира особенно лесно. Напълно достатъчно е да се търси в изхода на командата <strong>mii-tool</strong> стринга <strong>link ok</strong>. За да работи този скрипт е необходимо потребителят от чието име вървъ нашият web сървър да има достъп до mii-tool. Това става посредством следният ред в <strong>/etc/sudoers</strong></p>
<pre class="brush: bash; title: ; notranslate">www-data ALL=(ALL) NOPASSWD: /sbin/mii-tool</pre>
<p><strong>Проверка на използването на паметта</strong><br />
Този скрипт е полезен за проверка на използваната памет. При рутери е особенно важно системата да не използва swap тъй като това краде процесорни цикли и като цяло затормозва машината. За да работи скрипта ни е необходима командата <strong>free</strong></p>
<pre class="brush: php; title: ; notranslate">&lt; ?php
// simple checking of memory utilisation
// vvitkov
// 02.11.2006
?&gt;
&lt; html &gt;
&lt;head&gt;
&lt;title&gt;Memory Usage&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt; ?php include &quot;header.php&quot;; ?&gt;
&lt; body &gt;&lt;center&gt;&lt;br /&gt;&lt;h2&gt;Memory Usage&lt;/h2&gt;&lt;br /&gt;&lt;/center&gt;
&lt; ?php
$stat=explode(&quot; &quot;, shell_exec(&quot;free -m| head -2|tail -1|awk '{print $2\&quot; \&quot;$3\&quot; \&quot;$4}'&quot;));
$stat2=explode(&quot; &quot;, shell_exec(&quot;free -m| head -4|tail -1|awk '{print $2\&quot; \&quot;$3\&quot; \&quot;$4}'&quot;));
$tresh=30;
?&gt;
&lt;table border=0 align=center&gt;
        &lt;tr&gt;
                &lt;th&gt;Mem type&lt;/th&gt;
                &lt;th&gt;Used&lt;/th&gt;
                &lt;th&gt;free&lt;/th&gt;
                &lt;th&gt;Total&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;RAM&lt;/th&gt;
                &lt;td&gt;&lt; ?php echo $stat[1]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat[2]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat[0]; ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;SWAP&lt;/th&gt;
                &lt;td&gt;&lt; ?php
                        if ($stat2[1] &gt; $tresh) {
                                echo &quot;&lt;font color=red weight=bold&gt;$stat2[1]&lt;/font&gt;&quot; ;
                        } else {
                                echo $stat2[1];
                        }
                ?&gt;
                &lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat2[2]; ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo $stat2[0]; ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;TOTAL&lt;/th&gt;
                &lt;td&gt;&lt; ?php echo ($stat[1]+$stat2[1]); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo ($stat[2]+$stat2[2]); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt; ?php echo ($stat[0]+$stat2[0]); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
                &lt;th&gt;&lt; ?php
                        if ($stat2[1] &gt; $tresh) {
                                echo &quot;&lt;font color=red weight=bold&gt;^^^&lt;/font&gt;&quot; ;
                        } else {
                                echo &quot;&amp;nbsp&quot;;
                        }
                ?&gt;
                &lt;/th&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
                &lt;td&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;sub&quot;&gt;If there is a red number ... that is a problem&lt;/div&gt;
&lt; ?php include &quot;footer.php&quot;; ?&gt;</pre>
<p>Единствената променлива която трябва да се коригира е <strong>$tresh</strong>. Тя се използва за да извади предупреждение че използването на swap е нарастнало над някакво ниво. Възможно е да бъде нагласена на примерно 20% но смятам че е по удачно да бъде въведена на ръка.</p>
<p><strong>Проверка броя активни сесии</strong><br />
Ако има проблеми с отваряне на страници, това може да е индикация на изхабени сесии. Тъй като знаем че някои доставчици лимитират броя сесии, този инструмент може да бъде полезен. Трябва да се отбележи че числата които са отчетени не са строго меродавни, тъй като не се отчита състоянието на сесията а просто наличието и. Тоест ако сесията е в състояние <strong>CLOSE_WAIT</strong> въпреки че може да бъде оползотворена тя се включва в бройката.<br />
За да работи коректно скрипта са ни необходими <strong>sudo, netstat-nat</strong></p>
<pre class="brush: php; title: ; notranslate">&lt;?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Connection statistics&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;link REL=StyleSheet HREF=&quot;style.css&quot; TYPE=&quot;text/css&quot; MEDIA=screen&gt;
&lt;/link&gt;&lt;/head&gt;
&lt;?php include &quot;header.php&quot;; ?&gt;
&lt;body &gt;&lt;center&gt;&lt;br /&gt;&lt;h2&gt;Connection statistics&lt;/h2&gt;&lt;br /&gt;&lt;/center&gt;
&lt;table border=0 align=center&gt;
        &lt;tr&gt;
                &lt;th&gt;Proto&lt;/th&gt;
                &lt;th&gt;Clients&lt;/th&gt;
                &lt;th&gt;Ruter&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;TCP&lt;/th&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -S -p tcp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -L -p tcp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
                &lt;th&gt;UDP&lt;/th&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -S -p udp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
                &lt;td&gt;&lt;?php echo exec(&quot;sudo netstat-nat -n -L -p udp | grep ESTABLISHED | wc -l&quot;); ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;div class=sub&gt;Only active connections are visible&lt;/div&gt;
&lt;?php include &quot;footer.php&quot;; ?&gt;</pre>
<p><strong>Заключение</strong><br />
В тази статия не е показана настройка на mrtg и phpsysinfo, тъй като те са относително елементарни. С това приключва нашата елементарна система за наблюдение и статистика. Самата система е наистина доста проста но върши работа.<br />
Прилагам цялата система в архивиран вид. За да работи е необходимо да си настроите mrtg посредством <strong>cfgmaker и indexmaker</strong> от инсталацията на mrtg и phpsysinfo посредством пакетната система на дебиан.</p>
<p><a href='http://www.getoto.net/wp-content/uploads/2009/12/monitoring.tar.gz'>monitoring system</a></p>
<p>Трябва да се отбележи че системата има възможност да показва съобщения настроени от администратора в основният си изглед. Това се постига благодарение на файла header.php</p>
<p>Серията продължава в <a href="http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-6/">The Perfect SOHO router &#8211; Part 6</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.getoto.net/2009/12/06/the-perfect-soho-router-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

