0

我正在尝试部署 Apache-Jmeter(版本 5.1.1),这是 Pivotal cloud Foundry 上的独立应用程序,但无法

我的 Windows 机器上运行了 Apache-Jmeter(版本 5.1.1)设置,因此我尝试将该目录/文件夹作为应用程序推送到 PCF,但失败并出现以下错误

C:\Program Files\apache-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 Files\apache-jmeter-5.1.1\manifest.yml
Getting app info...

readat C:\Program Files\apache-jmeter-5.1.1\bin\jmeter.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 Cloud Foundry 上的 Apache-Jmeter 的 UI 可能会很好

4

1 回答 1

2

好的,先简单回答一下。

读取 C:\Program Files\apache-jmeter-5.1.1\bin\jmeter.bat:负偏移失败

它失败了,因为那是一个 Windows bat 文件,而您正试图在 Linux 上运行它。您可能希望运行.sh启动脚本,并确保.tgzJMeter 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。快速测试,以下对我有用。

  1. .tgz从 JMeter 的网站下载二进制版本。
  2. 添加以下.cfignore文件。它只是跳过你不需要的东西。

    NOTICE
    LICENSE
    README.md
    docs
    printable_docs
    licenses
    extras
    
  3. 添加一个文件.profile。这将设置几个环境变量以使 JMeter 工作。

    export JAVA_HOME=.java-buildpack/open_jdk_jre/
    export PATH=$PATH:$JAVA_HOME/bin
    
  4. 将您的.jmx文件放入 JMeter 目录。

  5. 然后运行cf push -b java_buildpack -m 1G -c 'sleep 9999' -u process --no-route jmeter-cli
  6. 该应用程序应该启动并且什么都不做,立即运行cf stop jmeter-cli。您只需要这样做,应用程序就会分阶段。
  7. 然后运行cf run-task jmeter-cli './bin/jmeter -n -t your-test.jmx'
  8. 运行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 等持久存储。

希望有帮助!

于 2019-09-09T02:10:48.043 回答