我正在尝试部署Apache Jmeter(5.1.1版),这是Pivotal cloud Foundry上的一个独立应用程序,但无法
我的windows机器上运行着Apache Jmeter(5.1.1版)设置,所以我试图将该目录/文件夹作为应用程序推送到PCF,但失败了,出现以下错误
C:Program Filesapache-jmeter-5.1.1>cf push apache-jmeter-5.1.1
Pushing from manifest to org dev-testing/ space Dev as user1...
Using manifest file C:Program Filesapache-jmeter-5.1.1manifest.yml
Getting app info...
readat C:Program Filesapache-jmeter-5.1.1binjmeter.bat: negative offset
FAILED
以下是我的manifest.yml文件:
---
applications:
- name: jmeter-5-1-pcf
path: bin/jmeter.bat
memory: 512m
instances: 1
我应该能够从Pivotal Cloud Foundry运行我的Jmeter脚本(我指的是test.jmx),如果我能看到部署在Pivotal CloudFoundry 上的Apache Jmeter的UI,那就太好了
好的,先简单回答。
readat C:\Program Files\apache-jmeter--5.1.1\bin\jmeter.bat:负偏移失败
它失败了,因为那是一个Windows蝙蝠文件,而您正试图在Linux上运行它。您可能希望运行.sh
启动脚本,并确保从JMeter Binaries页面推送.tgz
下载。
除此之外,它会变得模糊,这取决于你到底想运行什么?
您可以简单地从命令行运行jmeter
,就像这里一样。在这种情况下,你没有一个持续运行的服务器,这带来了一个问题,因为Cloud Foundry希望你的应用程序永远运行。
你可以通过使用任务来解决这个问题。您需要将JMeter作为一个应用程序推送,让它暂存,然后停止该应用程序。然后你可以用cf run-task
来执行jmeter -n -t plan.jmx ...
。
另一种选择是尝试远程运行JMeter,但这不会很好地工作,因为JMeter使用Java RMI,它不是基于HTTP的,因此需要使用Cloud Foundry TCP路由,或者大量使用cf ssh
来创建隧道。两者都不是很好的选择。
我建议使用cf cli。一个快速测试,以下对我有效。
- 从JMeter的网站下载
.tgz
二进制版本 -
添加以下
.cfignore
文件。它只是跳过你不需要的东西。NOTICE LICENSE README.md docs printable_docs licenses extras
-
添加文件
.profile
。这将设置几个env变量以使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这样的持久存储中。
希望能有所帮助!