LINUX.ORG.RU

times2log 0.1.0 — монитор процессорного времени

 


1

1

Состоялся первый выпуск проекта times2log, предназначенного для мониторинга и логирования процессорного времени, используемого выбранным процессом. Код открыт под лицензией CC0 (общественное достояние).

times2log представляет из себя Python скрипт, периодически проверяющий /proc/[PID]/stat указанного процесса для учета utime и stime.

times2log выводит (и опционально логирует в указанный файл) пользовательское и системное время процесса за указанный интервал времени (2 секунды по умолчанию).

Перед началом мониторинга выполняется mlockall() для бесперебойной работы процесса в условиях нехватки памяти.

Пример вывода:

$ times2log -p `pidof kswapd0`
Process memory locked with MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT
PID: 93, Name: kswapd0, interval: 2s, SC_CLK_TCK: 100
============================================================
       user    |      system    |        total    | interval
-------------- | -------------- | --------------- | --------
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |  161 t,  80.4% |   161 t,  80.4% | 2.0s
   0 t,   0.0% |  199 t,  99.4% |   199 t,  99.4% | 2.0s
   0 t,   0.0% |  197 t,  98.4% |   197 t,  98.4% | 2.0s
   0 t,   0.0% |  198 t,  98.9% |   198 t,  98.9% | 2.0s
   0 t,   0.0% |  150 t,  74.9% |   150 t,  74.9% | 2.0s
   0 t,   0.0% |  157 t,  78.4% |   157 t,  78.4% | 2.0s
   0 t,   0.0% |  197 t,  98.4% |   197 t,  98.4% | 2.0s
   0 t,   0.0% |   29 t,  14.5% |    29 t,  14.5% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
^C--
Times for the last 32.2s:
  user:   0 ticks (0.0s), avg: 0.0%
  system: 1288 ticks (12.9s), avg: 40.0%
  total:  1288 ticks (12.9s), avg: 40.0%

Учет времени ведется в тиках и в процентах от пройденного интервала времени. При завершении работы (после получения сигнала SIGINT, SIGTERM, SIGQUIT или SIGHUP) times2log выводит итоговую статистику за все время мониторинга.

>>> Подробности

★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Учет children_utime и children_stime может быть реализован в следующем выпуске.

hakavlad ★★★
() автор топика

Скучно. Без огонька. Надо было на кувасике запилить с запуском через dosbox, тогда хоть было бы что пообсуждать.

anc ★★★★★
()
Ответ на: комментарий от Odalist

Наверно, оно ничем не лучше atop.

atop - жирный комбайн для мониторига множества показателей системы.

times2log заточен под одну задачу - прицельный мониторинг CPU times одного процесса, с произвольным интервалом, с точными таймстемпами в логах, с измерением в тиках и процентах, с итоговым выводом при завершении работы (потраченное процессом время в тиках и секундах, и среднее значение в %), с выполнением mlockall на случай работы при критическом давлении памяти, с простым текстовым логом (у atop бинарный лог!). Создавался изначально вообще именно для оценки затрат ЦП процессом kswapd0 при применении некоторых ядерных патчей.

anonymous
()
Ответ на: комментарий от mydibyje

Чем лучше альтернатив?

Какие есть альтернативы? Чем логировать времена отдельного процесса?

anonymous
()
Ответ на: комментарий от slowpony

Слишком много пердолинга получится.

times2log делает свою задачу идеально и без лишнего пердолинга.

anonymous
()
Ответ на: комментарий от anonymous

github.com

без лишнего пердолинга

Вот заложите в репы мажорных дистрибутивов - будет без лишнего пердолинга.

slowpony ★★★★★
()
Ответ на: комментарий от slowpony

Один раз выполнить

wget https://raw.githubusercontent.com/hakavlad/times2log/main/times2log

– это не пердолинг.

anonymous
()

представляет из себя Python скрипт, Извини, но нет. В мусорку. Не надо завязывать систему на интерпретируемые язычки.

anonymous
()
Ответ на: комментарий от anonymous

представляет из себя Python скрипт,

Извини, но нет. В мусорку. Не надо завязывать систему на интерпретируемые язычки.

Правильно, срочно переписать на rust!!! Причём сразу с TUI

AlexVR ★★★★★
()

Ребят, есть такая консольная тулза аля «системный монитор», сделана на Python с цветной псевдографикой, выбором цветового оформления. Попадалась мне пару лет назад, сейчас никак не могу вспомнить название, может кто-нибудь понял о чём я? На ЛОРе в новостях по-моему она даже была.

ceeqwer
()
Последнее исправление: ceeqwer (всего исправлений: 1)
Ответ на: комментарий от ceeqwer

Задайте вопрос в отдельной теме в форуме. Я уверен, Вам помогут.

А то тема скатится в …

Harliff ★★★★★
()
Последнее исправление: Harliff (всего исправлений: 1)

