<?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>Athlan • Piotr Pelczar • blog programisty &#187; Server</title>
	<atom:link href="http://athlan.pl/kategoria/server/feed/" rel="self" type="application/rss+xml" />
	<link>http://athlan.pl</link>
	<description>Napisać kod zrozumiały dla komputera potrafi byle głupek. Dobrzy programiści tworzą kod zrozumiały dla człowieka...</description>
	<lastBuildDate>Sat, 17 Jul 2010 18:54:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Automatyczny restart Apache</title>
		<link>http://athlan.pl/automatyczny-restart-apache/</link>
		<comments>http://athlan.pl/automatyczny-restart-apache/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 13:19:44 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Planeta]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[restart]]></category>
		<category><![CDATA[timeout]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://athlan.pl/?p=224</guid>
		<description><![CDATA[Wiele razy zdarzało mi się, że mój serwer padł całkowicie lub przerywał żądania. Wówczas był niedostępny, a zarobki generowane z serwisów diametralnie spadały. Co więcej&#8230; użytkownicy poczuli niestabilność maszyny. Dziś po odpowiedniej optymalizacji kodów aplikacji pady są rzadkością, ale wolę się ubezpieczyć przed niespodziewanym downem serwera. Problem można rozwiązać w prosty sposób: cyklicznie uruchamiany program [...]]]></description>
			<content:encoded><![CDATA[<p>Wiele razy zdarzało mi się, że mój serwer padł całkowicie lub przerywał żądania. Wówczas był niedostępny, a zarobki generowane z serwisów diametralnie spadały. Co więcej&#8230; użytkownicy poczuli niestabilność maszyny. Dziś po odpowiedniej optymalizacji kodów aplikacji pady są rzadkością, ale wolę się ubezpieczyć przed niespodziewanym downem serwera.</p>
<p>Problem można rozwiązać w prosty sposób: cyklicznie uruchamiany program <a href="http://pl.wikipedia.org/wiki/Bash">bash</a>&#8216;a przez <a href="http://pl.wikipedia.org/wiki/Cron_(Unix)">cron</a>a będzie odpowiadał za poprawne działanie usługi apache. Listing, który zaprezentuję łączy się z adresem url odwołującym się do naszego serwera za pomocą <a href="http://www.gnu.org/software/wget/wget.html"><code>wget</code></a>, a następnie wynik działania (response body) zapisze do pliku tymczasowego. Jeżeli plik istnieje oraz ma rozmiar niezerowy, oznacza to, że serwer działa poprawnie. Jeżeli plik nie istnieje, bądź jego wielkość jest równa zero z, oznacza to, że trzeba zrestartować usługę apache, bo nie odpowiada. Zaraz przed zakończeniem programu, plik tymczasowy powinien zostać usunięty. Pozwoliłem sobie opublikować mały <a href="http://athlan.pl/code/CheckApache">program służący do automatycznego restartu usługi apache</a>.</p>
<p>Aby nasz program poprawnie działał, trzeba zastanowić się nad trzema istotnymi rzeczami:</p>
<ol>
<li>Ile prób połączenia ma wykonać <code>wget</code> oraz jakie mogę być timeouty.</li>
<li>Czy adres url, do którego się odwołujemy będzie zawsze dostępny w przypadku poprawnego działania usługi apache.</li>
<li>Jaki powinien być interwał uruchamiania napisanego programu.</li>
</ol>
<p>Na moim serwerze program uruchamia się co minutę, próbuje połączyć się ze stroną dwa razy, a maksymalny czas oczekiwania na odpowiedź przy każdej z prób wynosi 10 sekund.</p>
<p>Program zapisany jest pod <code>/root/check_apache.sh</code>, a regułka uruchamiania w cronie wygląda następująco:</p>
<pre>* * * * *       bash /root/check_apache.sh</pre>
<p><span style="color: #999999;">Przedstawiony problem można rozwiązać na wiele sposobów, przedstawiłem ten najbardziej oczywisty.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/automatyczny-restart-apache/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Upload filmów z Zend_Gdata_YouTube</title>
		<link>http://athlan.pl/upload-filmow-zend_gdata_youtube/</link>
		<comments>http://athlan.pl/upload-filmow-zend_gdata_youtube/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 14:00:56 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Planeta]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Przemyślenia]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Zend framework]]></category>
		<category><![CDATA[gdata]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[youtube]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://athlan.pl/?p=148</guid>
		<description><![CDATA[Pisząc nowy projekt natknąłem na problem z procesem uploadu filmiku do serwisu YouTube. Sam upload jest bardzo łatwy do napisania z Zend_Gdata_YouTube &#8211; przykład można znaleźć w manualu. Myślę, że zainteresowani przeczytają manual i wszystko będzie jasne. Więc jeżeli to takie proste, to w czym problem? Zakładamy, że userzy uloadują filmiki bezpośrednio na nasz serwis. [...]]]></description>
			<content:encoded><![CDATA[<p>Pisząc <a href="http://athlan.pl/videoblog/">nowy projekt</a> natknąłem na problem z procesem uploadu filmiku do serwisu YouTube. Sam upload jest bardzo łatwy do napisania z <a href="http://framework.zend.com/apidoc/core/Zend_Gdata/App/Zend_Gdata_YouTube.html">Zend_Gdata_YouTube</a> &#8211; <a href="http://framework.zend.com/manual/en/zend.gdata.youtube.html#zend.gdata.youtube.uploads.example">przykład</a> można znaleźć w manualu. Myślę, że zainteresowani przeczytają manual i wszystko będzie jasne. Więc jeżeli to takie proste, to w czym problem?</p>
<p>Zakładamy, że userzy uloadują filmiki bezpośrednio na nasz serwis. Nasz serwer ma za zadanie:</p>
<ol>
<li>Skompresować video i zapisać go w formacie flv.</li>
<li>Nałożyć watermark.</li>
<li>Wysłać obrobiony film do serwisu Youtube logując się na zdefiniowane przez użytkownika konto lub założone przez administratora strony.</li>
</ol>
<p>Pierwsze 2 kroki wykonają się błyskawicznie w porównaniu do trzeciego. Kompresja i nałożenie watermarku na 30 megowy plik z wykorzystaniem FFMPEG to nic nadzwyczajnego. Natomiast wysyłka pliku na serwery Youtube&#8217;a może zawiesić apache&#8217;a, gdy jest ich kilka.</p>
<p>Rozwiązanie? Wpadłem na pomysł, aby upload filmików ustawiony był w pewnego rodzaju kolejce, która uruchamiana by była co minutę (cron), a czas jednego wysłania elemntu nie mógłby przekroczyć 50 sekund. Oczywiście takie działanie uruchamiałoby swój osobny proces apache&#8217;a. Ten sposób jest ograniczony dwoma limitami: wielkością pliku oraz czasem jego uploadu na serwer (jednocześniem interwałem uruchamiania kolejki).</p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/upload-filmow-zend_gdata_youtube/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Niezamierzane upadki serwera</title>
		<link>http://athlan.pl/niezamierzane-upadki-serwera/</link>
		<comments>http://athlan.pl/niezamierzane-upadki-serwera/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 13:43:42 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://athlan.pl/?p=125</guid>
		<description><![CDATA[Po przenosinach lookme.pl na nowy serwer, serwis zaczynał coraz częściej się zawieszać. Godziny spędzone przy sprawdzaniu, czy silnik i baza danych została dobrze zoptymalizowana. Wszystko wyglądało w jak najlepszym porządku. W międzyczasie ostro spadaliśmy z bardzo wysokich pozycji w Google. Administrator serwera wyrywał sobie włosy. Wzrost zużycia procesora w przeciągu 10 min skakał od 0.8% [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="border: 1px solid black; margin: 0px 10px; float: left;" src="http://img137.imageshack.us/img137/72/68017710123de4638cmhr7.jpg" alt="" width="240" height="231" />Po przenosinach <a title="Fotka" href="http://www.lookme.pl">lookme.pl</a> na nowy serwer, serwis zaczynał coraz częściej się zawieszać. Godziny spędzone przy sprawdzaniu, czy silnik i baza danych została dobrze zoptymalizowana. Wszystko wyglądało w jak najlepszym porządku. W międzyczasie ostro spadaliśmy z bardzo wysokich pozycji w Google. Administrator serwera wyrywał sobie włosy. Wzrost zużycia procesora w przeciągu 10 min skakał od 0.8% &#8211; 64%. Uptime apache&#8217;a wahał się od 3 &#8211; 20 minut.</p>
<p>Na serwerze nazwa.pl tego nie było. Gdy już całkiem rozłożyłem ręce zorientowałem się, że wykonywanie zapytań do bazy danych trwa po 0.0008 sekundy, a mimo tego strona ładuje się po 12 sekund (o ile w ogóle się załaduje). Wyłączyłem cache serwisu.</p>
<p>Gdy odkryłem co zawiesza proces apache&#8217;a złapałem się za głowę&#8230; Podliczanie plików sesji w celu uzyskania użytkowników on-line. Aby sprecyzować tą liczbę, korzystałem z daty modyfikacji każdego pliku, aby określić, czy był ruszany przez ostatnie 10 min. Jeżeli tak, to zapewne user jest on-line. To nie było zwykłe podliczanie&#8230; usunąłem warunek limitu 600 sekund. Licznik wskazał&#8230; 472621 plików sesji, które za każdym razem były sekwencyjnie sprawdzane O.o&#8221; (co powodowało totalny dead apache&#8217;a).</p>
<p>Przyczyna zatrzymania procesu czyszczenia sesji przez defaultowy handler php jest mi do dziś nieznana. Wszystkie wartości odpowiadające za tę czynność były odpowiednio ustawione.</p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/niezamierzane-upadki-serwera/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Po migracji na serwer dedykowany</title>
		<link>http://athlan.pl/po-migracji-na-serwer-dedykowany/</link>
		<comments>http://athlan.pl/po-migracji-na-serwer-dedykowany/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 11:25:37 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://athlan.pl/?p=120</guid>
		<description><![CDATA[I stałem się szczęśliwym posiadaczem serwera dedykowanego. Podczas przenoszenia dość dużego serwisu fotkowego LookMe.pl oczywiście wystąpiły komplikacje. Ale to już nie po naszej stronie &#8211; bo do przerzutu takiego kolosa opracowaliśmy bardzo dokładną strategię. Po stronie OVH.pl: Konsultanci z OVH niemile nas zaskoczyli, że dodanie domeny LookMe.pl do secondary DNS nie jest możliwe bo&#8230; wpis [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="border: 1px solid black; margin: 10px; float: right;" src="http://img103.imageshack.us/img103/7000/midnightcommanderbb9.png" alt="" width="320" height="192" />I stałem się szczęśliwym posiadaczem serwera dedykowanego. Podczas przenoszenia dość dużego serwisu fotkowego LookMe.pl oczywiście wystąpiły komplikacje. Ale to już nie po naszej stronie &#8211; bo do przerzutu takiego kolosa opracowaliśmy bardzo dokładną strategię.</p>
<p><strong>Po stronie OVH.pl:</strong></p>
<p>Konsultanci z OVH niemile nas zaskoczyli, że dodanie domeny LookMe.pl do secondary DNS nie jest możliwe bo&#8230; wpis A na jej temat istnieje juz na <span style="text-decoration: underline;">nieaktywnym</span> od kilkudziesięciu dni serwerze 720plan. Gdy Panowie tłumaczyli się, że procedura zamknięcia serwera trwa do 15 dni od momentu dostarczenia wniosku, wyperswadowałem im, że potrzebuję dostęp do domeny na teraz. Na szczęście poszli mi na rękę i mimo długiej kolejki zamykania serwerów, moja procedura trwała pół godziny.</p>
<p><strong>Po stronie nazwa.pl:</strong></p>
<p>Administracja chyba sobie jaja robi, że nie można spokojnie ściągnąć bazy danych poprzez phpmyadmin, ponieważ nakładają różnego rodzaju limity na php i cgi. Po interwencji na maila, umieścili kopię na moim serwerze w postaci spakowanego pliku.</p>
<p>Przy imporcie fotek na serwer, konsolowy klient <em>ncftp</em> ciągle zrywał połączenia, bo zostawał odrzucany przez nazwę. Co za różnica, czy wpiszę tak:</p>
<p><code>ncftp get -r fotki</code></p>
<p>czy w dwóch paczkach tak:</p>
<p><code>ncftp get 0* 1* 2* 3* 4* 5* 6* 7*<br />
ncftp get 8* 9* a* b* c* d* e* f*</code></p>
<p>No jednak, dla nazwa.pl różnica jest, bo ncftp najpierw skanuje to, co ma pobrać, zanim zabierze się do kopiowania plików. Nazwa widząc, że lista jest długa, od razu lub po jakimś czasie odrzucała połączenie. W 2 paczkach jest o 50% mniej plików, pewnie to wystarczyło na obejście jakiegoś kolejnego durnego limitu.</p>
<p><strong>Podsumowanie:</strong></p>
<p>Cóż, obie firmy <span style="text-decoration: line-through;">nie</span> są wporządku, ale dlaczego dopiero po napisaniu maila?</p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/po-migracji-na-serwer-dedykowany/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>After server relocation</title>
		<link>http://athlan.pl/after-server-relocation/</link>
		<comments>http://athlan.pl/after-server-relocation/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 14:53:16 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Recenzje]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://athlan.vgroup.pl/after-server-relocation/</guid>
		<description><![CDATA[Od kilku dni moje serwisy stoją już na nowym serwerze Active w nazwa.pl. Jak zarazie pozytywne wrażenia, co więcej &#8211; zdziwiło mnie że kilka naprawdę dużych serwisów jest w stanie działać na zwykłym (niededykowanym) serwerze. Plusy serwera Active: Stabilność. Powiadomienia o planowanych pracach konserwacyjnych. Krótkie prace konserwatywne. Błyskawiczna odpowiedź od administratora drogą elektroniczną. Analiza obciążenia [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><a href="http://nazwa.pl"><img src="http://img100.imageshack.us/img100/1415/hlogonazwaplyg0.gif" border="1" height="32" width="155" /></a></p>
<p>Od kilku dni moje serwisy stoją już na nowym serwerze <strong><a href="http://nazwa.pl/serwery-serwery-active.html"><font color="#ff6600">Active</font></a></strong> w <a href="http://nazwa.pl"><strong>nazwa</strong>.pl</a>. Jak zarazie pozytywne wrażenia, co więcej &#8211; zdziwiło mnie że kilka naprawdę dużych serwisów jest w stanie działać na zwykłym (niededykowanym) serwerze.</p>
<p><strong>Plusy</strong> serwera Active:</p>
<ul>
<li>Stabilność.</li>
<li>Powiadomienia o planowanych pracach konserwacyjnych.</li>
<li>Krótkie prace konserwatywne.</li>
<li>Błyskawiczna odpowiedź od administratora drogą elektroniczną.</li>
<li>Analiza obciążenia powodowanych przez poszczególne komponenty serwisu.</li>
</ul>
<p><strong>Minusy</strong>:</p>
<ul>
<li>Sabie rozbudowane drzewo dostępu do domen, trzeba sobie samemu tworzyć struktury: <code>/domains/domena/public/</code> oraz <code>/domains/domena/subdomains/subdomena/public/</code></li>
<li>Bardzo ubogie możliwości zakładania skrzynek pocztowych &#8211; każdy login działa w każdej domenie jaka istnieje na serwerze, przykładowo konto example będzie działało tak samo dla example@domena-pierwsza.pl i example@domena-druga.pl</li>
<li>Transfer 1Tb/6mc &#8211; kiedy wykorzystuję około 600 Mb dziennie. Chyba niedługo czas przejść na wyższy pakiet : ).</li>
</ul>
<p><strong>Neutralne</strong>:</p>
<ul>
<li>Za wpisy DNS na serwer odpowiedzialny jest administrator, trzeba mu wysłać listę domen na serwerze, aby dodał je ręcznie do configu (brak automatyzacji). Usprawiedliwiającym jest fakt, że oczekiwanie na nową domenę trwa od 5 &#8211; 20 minut w godzinach roboczych.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/after-server-relocation/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
