Записи с меткой "рабочее"
profilers-part-2
Обещанное продолжение про профайлеры. Начало тут
В предыдущей статье мы сделали дамп с помощью WinDbg. Далее, что с ним можно сделать? Наверно много, но меня интересовало только одно, а именно – память. Поэтому, я загнал дамп в .Net Memory Profiler.
Данный профайлер сказал мне, что из 7 гигов рама, у меня управляемой памяти всего 1.5 гига. Так как я был тупо уверен (без всяких на то указаний – это ошибка), что утечка именно в управляемой дотнетом памяти, то эту информацию я сразу отбросил и выкинул профайлер.
Пришлось гуглить и пытать по аське знакомых. Результаты:
“!eeheap -stat” – выдаст статистику по управляемым кучам. Предварительно надо загрузить расширение sos.dll. Посмотрев результаты, я понял, что управляемой памяти на самом деле всего полтора гига.
Дальнейшее было делом техники – зацепился из кода к GC Lua, стал выводить статистику по памяти в лог и убедился, что жрёт наш замечательный интерпретатор.
А вот пособие для нубов, как юзать WinDbg для отсечки утечек памяти.
Метки:.net, дневник, программирование, рабочее, рецензииProfilers
Расскажу я вам сказочку о профайлерах. Их есть много, за каждый хотят обычно денег. Да, чуть не забыл – профилировать мы будем память.
Итак, условия задачи: есть 64битный (это важно) .NET процесс, штатный режим которого – 1-2 Gb Ram, иногда оно съедает 7-8 (больше на сервере нет просто). Задача: выяснить что же там такое, что сжирает эти лишние 6 гиг рама, найти и уничтожить, как обычно всё в общем.
На испытания поступили:
- WinDbg + SOS (брать в составе нужного фреймворка) – брутальнейший отладчик от майкрософт с интерфейсом в духе «назад в 90е» и «я-vi», ибо практически всё управление через командную строку.
- JetBrains dotTrace – новенький гламурный профайлер, писанный на шарпе, с блекджеком и шлюхами.
- .Net Memory Profiler – понтов поменьше, чем у JetBrains, но интерфейс вполне приятный.
Я не буду рассказывать про все их фичи – желающие сами прочтут по ссылкам. Я лишь расскажу, как я ими пользовался.
Запустил я WinDbg, увидел аццкое окошко, кучу непонятных букв и мегамануал и понял, что этот звездолёт я освою только в крайнем случае. Ну уж если совсем жопа будет. И отложил его подальше, благо он бесплатный, лежит – жрать не просит. Далее шёл фаворит – dotTrace.
Фаворит заупрямился сразу – к работающим процессам он не аттачится, видите ли там API херовое, поэтому у них API своё и надо запускать процесс из-под него. Ну раз так – значит так, нам то, что. Запускаем, эмулируем ситуацию, делаем дамп. Доттрейс думал долго. Минут 15, но дамп сделал (честь ему и хвала). Но дальше – финиш. Открывать его он отказался, сославшись на «Not enough memory». Я тупо посмотрел на свободных 6 гиг рама и ещё 20 гиг свопа, почесал в затылке и написал в саппорт.
добрый день.
у меня есть пара вопросов по dottrace
есть дампы по 900 метров файлы, снятые с процесса, который жрал примерно 2 гига рама. записывались только сами объекты, без колстеков, гарбадж коллектора и финалайзер инфы.
пытаемся открыть версией 3.1 этот дамп на сервере (16 гб рама, вин 2003 р2 сп2 х64, 2 xeon каких-то). доттрейс падает с not enough memory.
что у нас не так?
Ответ меня сразил наповал:
слишком большой снепшот. dT 3.1 – 32-битное приложение, ей 16 физических гигов не сильно помогут
Как замечательно. Скромно умолчим, что качал я конечно версию, которая помечена на сайте как 64битное приложение. Для софта по 500 баксов за одно место, это несколько непонятно.
Ну, да ладно. Выкинув поделку от Jetbrains, я взялся за .Net Memory Profiler. Создателям возможная кривость Debugging API не помешала и профайлер умеет как цепляться к существующим процессам, так и запускать из под себя их. Поигравшись по мелочи с настройками, пытаемся сделать дамп процесса. Профайлер думал 2 часа, меня проклинали тестеры, но дамп сделать не смог. Стоит, правда, в два раза дешевле – 250 баксов.
Добрый коллега посоветовал для снятия дампа ClrDump, бесплатную тулзу от спецов по отладке. Тулза порадовала быстрой работой, произведя дамп в 0 (ноль) байт с процесса в 7 гигов. Немедленно была составлена жалоба в суппорт:
Hello.
I wonder why ClrDump produces dump of zero size? My process have 7 Gb of ram and I want to look why.
Command string: ClrDump 3684 sil.dmp Max.
What am I doing wrong?
There is enough space on HDD (about 100 Gb of free space)
Regards, Anatoly Popov.
Автор сначала вежливо ответил, что он в отпуске, но на следующей неделе рассмотрит проблему внимательно. Не обманул, но ответ уже не удивлял:
Hello Anatoly,
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’t have time to upgrade it).
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.
Regards,
Oleg
Но тут хоть претензий предъявить нельзя – тулза бесплатная, делалась для себя. Так что ладно.
А что же наш звездолёт, который WinDbg? Звездолёт отлично делает дампы со скоростью, примерно равной скорости записи на винт, работает как часы, даром, что бесплатный, древний, да от майкрософта.
Да, кстати, в Vista и 2008 сервере так трахаться не надо. Открываем Task Manager, тыркаем правой кнопкой в процесс, выбираем Create Dump, вуаля, всё готово.
Приятной вам работы.
Метки:.net, программирование, рабочее, рецензиирабочее
байка из Нска
Делали как-то какую-то херню для танковых войск. Один модуль у нас, один в Москве. Наш модуль сделали, приезжают москвичи. А они то ли сроки пролюбили, то ли просто не смогли сделать. В общем, включают их херню, а она не работает. Ехали москвичи в купе, в поезде. И они значит, придумали отмазку. «Растряслось, пока ехали». Растряслась херовина для танка в поезде, агащасблин.
Директор НИИ просто присел. А потом он долго объяснял «специалистам», где, как и через что их будут иметь. А также как будут иметь всех их родственников.
Одного спеца уволили в тот же день, второго по выходу из больницы, куда он попал с инфарктом.
Понятное дело, что все совпадения с разными реальными персонажами или НИИ, или ещё чем-нибудь абсолютно случайны.
Метки:дневник, программирование, рабочееСижу, никого не трогаю, читаю игроновости и внезапно натыкаюсь на ролик. Господа, ММОРПГ на мобилах уже здесь.
Хотя чего я удивляюсь. 600 МГц проц, 256 Мб рама для смартфонов/кпк уже давно не проблема, а ультима вроде как раз на такой конфигурации и работала. Хотя врать не буду, не помню. Под катом ролег.
Да, перед тем как кричать «фейк» и прочее, следует уяснить, что графика рендерится на сервере Vollee, а айфон общается именно с ним. А сервер Vollee проксирует все запросы уже в WoW сервера. Соглашение с Blizzard у них есть.
Метки:internet, software, видео, дневник, игры, рабочеезамки
It’s not a magic
Новый день несёт нам разное: от ахтунгов в виде полной переделки одной маленькой подсистемы, до таких клёвых вещей, как Finntroll (да, я его ещё ни разу не слушал). А ну и лулзы из блогов:
I fondly remember the moment of dawning comprehension when I asked a particular candidate “But suppose you had to write the code in the database implementation that auto-generates the primary key on the table you are using to solve this problem. How would that code work?” The candidate was completely taken aback, and just stared at me for a moment before saying “wow, I never before thought about the fact that someone had to write code that does that.” Apparently in his world creating primary keys is done by the primary key pixies who live in the b-tree forest.
![]()
Turns out a lot of people think that GUIDs are generated by the GUID goblins, that random numbers are created by the RNG ogres, and so on.
(с) Eric Lippert
Вообще, кстати, .net разработчикам (если таковые меня читают) рекомендую блог Липперта к регулярному прочтению.
Метки:дневник, музыка, рабочее, юморпереезд
Собственно, никак руки не доходили. Я переехал в Воронеж и теперь работаю ещё и на компанию Ru.Software.
Переезд оказался делом геморройным, хотя квартиру снял достаточно быстро. Что меня больше всего поразило – нигде нельзя купить ложку и вилку. Ну, точнее можно, но сразу набором на стопицот персон. Поэтому затарился пока одноразовыми.
От квартиры до работы ровно полчаса пешком, если кому интересно – вот карта.
Метки:дневник, рабочеекаталог UI паттернов
Сижу, значит я на работе, голодный. Попиваю чай без плюшек, читаю рсски и натыкаюсь на шедевр, запущенный малоизвестной компанией Infragistics.
В общем, это каталог каждому разрабу, имеющему отношение к UI в закладки или хотя бы раз пролистать.
PS: ахтунг! трафег! Потребует поставить Silverlight, так что обладатели линуксов и опер могут пролететь.
Метки:internet, patterns, интерфейс, программирование, рабочее