Архив рубрики "программирование"

1
Июл

Profilers

   Автор: Aen Sidhe

Расскажу я вам сказочку о профайлерах. Их есть много, за каждый хотят обычно денег. Да, чуть не забыл – профилировать мы будем память.

Итак, условия задачи: есть 64битный (это важно) .NET процесс, штатный режим которого – 1-2 Gb Ram, иногда оно съедает 7-8 (больше на сервере нет просто). Задача: выяснить что же там такое, что сжирает эти лишние 6 гиг рама, найти и уничтожить, как обычно всё в общем.

На испытания поступили:

  1. WinDbg + SOS (брать в составе нужного фреймворка) – брутальнейший отладчик от майкрософт с интерфейсом в духе «назад в 90е» и «я-vi», ибо практически всё управление через командную строку.
  2. JetBrains dotTrace – новенький гламурный профайлер, писанный на шарпе, с блекджеком и шлюхами.
  3. .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, программирование, рабочее, рецензии
17
Май

байка из Нска

   Автор: Aen Sidhe

Делали как-то какую-то херню для танковых войск. Один модуль у нас, один в Москве. Наш модуль сделали, приезжают москвичи. А они то ли сроки пролюбили, то ли просто не смогли сделать. В общем, включают их херню, а она не работает. Ехали москвичи в купе, в поезде. И они значит, придумали отмазку. «Растряслось, пока ехали». Растряслась херовина для танка в поезде, агащасблин.

Директор НИИ просто присел. А потом он долго объяснял «специалистам», где, как и через что их будут иметь. А также как будут иметь всех их родственников.

Одного спеца уволили в тот же день, второго по выходу из больницы, куда он попал с инфарктом.

Понятное дело, что все совпадения с разными реальными персонажами или НИИ, или ещё чем-нибудь абсолютно случайны.

Метки:дневник, программирование, рабочее
26
Фев

каталог UI паттернов

   Автор: Aen Sidhe

Сижу, значит я на работе, голодный. Попиваю чай без плюшек, читаю рсски и натыкаюсь на шедевр, запущенный малоизвестной компанией Infragistics.

В общем, это каталог каждому разрабу, имеющему отношение к UI в закладки или хотя бы раз пролистать.

PS: ахтунг! трафег! Потребует поставить Silverlight, так что обладатели линуксов и опер могут пролететь.

Метки:internet, patterns, интерфейс, программирование, рабочее
20
Янв

утреннее

   Автор: Aen Sidhe

Был период, когда я думал, что я отличный программист. Потом я стал работать программистом профессионально и читать умные книжки. Ко мне пришло понимание, что я достаточно средний специалист. Путём тренировок и работы, я получил скилл и могу заявить, что я действительно хороший программист с хорошей теоретической подготовкой. Но, чем дальше в лес, тем толще партизаны как известно. Каждый день, читая блоги, поражаюсь уму людей. Многие предлагают и делают такое, до чего я бы никогда не додумался.

Ах да, к чему всё это? А ни к чему, просто чашка кофе, полусонное состояние и Gregorian в наушниках располагают, да. Gregorian похож на всякие Era с Enigma, но т.к. я его слушаю в первый раз, он мне пока нравится.

Метки:дневник, музыка, программирование
27
Дек

ordo grammaticus

   Автор: Aen Sidhe

Есть такой малоизвестный сайт™, как RSDN. Там есть разные персонажи, профи, не очень, не профи, вообще фиг пойми кто. Также, там есть отличная школа троллинга, даже не одна. Это форумы «Философия программирования» и «Священные войны» (их даже три: компы, политика, всё остальное).

Также есть там один персонаж VladD2. Влад – евангелист, т.е. если ему технология нравится, то всё остальное – ересь и провокация. В принципе, он иногда даже разумно объясняет почему. В целом, Влад – спец высочайшего уровня. Но, блин. Писать в духе «аналы истории» и вообще на уровне семиклассника – это жесть. Причём, любимый стиль постов Влада – вол оф текст на 2-3 экрана 17-дюймового моника. Это, господа, заруливает даже Геометра.

Метки:ordo grammaticus, дневник, программирование
27
Дек

программерское

   Автор: Aen Sidhe

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.

Метки:дневник, программирование, цитатное, юмор
26
Дек

