在linux下加载测试(内存,总时间,%cpu)

时间:2012-02-01 08:33:08

标签: java shell testing pid

我必须使用标准软件在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 不会出现在进程表中。

然后有两个问题。我在这做错了什么? 有人知道进行这项测试的更好方法吗?

1 个答案:

答案 0 :(得分:1)

首先,“pid = prog”只有在编写完成后才会在pid中输出prog。

你想做一些像“prog& pid = $!”的事情。让进程的pid启动到后台。然后,您可以执行任何您喜欢的操作来分析此过程,如果要暂停直到该过程终止,请使用“wait $ pid”。