gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:31:00 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本,以允许我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com