好的,先简单回答一下。
读取 C:\Program Files\apache-jmeter-5.1.1\bin\jmeter.bat:负偏移失败
它失败了,因为那是一个 Windows bat 文件,而您正试图在 Linux 上运行它。您可能希望运行.sh
启动脚本,并确保.tgz
从JMeter Binaries 页面推送下载。
除此之外,它变得模糊不清,取决于你到底想运行什么?
你可以简单地从命令行运行jmeter
,就像这里。在这种情况下,您没有持久运行的服务器,这会带来问题,因为 Cloud Foundry 期望您的应用程序永远运行。
您可以改用任务来解决此问题。您需要将 JMeter 作为应用程序推送,让它暂存,然后停止应用程序。之后你可以cf run-task
执行jmeter -n -t plan.jmx ...
.
另一种选择是尝试运行JMeter remote,但这不会很好地工作,因为 JMeter 使用 Java RMI,它不是基于 HTTP 的,因此它需要使用 Cloud Foundry TCP 路由,或者大量使用cf ssh
来制作隧道。两者都不是很好的选择。
我建议使用 cf cli。快速测试,以下对我有用。
.tgz
从 JMeter 的网站下载二进制版本。
添加以下.cfignore
文件。它只是跳过你不需要的东西。
NOTICE
LICENSE
README.md
docs
printable_docs
licenses
extras
添加一个文件.profile
。这将设置几个环境变量以使 JMeter 工作。
export JAVA_HOME=.java-buildpack/open_jdk_jre/
export PATH=$PATH:$JAVA_HOME/bin
将您的.jmx
文件放入 JMeter 目录。
- 然后运行
cf push -b java_buildpack -m 1G -c 'sleep 9999' -u process --no-route jmeter-cli
。
- 该应用程序应该启动并且什么都不做,立即运行
cf stop jmeter-cli
。您只需要这样做,应用程序就会分阶段。
- 然后运行
cf run-task jmeter-cli './bin/jmeter -n -t your-test.jmx'
。
- 运行
cf logs --recent jmeter-cli
并查看结果。或者cf logs jmeter-cli
在第二个终端中运行并在任务运行时流式传输它们。
示例输出:
2019-09-08T22:06:35.72-0400 [CELL/0] OUT Cell e5f61515-c164-4c36-9686-faa2a0a363ed creating container for instance 29a1deb6-04c1-4105-91f8-0a8a5dadf367
2019-09-08T22:06:36.56-0400 [CELL/0] OUT Cell e5f61515-c164-4c36-9686-faa2a0a363ed successfully created container for instance 29a1deb6-04c1-4105-91f8-0a8a5dadf367
2019-09-08T22:06:41.18-0400 [APP/TASK/4e6e54e6/0] ERR Sep 09, 2019 2:06:41 AM java.util.prefs.FileSystemPreferences$1 run
2019-09-08T22:06:41.18-0400 [APP/TASK/4e6e54e6/0] ERR INFO: Created user preferences directory.
2019-09-08T22:06:41.61-0400 [APP/TASK/4e6e54e6/0] OUT Creating summariser <summary>
2019-09-08T22:06:41.61-0400 [APP/TASK/4e6e54e6/0] OUT Created the tree successfully using Test Google.jmx
2019-09-08T22:06:41.61-0400 [APP/TASK/4e6e54e6/0] OUT Starting the test @ Mon Sep 09 02:06:41 UTC 2019 (1567994801615)
2019-09-08T22:06:41.63-0400 [APP/TASK/4e6e54e6/0] OUT Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
2019-09-08T22:06:43.66-0400 [APP/TASK/4e6e54e6/0] OUT summary = 30 in 00:00:02 = 19.9/s Avg: 99 Min: 60 Max: 450 Err: 0 (0.00%)
2019-09-08T22:06:43.66-0400 [APP/TASK/4e6e54e6/0] OUT Tidying up ... @ Mon Sep 09 02:06:43 UTC 2019 (1567994803664)
2019-09-08T22:06:43.66-0400 [APP/TASK/4e6e54e6/0] OUT ... end of run
2019-09-08T22:06:44.39-0400 [APP/TASK/4e6e54e6/0] OUT Exit status 0
唯一需要提及的是,您可以使用该-l
选项并将输出写入 JTL 文件。如果你这样做,它将写入本地文件系统,当你的任务结束时,该文件将消失,你将无法获取它。
如果您需要将结果写入 JTL 文件,那么您还需要修改运行的任务命令,在完成 JMeter 后,将结果文件上传到 S3 等持久存储。
希望有帮助!