我在 ec2 实例上运行一个 Python 脚本,该脚本会将行插入另一个实例的数据库中。在 ec2 的监控中,我看到 CPU 利用率为 100%,而 top 仅显示 Python 进程的利用率为 20%。top 中缺少什么?网络开销?
答案1
在虚拟化环境中,所暴露的数据top
通常不足或具有误导性,例如亚马逊 EC2报告的百分比取决于您的实例类型和底层处理器核心利用率(通常与您从虚拟机管理程序中看到的虚拟化硬件不匹配),以及其他因素 - 您所看到的结果很可能是由相应的CPU 窃取时间正如现在大多数相关的 Unix/Linux 监控工具所揭示的那样 - 例如参见sar
或中的列 %steal 或 st top
:
st——偷时间
虚拟机管理程序从该虚拟机“窃取”用于其他任务(例如运行另一个虚拟机)的 CPU 数量。
博客文章EC2 监控:CPU 被盗案例对这个主题进行了很好的探索和说明:
当 top 命令显示 CPU 占用率为 40%,但 CloudWatch 却显示服务器已达到 100% 时,您会选择哪一方?答案很简单(CloudWatch 是正确的,top 不正确)[...]
请注意,此虚拟机管理程序指标似乎仅在 Unix/Linux 系统上可(轻松)访问,但似乎在 Windows 上尚不可观察到,请参阅我的问题Windows 中是否存在与 Unix 中的‘CPU 窃取时间’相当的功能?有关此问题的更多信息。
答案2
Amazon 可能会检查负载,而不是 TOP 的百分比使用率。如果您在 CPU 上有两个进程,则它们的利用率可以达到 20%,但负载可以达到 2。