ProcDump для Linux — реинкарнация классического инструмента ProcDump из комплекта технических средств и утилиты для управления, диагностики, устранения неполадок и мониторинга среды Microsoft Windows.



Конкретно этот инструмент от Марка Русиновича показывает, сколько ресурсов центрального процессора должен занимать процесс и какое время должно пройти, прежде чем ProcDump создаст дамп процесса. То есть дамп записывается автоматически, когда процесс в очередной раз повысит нагрузку на центральный процессор выше определённого порога.

Например, под Windows мы хотим изучить аномальное поведение wmiprvse.exe (процесс WMI Provider Host), который в произвольные моменты времени занимает до 90% ресурсов CPU. Тогда запускаеми следующую команду, которая трижды запишет дамп этого процесса в случае, если потреблением им CPU в течение трёх секунд превышает 80%.

procdump.exe -c 80 -s 3 -n 3 wmiprvse

Действительно, очень удобно.



Версия под Linux работает примерно так же, как под Windows, разве что опций в программе поменьше:

Usage: procdump [OPTIONS...] TARGET
   OPTIONS
      -C          CPU threshold at which to create a dump of the process from 0 to 100 * nCPU
      -c          CPU threshold below which to create a dump of the process from 0 to 100 * nCPU
      -M          Memory commit threshold in MB at which to create a dump
      -m          Trigger when memory commit drops below specified MB value.
      -n          Number of dumps to write before exiting
      -s          Consecutive seconds before dump is written (default is 10)
   TARGET must be exactly one of these:
      -p          pid of the process
      -w          Name of the process executable

В данный момент поддерживается работа только на ядре 3.5 или более старшей версии.