master page vs. javascript

   Автор: Aen Sidhe

Итак, небольшой туториал на тему ASP .NET.

Там есть master-page. Вполне удобные штуки. Есть соблазн напихать туда всякого, например:

<script type="text/javascript" src="../js/jQuery.js"></script>

Кажется, круто – теперь у меня на всех страницах будет jQuery. Как бы не так. Фишка в том, что относительные пути будут считаться не от master-page, а от content page, которая использует этот мастер. И это большая жопа, на самом деле. Достаточно странице быть не на том же уровне в иерархии каталогов и у нас все скрипты отваливаются.

Замечу, что это касается только скриптов. В остальных случаях (картинки, цсс) работает волшебная тильда. «~» – это путь к головному каталогу приложения.

  1. Решение для тех, у кого сайт всегда в корне домена:
    <script type="text/javascript" src="/js/jQuery.js"></script>
  2. Решение для нормальных людей:
        public static class Extensions
        {
            public static void RegisterScript(this Control page, string scriptFileName)
            {
                RegisterScript(page, scriptFileName, 0);
            }
            public static void RegisterScript(this Control page, string scriptFileName, int index)
            {
                var tag = new HtmlGenericControl("script");
                tag.Attributes.Add("type", "text/javascript");
                tag.Attributes.Add("src", page.ResolveUrl(scriptFileName));
                page.Page.Header.Controls.AddAt(index, tag);
            }
        }

Указание индекса нужно для разруливания зависимостей и вставки скриптов в самое начало элемента head.

Нашёл здесь

Метки:asp .net, javascript, master page, trick, программирование
8
Дек

Статистическое

   Автор: Aen Sidhe

Всякое про программеров

Под катом картинка и чуть-чуть копипасты.

Прочитать запись полностью »

Метки:программирование, статистика
18
Окт

code coverage

   Автор: Aen Sidhe

Early one morning, a programmer asked the great master:

“I am ready to write some unit tests. What code coverage should I aim for?”

The great master replied:

“Don’t worry about coverage, just write some good tests.”

The programmer smiled, bowed, and left.

Later that day, a second programmer asked the same question.

The great master pointed at a pot of boiling water and said:

“How many grains of rice should put in that pot?”

The programmer, looking puzzled, replied:

“How can I possibly tell you? It depends on how many people you need to feed, how hungry they are, what other food you are serving, how much rice you have available, and so on.”

“Exactly,” said the great master.

The second programmer smiled, bowed, and left.

Toward the end of the day, a third programmer came and asked the same question about code coverage.

“Eighty percent and no less!” Replied the master in a stern voice, pounding his fist on the table.

The third programmer smiled, bowed, and left.

After this last reply, a young apprentice approached the great master:

“Great master, today I overheard you answer the same question about code coverage with three different answers. Why?”

The great master stood up from his chair:

“Come get some fresh tea with me and let’s talk about it.”

After they filled their cups with smoking hot green tea, the great master began to answer:

“The first programmer is new and just getting started with testing. Right now he has a lot of code and no tests. He has a long way to go; focusing on code coverage at this time would be depressing and quite useless. He’s better off just getting used to writing and running some tests. He can worry about coverage later.”

“The second programmer, on the other hand, is quite experience both at programming and testing. When I replied by asking her how many grains of rice I should put in a pot, I helped her realize that the amount of testing necessary depends on a number of factors, and she knows those factors better than I do – it’s her code after all. There is no single, simple, answer, and she’s smart enough to handle the truth and work with that.”

“I see,” said the young apprentice, “but if there is no single simple answer, then why did you answer the third programmer ‘Eighty percent and no less’?”

The great master laughed so hard and loud that his belly, evidence that he drank more than just green tea, flopped up and down.

“The third programmer wants only simple answers – even when there are no simple answers … and then does not follow them anyway.”

The young apprentice and the grizzled great master finished drinking their tea in contemplative silence.

(c) stackoverflow.com

Метки:программирование, юмор
14
Окт

hate

   Автор: Aen Sidhe

язык, в котором функции не могут возвращать значения и, по сути, являются процедурами, должен быть уничтожен.

Это я про abap – порождение немецкого гения.

Метки:abap, erp, программирование
Страница 3 из 41234