Как определить требования к ВМ на основе исторических данных переходных процессов в Linux?
Передо мной была поставлена задача разбить службы на одну из наших основных виртуальных машин (Amazon EC2) и соответствующие дополнительные виртуальные машины для удовлетворения потребностей служб.
Типы сервисов, с которыми я имею дело, это в основном php cronjobs, которые совпадают с нашим веб-приложением. Они требуют значительных ресурсов и ресурсов ввода-вывода, поэтому их необходимо перенести в другое место.
Эти задания не имеют согласованных идентификаторов PID, они запускаются и исчезают по мере необходимости, поэтому что-то вроде "поиска" для вывода аргументов из ps - единственный способ сохранить эти данные. Другими словами, то, что является последовательным, это поиск для процесса следующим образом: ps -eo pid,pcpu,%mem,vsize,args | grep "php[ ]/path/to/script.php"
Однако некоторые процессы запускаются только в течение нескольких секунд, а затем умирают.
Цель состоит в том, чтобы мне нужно было разобраться, как лучше подготовить виртуальные машины на основе ресурсов, которые эти процессы фактически используют, чтобы сэкономить деньги.
Процитирую: "Оцените использование сервера на основе среднего значения за 1 неделю"
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.