Комментарии (33)


  1. kovserg
    05.11.2018 13:33
    -7

    Круто ждём tcpdump, iotop, iftop, htop, fatrace, lspci, lsusb, lsblk и wavemon


    1. datacompboy
      05.11.2018 13:51
      +6

      А что из линуксовой аптечки умеет дамп писать по жручке сру?


      1. skymal4ik
        05.11.2018 14:40
        +1

        #!/sarcasm

        Можно же собрать велосипед-однострочник из bash, top, sed, uptime и немного дебага этого всего :))


        1. datacompboy
          05.11.2018 14:59
          +1

          Ну вот не однострочник, и счастливой отладки :)


          1. iig
            05.11.2018 15:20

            while cat /proc/$PID/stat | awk '{условие срабатывания}'; do sleep 0; done; gcore $PID
            Думаю, где-то так можно. А если вместо bash взять python, то оно и процессор грузить не будет.


            1. datacompboy
              05.11.2018 15:53
              +1

              вот это самое «условие срабатывания» уже не так тривиально.

              а если взять вместо питона си — всё, сразу фу и не надо так?


              1. avost
                05.11.2018 20:54

                а если взять вместо питона си — всё, сразу фу и не надо так?

                Большой разницы нет. Просто таких банальных фиговин средний админ пишет по пятьдесят штук на дню, но, отчего-то, не публикует каждую с помпой — "микросовт выпустила убер-утилиту для линукса!".
                Говорят, микросовт стала самым большим контрибьютором в опенсорс. Если они вот такую банальщину контрибьютят тоннами, то это и неудивительно. Можно написать отдельные утилиты для поиска *.тхт файлов. И ещё одну для.мп3 и тд и тп. Огромный простор для засирания опенсорса никчёмным говном.


                1. datacompboy
                  05.11.2018 21:50

                  А, погоди, претензия-то к кому — к ализару или к мокрософту?


          1. sumanai
            06.11.2018 02:13

            Ну вот не однострочник

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


      1. grayich
        05.11.2018 14:54

        atop к примеру, ну и ещё там вагон с тележкой были(не помню за ненадобностью)

        … пардон, не то, был невнимателен


        1. datacompboy
          05.11.2018 14:59
          +1

          Нет такой буквы в коммандлайне атопа. Ну или ткните носом? Я даже перечитал ман уже.


          1. gecube
            05.11.2018 17:16

            А она (буква) и не нужна. Проблема atop только одна — это все-таки утилита ретроспективного анализа. И возможно, что не удастся с первого раза угадать интервал снятия метрик.


      1. kvaps
        05.11.2018 16:39
        +1

        top | grep '<pid>'


      1. YourChief
        05.11.2018 18:21
        +1

        юзаю часто gdb для этих целей. вариантов применений масса, от ручного аттача до полуавтоматического (https://poormansprofiler.org/)

        для особо тонких работ по наводке одного из хабравчан юзаю теперь вот такое: http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html

        первое — стандартный отладчик, второе — линуксовый профайлер в ядре со скриптом для агрегации вывода


        1. YourChief
          05.11.2018 18:24

          причём приведённые мной инструменты работают более тонко, чем procdump. второй так вообще позволяет достаточно общую количественную картину узреть.


  1. mikevmk
    05.11.2018 15:20

    Выпустили год назад вроде как

    Сильно ли это удобнее пары строк на shell + gcore — не совсем ясно. Надо пробовать


  1. fukkit
    05.11.2018 16:50

    Ну, теперь заживем! Отож токмо мучились...


  1. ValdikSS
    05.11.2018 17:12

    Microsoft выпустила Linux-версию сервиса LSASS.


  1. iig
    05.11.2018 17:22
    +2

    Почему фу? Выпустили, ну ок. Под Linux в 2018 году уже есть 100500 способов сделать странное… Вот есть и 100501-й в виде специальной программы от MS.
    Просто в ОС, где доступны исходники, и за 5 мин находится решение задачи… Специально помнить, что есть такая специальная утилита, как-то сложновато.


    1. bugdesigner
      06.11.2018 05:28

      Просто из этих 100500 способов никто не делал вид, что решена неразрешимая проблема.


    1. some_x
      06.11.2018 06:26

      Вообще есть много причин, например:

      1) Вот я не работаю с Linux, зато утилита procump мне хорошо знакома. И если мне внезапно нужно будет отладить проблемное приложение на Linux, то проще всего мне будет начать порта хорошо знакомой мне утилиты, чем разбираться в других.

      2) Как подсказывает мне интуция основанная на опыте, когда дляодной задачи есть 100500 инструментов, из них 100000 не работают, а 475 работают плохо/только с напильником/не в твоём случае.
      И найти схожу эти работающие инструменты, не так уж просто.
      И мне логично будет начать с procdump по причине п.1 и потому что я могу надеяться что ms не будет выпускать откровенно не рабочую утилиту.


  1. vpiskunov
    05.11.2018 20:48

    Microsoft вообще молодцы. Сразу понятно — кто делает у себя большой рефакторинг. Движутся в своих действиях в правильном наеоавлении, но не все сразу получится идеально.


    1. vsapronov
      05.11.2018 23:39

      наебравлении


      1. GadPetrovich
        06.11.2018 16:30

        Похоже, что направление выбрано не очень правильное.


    1. bugdesigner
      06.11.2018 05:33

      Чуть чаем не подавился. Мессия микрософт, как же мы без него жили то раньше? Большой рефакторинг Скайпа, например, мы уже все видели. С ужасом думаю, что будет, когда "наведут порядок" на гитхабе.


  1. VJean
    05.11.2018 21:57
    +2

    BSOD еще не портировали?


    1. oisee
      06.11.2018 09:21

      Но он же в десктопных линуксах с самых ранних дистрибутивов встроен :P


  1. loginsin
    06.11.2018 01:47

    Код понравился: портировали часть своего API и дальше пользуются как в нативной ОС. :-)


  1. sumanai
    06.11.2018 02:16

    В WSL работает?


    1. MikailBag
      06.11.2018 12:31

      И звук как?


  1. scruff
    06.11.2018 05:49

    Мне не очень ясно, что делать с дампом от процесса. Возможно сравниваю тёплое с мягким, но анализируя дамп от BSOD-a, например, далеко не всегда удается понять причину сваливания системы.


    1. some_x
      06.11.2018 06:21

      Есть разные варианты каждый случай индивидуален.
      Если мы смотрим crash dump, то в простейшем случае call stack нам покажет именно то место где упало. Примерно так же можно поступить если дамп записан по тригеру «зависание».

      Если мы пишем дамп по тригеру загрузки процессора, да ещё и пишем эти дампы серией (после срабатывания тригера пишем n дампов, через каждые x секунд), то можно посмотреть какая нить в каком месте застряла.
      Аналогично можно поступить с тригером потребления памяти.

      Описанные способы конечно не 100% работают, но шанс есть (и иногда за него хватаешься как за соломинку).

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


  1. maydjin
    06.11.2018 11:57

    Не юниксвейнинько однако.


    Оно раз в n секунд просыпается? Т.е. может пропустить пик? Зачем оно тогда?


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