Каков наилучший способ контролировать общее время процессора - для каждого пользователя?

Я написал сценарий Lua + whiptail, который может отображать, останавливать и отключать блоки Systemd. Сценарий находится здесь:

https://github.com/mpbcode/systemctl-ui

24
задан 28 February 2012 в 00:02

4 ответа

Похоже, вам нужен учет процессов.

http://www.faqs.org/docs/Linux-mini/Process-Accounting.html

В Ubuntu процесс инструменты учета находятся в http://www.faqs.org/docs/Linux-mini/Process-Accounting.html

Чтобы получить отчет для каждого пользователя, запустите [ ! d7]

sa -m
11
ответ дан 25 May 2018 в 13:57
  • 1
    К сожалению, это не сработает для меня, как «sa». не будет считать длительные процессы. То, что мне нужно (я думаю), - это способ обнаружения процессов, которые запускаются и завершаются, и записывать их время процессора, когда они уходят, а также во время работы. – Stefano Palazzo♦ 26 February 2012 в 19:48
  • 2
    @StefanoPalazzo Я считаю, что это лучшее, что вы получите. Увеличивайте его со временем для запуска процессов с /proc/[pid]/stat . – ændrük 29 February 2012 в 09:19
  • 3
    Как оказалось, кажется, что большинство процессов будут правильно учтены sa (.ps.gz) . И у меня также есть хороший способ «оценить». эти длительные процессы, прежде чем в конечном итоге получить точную ценность для тех, также. Поэтому мы будем использовать его в конце концов, и я более чем счастлив присудить награду за ваш ответ. Огромное спасибо! – Stefano Palazzo♦ 6 March 2012 в 06:01

Один из наиболее очевидных ответов - просто расширить то, что вы сейчас делаете сейчас.

Я столкнулся с этим процессом мониторинга для использования сценариев bash и mysql для отслеживания времени процессора пользователей, но он был привязан к гораздо большему временному кадру, чем вы говорили.

Надеюсь, это может дать вам еще несколько идей о направлении, в котором вы хотите войти.

http://www.dba-oracle.com/t_oracle_unix_linux_vmstat_capture.htm

2
ответ дан 25 May 2018 в 13:57

Это даст строку для каждого пользователя с указанием имени пользователя и их общего времени процессора:

ps -w -e --no-header -o uid,user \
        | sort -u \
        | while read uid user; do
                echo -e "$user\t"$(
                        ps --no-headers -u $uid --cumulative -o time \
                                | sed -e s/:/*3600+/ -e s/:/*60+/ \
                                | paste -sd+ \
                                | bc
                );
        done
1
ответ дан 25 May 2018 в 13:57

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

ps -w -e --no-header -o uid,user \
    | sort -u \
    | while read uid user; do
            echo -e "$user\t"$(
                    ps --no-headers -u $uid --cumulative -o time \
                          | sed -e s/-/*86400+/ -e s/:/*3600+/ -e s/:/*60+/ 
                          | paste -sd+ \
                          | bc
            );
    done
0
ответ дан 25 May 2018 в 13:57

Другие вопросы по тегам:

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