【问题标题】:cannot start a cloud foundry jetty app无法启动 Cloud Foundry 码头应用程序
【发布时间】:2012-07-19 16:35:06
【问题描述】:

我正在尝试在 Cloud Foundry 上启动一个 jetty runner 应用程序。代码是

https://github.com/simbo1905/ZkToDo2

可以用

在本地启动
java -Djetty.host=localhost -Djetty.port=8080 -DDATABASE_URL=jdbc:postgresql://postgres:postgres@localhost/postgres -jar jetty-runner-jmx.jar zktodo2.war

所以我用

创建了一个 postgresql
vmc create-service postgresql pgsql

当将 jar 和 war 压缩成 zip 然后尝试部署到云代工厂时,它给了我一个内存不足的错误。是什么赋予了?

simbo$ vmc push zktodo2 --path=cf.zip 
Detected a Standalone Application, is this correct? [Yn]: Y
1: java
2: node
3: node06
4: ruby18
5: ruby19
Select Runtime [java]: \1
Selected java
Start Command: java -Djetty.host=${VCAP_APP_HOST} -Djetty.port=${VCAP_APP_PORT} -DDATABASE_URL=jdbc:postgresql://postgres:postgres@localhost/postgres -jar jetty-runner-jmx.jar zktodo2.war
Application Deployed URL [None]: 
Memory reservation (128M, 256M, 512M, 1G, 2G) [512M]: 1G
How many instances? [1]: 
Bind existing services to 'zktodo2'? [yN]: y
1: pgsql
Which one?: 1
Create services to bind to 'zktodo2'? [yN]: 
Would you like to save this configuration? [yN]: y
Manifest written to manifest.yml.
Creating Application: OK
Binding Service [pgsql]: OK
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (0K): OK   
Push Status: OK
Staging Application 'zktodo2': OK                                               
Starting Application 'zktodo2': .
Error: Application [zktodo2] failed to start, logs information below.

====> /logs/stderr.log <====

Could not create the Java virtual machine.

====> /logs/stdout.log <====

  Error occurred during initialization of VM
  Could not reserve enough space for object heap


  Delete the application? [Yn]: 

什么给了?

【问题讨论】:

    标签: cloud-foundry


    【解决方案1】:

    Cloud Foundry 将您选择的内存分配的 -Xmx 设置添加到 JAVA_OPTS 环境变量中,您需要将其包含在启动命令中 (java $JAVA_OPTS -Djetty....)。或者,您可以在启动命令中包含 -Xmx。

    【讨论】:

    • 谢谢詹妮弗,我试图按照你的例子。这让我走得更远。现在我收到关于“猜测的”postgres url 的投诉。我收到一个连接被拒绝连接到我提供的 jdbc url,它是“-DDATABASE_URL=postgres://postgres:postgres@localhost/postgres”。我查看了 spring+postgres 示例文档,但实际上在 spring 配置中有一个 hsqldb 数据库,而不是实际的 postgresql 连接。
    • 该应用程序是一个 zk 框架演示,可在 openshift 和 heroku 上运行。您是否有机会腾出一些周期将其移植到cf?作为回报,我会向 zk 社区广播。
    • 你没有得到 Spring “autoreconfig”,因为你正在部署一个独立的应用程序。您需要查看环境变量 VCAP_SERVICES 以获取 postgres 连接信息。例如,查看gho-env.cloudfoundry.com 并检查 VCAP_SERVICES 变量。
    • 任何人都有一个spring util的例子来使VCAP_SERVICES很容易用作spring config?
    • cloudfoundry-runtime java 库提供了用于创建数据源 () 的 Spring 命名空间。如果这不符合您的需要,该库还包含解析 VCAP_SERVICE 信息的方法。这是一个小的 sample,它使用命名空间连接到 Rabbit 服务。
    【解决方案2】:

    我确实使用 jetty-runner 部署了 ZkToDo2 on cloudfoundry。 这是我使用的启动命令:

    java -Djava.io.tmpdir=. -Dorg.apache.jasper.compiler.disablejsr199=true -Xmx512M -jar jetty-runner-jmx.jar --port ${VCAP_APP_PORT} zktodo2.war
    

    为了使 DATABASE_URL 与 cloudfoundry 提供的 postgresql 数据库的连接参数相匹配,我不得不对应用程序进行一些小的修改。

    这里是pull request

    【讨论】:

    • 感谢 Hugues,我已将配置分解为将 cloudfoundry env 变量解析为单独的配置 github.com/simbo1905/ZkToDo2/blob/master/cloudforge/… 然后添加了一个 maven 配置文件,该配置文件在该配置中交换并在使用“mvn”构建时打包必要的 jar -P cloudfoundry 包"
    • 我还把Jennifer推荐的$JAVA_OPTS放到manifest.yml中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多