我必须使用标准软件在Red Hat Linux 6.2下执行负载测试,即我无法在那里安装任何东西。它旨在考虑1000 10000 100000和1000000次迭代的总时间,总内存使用率和CPU百分比。
我必须测试的软件包括生产者和消费者。两者都是作为独立流程启动的。 我的想法是在批处理模式下使用 top linux命令。
我写了两个bash脚本:
#!/bin/bash
# $1 of repetitions
echo $$
java -jar jms-test-tool-0.0.1-SNAPSHOT.jar -S -N$1 -F./IN -Ddummy > ./input.log
java -jar jms-test-tool-0.0.1-SNAPSHOT.jar -C -N$1 -F./OUT -Ddummy > ./output.log
这个脚本的第一件事就是向标准输出发送他自己的 pid (echo $$)。 此脚本接收作为参数的迭代次数($ 1),该迭代次数用作java进程的参数(-N $ 1)。第一个java调用将向第二个进程发送$ 1次文件,第二个进程将读取$ 1次文件。
第二个脚本(master.sh)有一个for循环,其中包含所需的步骤(1000 10000 100000和1000000),在每次迭代中调用slave并接收slave的 pid 。
master.sh
#!/bin/bash
for steps in 1000 10000 100000 1000000
do
pid=`./slave.sh $steps `
echo "Slave pid is : $pid"
top -b -p$pid
done
使用顶部我想获取内存,时间和使用的%cpu,但是奴隶的 pid 不会出现在进程表中。
然后有两个问题。我在这做错了什么? 有人知道进行这项测试的更好方法吗?
答案 0 :(得分:1)
首先,“pid = prog
”只有在编写完成后才会在pid中输出prog。
你想做一些像“prog& pid = $!”的事情。让进程的pid启动到后台。然后,您可以执行任何您喜欢的操作来分析此过程,如果要暂停直到该过程终止,请使用“wait $ pid”。