<?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>Aen Sidhe&#039;s Weblog &#187; .net</title>
	<atom:link href="http://www.aensidhe.ru/tag/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aensidhe.ru</link>
	<description>Просто блог.</description>
	<lastBuildDate>Fri, 03 Feb 2012 10:13:03 +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>System.AddIn</title>
		<link>http://www.aensidhe.ru/2009/11/09/system-addin-2/</link>
		<comments>http://www.aensidhe.ru/2009/11/09/system-addin-2/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 08:10:03 +0000</pubDate>
		<dc:creator>Aen Sidhe</dc:creator>
				<category><![CDATA[программирование]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[рабочее]]></category>

		<guid isPermaLink="false">http://www.aensidhe.ru/?p=583</guid>
		<description><![CDATA[Спасибо коллегам, отговорившим меня городить велосипед. Но монструозность System.Addin таки поражает. Кто мне скажет, зачем выделили Views? Я вот что-то понять не могу, хватило бы адаптеров, имхо. Минимальный проект с использованием System.AddIn Метки:.net, программирование, рабочее]]></description>
			<content:encoded><![CDATA[<p>Спасибо коллегам, отговорившим меня городить велосипед. Но монструозность System.Addin таки поражает.</p>
<p>Кто мне скажет, зачем выделили Views? Я вот что-то понять не могу, хватило бы адаптеров, имхо.</p>
<p><a href="http://www.aensidhe.ru/wp-content/uploads/2009/11/Test.zip">Минимальный проект с использованием System.AddIn</a></p>

	Метки:<a href="http://www.aensidhe.ru/tag/net/" title=".net" rel="tag">.net</a>, <a href="http://www.aensidhe.ru/category/development/" title="программирование" rel="tag">программирование</a>, <a href="http://www.aensidhe.ru/tag/%d1%80%d0%b0%d0%b1%d0%be%d1%87%d0%b5%d0%b5/" title="рабочее" rel="tag">рабочее</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.aensidhe.ru/2009/11/09/system-addin-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>profilers-part-2</title>
		<link>http://www.aensidhe.ru/2009/07/08/profilers-part-2/</link>
		<comments>http://www.aensidhe.ru/2009/07/08/profilers-part-2/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 17:46:55 +0000</pubDate>
		<dc:creator>Aen Sidhe</dc:creator>
				<category><![CDATA[дневник]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[рецензии]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[рабочее]]></category>

		<guid isPermaLink="false">http://www.aensidhe.ru/?p=428</guid>
		<description><![CDATA[Обещанное продолжение про профайлеры. Начало тут В предыдущей статье мы сделали дамп с помощью WinDbg. Далее, что с ним можно сделать? Наверно много, но меня интересовало только одно, а именно &#8212; память. Поэтому, я загнал дамп в .Net Memory Profiler. Данный профайлер сказал мне, что из 7 гигов рама, у меня управляемой памяти всего 1.5 [...]]]></description>
			<content:encoded><![CDATA[<p>Обещанное продолжение про профайлеры. Начало <a href="http://www.aensidhe.ru/2009/07/01/profilers/">тут</a></p>
<p>В предыдущей статье мы сделали дамп с помощью WinDbg. Далее, что с ним можно сделать? Наверно много, но меня интересовало только одно, а именно &#8212; память. Поэтому, я загнал дамп в .Net Memory Profiler.</p>
<p>Данный профайлер сказал мне, что из 7 гигов рама, у меня управляемой памяти всего 1.5 гига. Так как я был тупо уверен (без всяких на то указаний &#8212; это ошибка), что утечка именно в управляемой дотнетом памяти, то эту информацию я сразу отбросил и выкинул профайлер.</p>
<p>Пришлось гуглить и пытать по аське знакомых. Результаты:</p>
<p>“!eeheap -stat” &#8212; выдаст статистику по управляемым кучам. Предварительно надо загрузить расширение sos.dll. Посмотрев результаты, я понял, что управляемой памяти на самом деле всего полтора гига.</p>
<p>Дальнейшее было делом техники &#8212; зацепился из кода к GC Lua, стал выводить статистику по памяти в лог и убедился, что жрёт наш замечательный интерпретатор.</p>
<p>А вот <a href="http://www.codeproject.com/KB/cpp/MemoryLeak.aspx">пособие</a> для нубов, как юзать WinDbg для отсечки утечек памяти.</p>

	Метки:<a href="http://www.aensidhe.ru/tag/net/" title=".net" rel="tag">.net</a>, <a href="http://www.aensidhe.ru/category/blog/" title="дневник" rel="tag">дневник</a>, <a href="http://www.aensidhe.ru/category/development/" title="программирование" rel="tag">программирование</a>, <a href="http://www.aensidhe.ru/tag/%d1%80%d0%b0%d0%b1%d0%be%d1%87%d0%b5%d0%b5/" title="рабочее" rel="tag">рабочее</a>, <a href="http://www.aensidhe.ru/category/reviews/" title="рецензии" rel="tag">рецензии</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.aensidhe.ru/2009/07/08/profilers-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profilers</title>
		<link>http://www.aensidhe.ru/2009/07/01/profilers/</link>
		<comments>http://www.aensidhe.ru/2009/07/01/profilers/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 07:12:06 +0000</pubDate>
		<dc:creator>Aen Sidhe</dc:creator>
				<category><![CDATA[программирование]]></category>
		<category><![CDATA[рецензии]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[рабочее]]></category>

		<guid isPermaLink="false">http://www.aensidhe.ru/?p=411</guid>
		<description><![CDATA[Расскажу я вам сказочку о профайлерах. Их есть много, за каждый хотят обычно денег. Да, чуть не забыл &#8212; профилировать мы будем память. Итак, условия задачи: есть 64битный (это важно) .NET процесс, штатный режим которого &#8212; 1-2 Gb Ram, иногда оно съедает 7-8 (больше на сервере нет просто). Задача: выяснить что же там такое, что [...]]]></description>
			<content:encoded><![CDATA[<p>Расскажу я вам сказочку о профайлерах. Их есть много, за каждый хотят обычно денег. Да, чуть не забыл &#8212; профилировать мы будем память.</p>
<p>Итак, условия задачи: есть 64битный (это важно) .NET процесс, штатный режим которого &#8212; 1-2 Gb Ram, иногда оно съедает 7-8 (больше на сервере нет просто). Задача: выяснить что же там такое, что сжирает эти лишние 6 гиг рама, найти и уничтожить, как обычно всё в общем.</p>
<p>На испытания поступили:</p>
<ol>
<li><a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx">WinDbg</a> + SOS (брать в составе нужного фреймворка) &#8212; брутальнейший отладчик от майкрософт с интерфейсом в духе &#171;назад в 90е&#187; и &#171;я-vi&#187;, ибо практически всё управление через командную строку.</li>
<li><a href="http://www.jetbrains.com/profiler/">JetBrains dotTrace</a> &#8212; новенький гламурный профайлер, писанный на шарпе, с блекджеком и шлюхами.</li>
<li><a href="http://memprofiler.com/">.Net Memory Profiler</a> &#8212; понтов поменьше, чем у JetBrains, но интерфейс вполне приятный.</li>
</ol>
<p>Я не буду рассказывать про все их фичи &#8212; желающие сами прочтут по ссылкам. Я лишь расскажу, как я ими пользовался.</p>
<p>Запустил я WinDbg, увидел аццкое окошко, кучу непонятных букв и мегамануал и понял, что этот звездолёт я освою только в крайнем случае. Ну уж если совсем жопа будет. И отложил его подальше, благо он бесплатный, лежит &#8212; жрать не просит. Далее шёл фаворит &#8212; dotTrace.</p>
<p>Фаворит заупрямился сразу &#8212; к работающим процессам он не аттачится, видите ли там API херовое, поэтому у них API своё и надо запускать процесс из-под него. Ну раз так &#8212; значит так, нам то, что. Запускаем, эмулируем ситуацию, делаем дамп. Доттрейс думал долго. Минут 15, но дамп сделал (честь ему и хвала). Но дальше &#8212; финиш. Открывать его он отказался, сославшись на &#171;Not enough memory&#187;. Я тупо посмотрел на свободных 6 гиг рама и ещё 20 гиг свопа, почесал в затылке и написал в саппорт.</p>
<blockquote><p>добрый день.<br />
у меня есть пара вопросов по dottrace<br />
есть дампы по 900 метров файлы, снятые с процесса, который жрал примерно 2 гига рама. записывались только сами объекты, без колстеков, гарбадж коллектора и финалайзер инфы.<br />
пытаемся открыть версией 3.1 этот дамп на сервере (16 гб рама, вин 2003 р2 сп2 х64, 2 xeon каких-то). доттрейс падает с not enough memory.<br />
что у нас не так?</p></blockquote>
<p>Ответ меня сразил наповал:</p>
<blockquote><p>слишком большой снепшот. dT 3.1 &#8212; 32-битное приложение, ей 16 физических гигов не сильно помогут</p></blockquote>
<p>Как замечательно. Скромно умолчим, что качал я конечно версию, которая помечена на сайте как 64битное приложение. Для софта по 500 баксов за одно место, это несколько непонятно.</p>
<p>Ну, да ладно. Выкинув поделку от Jetbrains, я взялся за .Net Memory Profiler. Создателям возможная кривость Debugging API не помешала и профайлер умеет как цепляться к существующим процессам, так и запускать из под себя их. Поигравшись по мелочи с настройками, пытаемся сделать дамп процесса. Профайлер думал 2 часа, меня проклинали тестеры, но дамп сделать не смог. Стоит, правда, в два раза дешевле &#8212; 250 баксов.</p>
<p>Добрый коллега посоветовал для снятия дампа <a href="http://www.debuginfo.com/tools/clrdump.html">ClrDump</a>, бесплатную тулзу от спецов по отладке. Тулза порадовала быстрой работой, произведя дамп в 0 (ноль) байт с процесса в 7 гигов. Немедленно была составлена жалоба в суппорт:</p>
<blockquote><p>Hello.</p>
<p>I wonder why ClrDump produces dump of zero size? My process have 7 Gb of ram and I want to look why.</p>
<p>Command string: ClrDump 3684 sil.dmp Max.</p>
<p>What am I doing wrong?</p>
<p>There is enough space on HDD (about 100 Gb of free space)</p>
<p>Regards, Anatoly Popov.</p></blockquote>
<p>Автор сначала вежливо ответил, что он в отпуске, но на следующей неделе рассмотрит проблему внимательно. Не обманул, но ответ уже не удивлял:</p>
<blockquote><p>Hello Anatoly,</p>
<p>Is your process 64-bit? If so, ClrDump cannot create a dump for it (limitations of 32-bit DbgHelp.dll). Unfortunately, there is no 64-bit version of ClrDump (it was created when 64-bit systems were not widespread, and now I don&#8217;t have time to upgrade it).</p>
<p>As a workaround, it should be possible to write your own tool that would be built as 64-bit executable, load 64-bit DbgHelp.dll and create the dump. Three function calls are needed: OpenProcess (open the target process), CreateFile(create the dump file), MiniDumpWriteDump with the proper parameters to create the dump. I can send you a sample code if you want.</p>
<p>Regards,</p>
<p>Oleg</p></blockquote>
<p>Но тут хоть претензий предъявить нельзя &#8212; тулза бесплатная, делалась для себя. Так что ладно.</p>
<p>А что же наш звездолёт, который WinDbg? Звездолёт отлично делает дампы со скоростью, примерно равной скорости записи на винт, работает как часы, даром, что бесплатный, древний, да от майкрософта.</p>
<p>Да, кстати, в Vista и 2008 сервере так трахаться не надо. Открываем Task Manager, тыркаем правой кнопкой в процесс, выбираем Create Dump, вуаля, всё готово.</p>
<p>Приятной вам работы.</p>

	Метки:<a href="http://www.aensidhe.ru/tag/net/" title=".net" rel="tag">.net</a>, <a href="http://www.aensidhe.ru/category/development/" title="программирование" rel="tag">программирование</a>, <a href="http://www.aensidhe.ru/tag/%d1%80%d0%b0%d0%b1%d0%be%d1%87%d0%b5%d0%b5/" title="рабочее" rel="tag">рабочее</a>, <a href="http://www.aensidhe.ru/category/reviews/" title="рецензии" rel="tag">рецензии</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.aensidhe.ru/2009/07/01/profilers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

