我被赋予了一项任务,需要拆分我们其中一台主虚拟机(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:
您实际上可以使用某种分析器或跟踪工具(即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(本例中为 find)。因此,您可以将 cron 作业包装在这样的脚本中,将数据记录到磁盘,然后使用 excel、R 或 pandas 进行分析。