Назад | Перейти на главную страницу

Как определить требования к ВМ на основе исторических данных переходных процессов в Linux?

Мне дали задание разделить службы на одной из наших основных виртуальных машин (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.