Я пытаюсь написать сценарий, позволяющий мне использовать «стрессовое» приложение, не загружая ЦП в 100% случаев. Я разделил выделение памяти и выделение ЦП на две отдельные «стрессовые» команды, чтобы я мог постоянно нагружать память, в то время как нагружая ЦП только половину времени. Например,
#!/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`"
Однако по какой-то причине, когда я делаю это, я в конечном итоге вижу, что стресс на самом деле вызывается дважды каждый раз, когда я пытаюсь его запустить. Это означает, что в итоге я получаю два экземпляра стресса, выделяющего память, а затем два экземпляра стресса, которые связывают ЦП, затем останавливаются, затем связывают его и останавливаются и т. д.
Кроме того, когда цикл while завершается, мой kill приводит к уничтожению только одного из двух экземпляров стресса, которые выполнялись в фоновом режиме.
Что я вижу из команды ps -ef, так это то, что родительский pid одного «напряжения» является pid другого «напряжения». Поэтому, когда цикл while завершается, написанное мной kill приводит к уничтожению только одного из этих мемов, выделяющих стрессовые экземпляры, потому что второй не принадлежит сценарию.
Процессы во время выполнения скрипта:
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
...
Я избегаю шуток о сокращении стресса наполовину, но я был бы очень признателен за любые советы, которые остановят меня от удвоения стрессовых приложений, которые вызываются из моего сценария (и вызывают утечку памяти...). Спасибо!