Как определить требования к ВМ на основе исторических данных переходных процессов в 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.

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