Я пытаюсь выполнить скрипт, который отправляет git каждые x минут в качестве службы, но git использует 100% ЦП и большое количество оперативной памяти

Вывод timeотображается на стандартном выводе. Поэтому, если вы хотите зафиксировать его вывод в файле журнала, вам нужно перенаправить stderr.

Но обратите внимание, что в zsh, как и в ksh, timeявляется ключевым словом,

time cmd 2>&1 |  tee log

На самом деле разcmd 2>&1 | tee logcmdиtee). Если вы хотите синхронизировать только cmdи перенаправить как стандартный вывод, так и стандартный вывод cmdи вывод timeв канал на tee, вам понадобится:

{ time cmd; } 2>&1 | tee log

Что касается периодического поиска, я не думаю, что это возможно. Это то, что учитывается ядром и становится доступным для родительского процесса после завершения после того, как родительский процесс ждет ()ed для своего дочернего (с помощьюgetrusage()).

Также обратите внимание, что использование великих -детей, которых не ждут их родители, не учитывается, даже если они умерли к тому времени, когда timeсообщает, что использование(initдействительно будет учитывать их ). ].

Процесс может получить свою собственную информацию об использовании (см., например, вывод только timeв zsh), но опять же для части childrenон будет увеличиваться только тогда, когда ваши непосредственные дочерние элементы умирают и сообщают об их использовании, поэтому, даже если вы запускали makeв фоновом режиме и периодически запускали time, часть childrenне увеличивалась для каждого завершающегося дочернего элемента make.make(ядро ​​​​от имениmake)будет учитывать использование этих дочерних элементов, и это совокупное использование будет доступно для zshтолько после возврата make.

Если вас интересует только процессорное время, а не другая информация, отслеживаемая getrusage()и сообщаемая time, после изменения $TIMEFMTв Linux вы можете получить информацию из /proc/pid/stat. ] и некоторое резюме из ps,но снова использование дочерних элементов для данного процесса будет включать только кумулятивное использование завершенных прямых дочерних процессов.

Что-то вроде:

time cmd &
perl -MPOSIX -l -0777 -e '
  while () {
    @f = /\(.*\)|\S+/gs;
    printf "%s %s cutime: %.2f cstime: %.2f\n",
      strftime("%T",localtime), $f[1],
      map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[15,16];
    sleep 1;
    seek STDIN,0,0;
  }' < /proc/$!/stat

Где вы увидитеcutime(совокупное время пользователя )иcstime(системное )увеличение только тогда, когда каждый из непосредственных дочерних процессов, который выполнял cmd, умирает и cmdимеет ждал их.

Пример вывода с zsh -c 'repeat 5 {head -c200M /dev/zero | pixz > /dev/null}'в качествеcmd:

15:19:32 (zsh) cutime: 0.00 cstime: 0.00
15:19:33 (zsh) cutime: 0.00 cstime: 0.00
15:19:34 (zsh) cutime: 0.05 cstime: 0.25
15:19:35 (zsh) cutime: 0.05 cstime: 0.25
15:19:36 (zsh) cutime: 19.21 cstime: 1.04
15:19:37 (zsh) cutime: 19.21 cstime: 1.04
15:19:38 (zsh) cutime: 19.21 cstime: 1.04
15:19:39 (zsh) cutime: 19.26 cstime: 1.31
15:19:40 (zsh) cutime: 37.94 cstime: 2.05
15:19:41 (zsh) cutime: 37.94 cstime: 2.05
15:19:42 (zsh) cutime: 37.97 cstime: 2.36
15:19:43 (zsh) cutime: 37.97 cstime: 2.36
15:19:44 (zsh) cutime: 57.17 cstime: 3.07
15:19:45 (zsh) cutime: 57.17 cstime: 3.07
15:19:46 (zsh) cutime: 57.22 cstime: 3.36
15:19:47 (zsh) cutime: 76.06 cstime: 4.10
15:19:48 (zsh) cutime: 76.06 cstime: 4.10
15:19:49 (zsh) cutime: 76.06 cstime: 4.10
15:19:50 (zsh) cutime: 76.08 cstime: 4.42

Где вы видите массовое увеличение времени (, когда умирают процессы headи pigz).

1
03.01.2021, 00:10
1 ответ

Кажется, я сам нашел Решение с помощью @OlivierDulac:

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

Это в конечном итоге заблокировало выполнение скрипта.

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

1
18.03.2021, 22:38

Теги

Похожие вопросы