反复拨打短命子女的父进程会随着时间的推移消耗越来越多的CPU

时间:2014-09-08 07:52:22

标签: linux bash cpu-usage multicore

我有一个bash脚本,它在循环中执行以下操作:

  • 睡眠0.04秒
  • 在同一局域网上ping另一台主机,其中count = 1(仅发送一个echo请求),如果主机没有响应,则超时限制为1秒。

问题是脚本在我调用它时需要大约1%的CPU,随着时间的推移,让我们说2-3小时之后,我看到相同的脚本占用了大约10%的CPU并略微消耗了更多随着时间的推移会有更多的CPU。

我在两种环境中使用此脚本:

  • 只有一个CPU /核心的VMware主机。
  • 带有一个四核CPU(Intel i7)的真机。
  • 在x86上使用Linux内核v2.6.32。

现在,我还注意到如果我尝试ping的主机没有响应(所以ping超过1秒后返回),问题就不会发生。 只有当LAN上的主机响应并且在回复得到回复后ping快速返回时才会出现问题。

使用VMWare,我根本没有观察到这个问题。无论其他主机是否响应。因此,我认为它实际上与重要的多核环境有关。

此外,' strace -c'显示bash脚本占用了waitpid()的99% - 这意味着它会休眠并等待其子进程(sleep& ping)退出。

#!/bin/bash

if [ "$1" == "" ]; then
    echo -e "\nUsage: $0 <target host>\n"
    exit 1
fi

TARGET_HOST=$1

while (true); do
    sleep 0.04
    ping $TARGET_HOST -W 1 -c 1 > /dev/null 2>&1
done

0 个答案:

没有答案