Мне дали задание разделить службы на одной из наших основных виртуальных машин (Amazon EC2) и соответствующие дополнительные виртуальные машины в соответствии с потребностями служб.
Типы служб, с которыми я имею дело, в основном, это php cronjobs, которые совпадают с нашим веб-приложением. Они требуют большого количества ресурсов и операций ввода-вывода, поэтому их необходимо перенести в другое место.
У этих заданий нет согласованных PID, они появляются и исчезают по мере необходимости, поэтому что-то вроде "grepping" для вывода args из ps - единственный способ, который я могу придумать для хранения этих данных. Другими словами, последовательным является поиск такого процесса: ps -eo pid,pcpu,%mem,vsize,args | grep "php[ ]/path/to/script.php"
Однако некоторые процессы выполняются всего несколько секунд, а затем умирают.
Цель состоит в том, что мне нужно понять, как лучше всего подготовить виртуальные машины на основе ресурсов, которые эти процессы фактически используют, чтобы сэкономить деньги.
Цитата: «Оцените использование сервера на основе среднего значения за 1 неделю»
Честно говоря, мне эта просьба кажется немного подозрительной. Разве вы не можете просто переместить вещи и посмотреть, какова нагрузка на новую систему? При этом, по вашей реальной проблеме.
Вам необходимо выяснить использование ресурсов процессами (а не всей системой).
Опция 1:
Фактически вы можете запускать процессы с помощью какого-нибудь профилировщика или инструмента трассировки (т.е. perf
и strace
, и получить довольно точные данные. Это может потребовать много работы и, вероятно, будет лишним для оценки совокупности нескольких процессов.
Вариант 2:
Сбор данных о процессах вскоре после их запуска с использованием счетчиков, которые ядро предоставляет для каждого процесса. Их можно найти в /proc/<pid>/...
. Скорее всего, вы захотите использовать такой инструмент, как pidstat
чтобы собрать эти данные для вас. Например:
[root@ny-kbrandt01 ~]# find / -iname '*' 2>&1 > /dev/null & pidstat -p $! -d -r -u -h 1
[1] 18736
Linux 2.6.32-431.el6.x86_64 (ny-kbrandt01.ds.stackexchange.com) 12/02/2014 _x86_64_ (4 CPU)
# Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command
1417486738 18736 1.00 2.00 0.00 3.00 3 360.00 8.00 112268 1236 0.02 4592.00 0.00 0.00 find
# Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command
1417486739 18736 1.00 3.00 0.00 4.00 2 241.00 0.00 112268 1240 0.02 4224.00 0.00 0.00 find
# Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command
1417486740 18736 1.00 3.00 0.00 4.00 3 0.00 0.00 112268 1240 0.02 5192.00 0.00 0.00 find
# Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command
1417486741 18736 1.00 6.00 0.00 7.00 2 46.00 0.00 112400 1284 0.02 5464.00 0.00 0.00 find
# Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command
1417486742 18736 2.00 5.00 0.00 7.00 2 0.00 0.00 112268 1240 0.02 6892.00 0.00 0.00 find
# Time PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command
1417486743 18736 3.00 7.00 0.00 10.00 2 62.00 0.00 112268 1244 0.02 8170.00 0.00 0.00 find
$!
в bash захватывает pid последнего запущенного задания (в этом примере найти). Таким образом, вы можете обернуть свои задания cron в такой сценарий, записать данные на диск, а затем проанализировать их с помощью Excel, R или pandas.