А можно до названия докопаться? Как оно переводится? В каком падеже и времени там «times»? Time2log - вот как надо. Теперь весь проект закрывать и с нуля переписывать.

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от anonymous

Кукаретика с ЛОРа забвли спросить на чём писать. В твоём дистрибутиве системный питон по умолчанию ставится.

anonymous
()
Ответ на: комментарий от R_He_Po6oT

В каком падеже и времени там «times»? Time2log - вот как надо

 os.times()

    Returns the current global process times. The return value is an object with five attributes:

        user - user time

        system - system time

https://docs.python.org/3/library/os.html

Название соответствует названию функции, которая возвращает времена.

hakavlad ★★★
() автор топика
Ответ на: комментарий от Reset

Вот не надо загаживать репы подобными наколеночными хелло-ворлдами, читающими proc.

Согласен, такие поделки есть у многих и если каждый начнет их добавлять в дистрибутивы, репы превратятся в помойку, а мейнтейнеры захлебнутся от объема работы.

А вот в PyPI выложить смысл есть, он один для всех, и кому-нибудь может пригодиться.

https://pypi.org/search/?c=Topic+%3A%3A+System+%3A%3A+Monitoring

annulen ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

С чем не согласен?

С точки зрения английского языка times2log (times to log) — это временные промежутки (times) [отправляются/преобразуются] в лог.

Time2log звучит как «время, чтобы записать в лог», «log» здесь интуитивно читается как глагол. Потому что лог времени (time в единственном числе) точно никто не ведёт.

Zombieff ★★
()
Последнее исправление: Zombieff (всего исправлений: 1)
Ответ на: комментарий от ceeqwer

Это Bpytop. Нварно. Еще есть glances, но оно жирное.

anonymous
()

Действительно, название не совсем удачное, будто логирование, а по сути запись является чкм то особенным. В Линукс запись output перенаправляется в файл за 2 сек. Лучше, но может несовершенное название было бы times-catcher

anonymous
()
Ответ на: комментарий от anonymous

будто логирование, а по сути запись является чкм то особенным. В Линукс запись output перенаправляется в файл за 2 сек

Здесь логирование с миллисекундными таймстемпами - да, это особенное, это отличается от перенаправления.

hakavlad ★★★
() автор топика
Ответ на: комментарий от anonymous

Лол. Начни с удаления bash из своего дистра

Aswed ★★★★★
()

Не понятно зачем это в новостях. В dev или в talks - норм, а в новости зачем - хз.

«хочу помониторить чо там с нехваткой памяти - на тебе mlockall на весь питон» - хреновый подход, что ты там намониторишь когда так варварски отнимаешь >100мб памяти у системы? вот серьезно, чтоб сделать printf четырех чиселок обязательно нужен питон? я б на месте системы за такие издевательства сразу OOM Killer на такой процесс натравил. Почему бы через eBPF например по-нормальному не реализовать то что тебе нужно?

Свежий pidof по-дефолту не отображает процессы без команды, и kswapd0 не находит соответственно, что за это система из криокамеры?

ei-grad ★★★★★
()
Ответ на: комментарий от ei-grad

отнимаешь >100мб памяти у системы?

10 МБ. Во-вторых, это не демон, который работает постоянно - times2log запускается по мере необходимости в исследовательских целях.

$ cat /proc/27271/status
Name:	python3
Umask:	0022
State:	S (sleeping)
Tgid:	27271
Ngid:	0
Pid:	27271
PPid:	27263
TracerPid:	0
Uid:	1000	1000	1000	1000
Gid:	1000	1000	1000	1000
FDSize:	256
Groups:	24 25 27 29 30 44 46 108 113 114 118 1000 
NStgid:	27271
NSpid:	27271
NSpgid:	27271
NSsid:	27263
VmPeak:	   44316 kB
VmSize:	   44316 kB
VmLck:	   44300 kB
VmPin:	       0 kB
VmHWM:	    9992 kB
VmRSS:	    9916 kB
RssAnon:	    4560 kB
RssFile:	    5356 kB
RssShmem:	       0 kB
VmData:	    5060 kB
VmStk:	     132 kB
VmExe:	    3300 kB
VmLib:	    3372 kB
VmPTE:	     108 kB
VmPMD:	      12 kB
VmSwap:	       0 kB
hakavlad ★★★
() автор топика
Ответ на: комментарий от ei-grad

Свежий pidof по-дефолту

Я не заставляю вас им пользоваться.

kswapd0 не находит соответственно

kswapd0 есть всегда.

printf четырех чиселок обязательно нужен питон?

что угодно не обязательно, однако мне удобно писать это на питоне, питон идеален для таких задач.

по-нормальному не реализовать то что тебе нужно

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

100% ваших претензий мимо.

hakavlad ★★★
() автор топика
Последнее исправление: hakavlad (всего исправлений: 1)
Ответ на: комментарий от ei-grad

не отображает процессы без команды, и kswapd0 не находит соответственно

Находит по имени (/proc/PID/comm).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.