bash - 在 Bash 脚本中,每次调用 'stress' 应用程序都会运行两次。导致内存泄漏

标签 bash testing scripting background stress

我正在尝试编写一个脚本,以允许我在 100% 的时间不占用 CPU 的情况下使用“压力”应用程序。我将内存分配和 CPU 分配分成两个单独的“压力”命令,这样我就可以连续对内存施加压力,而对 CPU 施加压力的时间仅为 1/2。例如,

#!/bin/bash
set -m

/usr/local/bin/stress --vm 1 --vm-bytes 100MB &
while [ thing that evaluates as true ]
do
  /usr/local/bin/stress --cpu 1 --timeout 5s
  /usr/bin/sleep 5s
done

echo "Running jobs at end of script are: `jobs -p`"
echo `jobs -p` | /usr/bin/xargs kill -9
echo "After trying to kill them, running jobs are now: `jobs -p`"

但是,出于某种原因,当我这样做时,我最终发现每次尝试运行 stress 时实际上都会调用两次。这意味着我最终得到两个压力分配内存实例,然后是两个占用 CPU 的压力实例,然后停止,然后占用,然后停止,等等。

此外,当 while 循环退出时,我的 kill 最终只会杀死在后台运行的两个压力实例之一。

我从 ps -ef 命令中可以看出,一个“压力”的父 pid 是另一个“压力”的 pid。因此,当 while 循环退出时,我编写的 kill 最终只会杀死这些 mem 分配压力实例之一,因为第二个不属于脚本。

脚本运行过程:

linux:~ # ps -ef | egrep "stress|bash"
...
root     23776 20979  0 14:32 pts/0    00:00:00 /bin/bash ./base_case.sh
root     23785 23776  0 14:32 pts/0    00:00:00 stress --vm 1 --vm-bytes 100MB
root     23788 23785  0 14:32 pts/0    00:00:16 stress --vm 1 --vm-bytes 100MB
root     23802 23776  0 14:32 pts/0    00:00:00 stress --cpu 1 --timeout 5s
root     23803 23802  0 14:32 pts/0    00:00:01 stress --cpu 1 --timeout 5s
...

脚本的输出似乎暗示每次只调用一个“压力”:

linux:~ # ./base_case.sh 
stress: info: [23785] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: info: [23802] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
stress: info: [23802] successful run completed in 5s
Running jobs at end of script are: 23785
./base_case.sh: line 14: 23785 Killed /usr/local/bin/stress --vm 1 --vm-bytes 100MB
After trying to kill them, running jobs are now: 

脚本完成后的处理:

linux:~ # ps -ef | egrep "stress|bash"
...
root     23788     1  0 14:32 pts/0    00:00:58 stress --vm 1 --vm-bytes 100MB
...

我会避免任何关于将我的压力减半的笑话,但我真的很感激任何可以阻止我加倍使用从我的脚本调用的压力应用程序的提示(并导致内存泄漏......) .谢谢!

最佳答案

它不是创建两个实例,它只是创建一个线程。您可以看到 CPU 压力调用的 PID 是 23802,这是 ps 输出中第二个条目的父 PID。

我建议使用带有 TreeView (F5) 的 htop,在那里您可以轻松地看到层次结构。 (也许 top 也有 TreeView )

关于bash - 在 Bash 脚本中,每次调用 'stress' 应用程序都会运行两次。导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567334/

相关文章:

java - 软件测试工具 - 用于 java

linux - 函数在脚本 shell 中不起作用

bash - 无法在 bash 脚本中设置变量

bash - `make` 是否在没有重定向的情况下回显到标准错误?

linux - 如何在 awk 中使用 cat 命令

reactjs - 使用 Enzyme.usestate 错误更新模拟输入更改时的错误

Shell 脚本 - 将子字符串保存到变量

bash - 终端在启动时为 PATH 变量显示 'no such file or directory'

linux - 在不在 bash 中打开文件的情况下对文件进行理智的更改?

testing - 如何在 Testrun 期间获取 WebDriver 版本?