如何根据 Linux 上瞬态过程的历史数据来指定虚拟机要求?

如何根据 Linux 上瞬态过程的历史数据来指定虚拟机要求?

我被赋予了一项任务,需要拆分我们其中一台主虚拟机(Amazon EC2)上的服务,并适当添加虚拟机以满足服务需求。

我处理的服务类型主要是 php cronjobs,与我们的 web 应用程序一致。它们占用大量资源和 IO,因此需要将它们卸载到其他地方。

这些作业没有一致的 PID,它们根据需要出现和消失,因此像“grepping”ps 的参数输出这样的操作是我能想到的唯一存储这些数据的方法。换句话说,一致的操作是像这样对进程进行 grepping:ps -eo pid,pcpu,%mem,vsize,args | grep "php[ ]/path/to/script.php"但是,有些进程只运行了几秒钟,然后就死了。

目标是,我需要了解如何根据这些流程实际使用的资源来最佳地配置虚拟机,以节省资金。

引用:“根据一周的平均值估算服务器使用情况”

答案1

说实话,这个请求对我来说有点可疑。难道你不能移动一些东西,看看新系统上的负载是多少吗?话虽如此,还是谈谈你的实际问题。

您需要找出进程(而不是整个系统)的资源使用情况。

选项 1:
您实际上可以使用某种分析器或跟踪工具(即perfstrace)启动进程,并获得相当准确的数据。这可能需要大量工作,并且可能对于估计一堆进程的总量来说有些过度。

选项 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(本例中为 find)。因此,您可以将 cron 作业包装在这样的脚本中,将数据记录到磁盘,然后使用 excel、R 或 pandas 进行分析。

相关内容