4

我有一个网络服务器,我目前正在对 CPU 使用率进行基准测试。我所做的实际上是运行一个进程来向服务器发送请求,然后运行以下 bash 脚本来确定 CPU 使用率:

#! /bin/bash

for (( ;; ))
do

    echo "`python -c 'import time; print time.time()'`, `ps -p $1 -o '%cpu' | grep -vi '%CPU'`"
    sleep 5
done

能够在 Python 中执行此操作会很好,因此我可以在一个脚本中运行它,而不必运行两个。我似乎找不到任何独立于平台(或至少独立于 linux 和 OS X 的平台)的方式来获取 Python 中的 ps 输出,而无需实际启动另一个进程来运行该命令。我可以做到这一点,但如果有一个 API 可以做到这一点,那就太好了

有没有办法做到这一点,或者我将不得不启动外部脚本?

4

4 回答 4

3

您可以查看有关使用 Python 解析 ps 输出的这个问题。

答案之一建议使用PSI python 模块。虽然这是一个扩展,所以我真的不知道这对你来说有多合适。

它还在问题中显示了如何使用 python 调用 ps 子进程:)

于 2010-08-24T17:45:13.063 回答
3

我的偏好是做这样的事情。

collection.sh

for (( ;; ))
do
    date; ps -p $1 -o '%cpu'
done

然后collection.sh >someFile在“用请求猛击服务器”时运行。

collection.sh然后在服务器被猛击之后杀死这个操作。最后,您将获得包含日期戳和 CPU 值日志的文件。

analysis.py

import datetime
with( "someFile", "r" ) as source:
    for line in source:
        if line.strip() == "%CPU": continue
        try:
            date= datetime.datetime.strptime( line, "%a %b %d %H:%M:%S %Z %Y" )
        except ValueError:
            cpu= float(line)
            print date, cpu # or whatever else you want to do with this data.
于 2010-08-24T17:49:10.510 回答
1

您可以使用PySNMP查询 CPU 使用率。这具有能够从远程计算机进行测量的额外好处。就此而言,您可以安装 Zenoss 或其同类的 VM,并让它为您进行监控。

于 2010-08-24T17:46:58.427 回答
1

如果您不想调用 PS,那么为什么不尝试使用 /proc 文件系统。我认为您可以编写 python 程序并从 /proc 文件系统中读取文件并提取您想要的数据。我这样做是使用perl,通过在 perl 脚本中编写内联 C 代码。我认为你也可以在 python 中找到类似的方法。我认为它是可行的,但是你需要通过 /prof 文件系统,并且需要弄清楚你想要什么以及如何做得到它。 http://www.faqs.org/docs/kernel/x716.html 上面的 URL 可能会给出一些初步的推动。

于 2010-08-26T10:50:33.993 回答