CloudFoundry 环境上的 Java 应用的 Application container

简介: CloudFoundry 环境上的 Java 应用的 Application container

SAP Business Technology Platform CloudFoundry 环境的 Java 应用支持下列 4 种 Application container:

  • Tomcat
  • TomEE
  • TomEE 7
  • Java Main

Tomcat

默认情况下,使用 SAP Java buildpack 推送的 Web 应用程序在 Apache Tomcat 容器中运行。

应用程序可以使用应用程序 manifest.yml 文件中的 TARGET_RUNTIME 环境变量显式定义目标应用程序容器。

---
applications:
- name: <APP_NAME>
  ...
  env:
    TARGET_RUNTIME: tomcat

tomcat 应用运行时容器提供以下标准 API:


Java Servlets 3.1


Java ServerPages (JSP) 2.3


Expression Language (EL) 3.0


Debugging Support for Other Languages 1.0

Customizing the SAP Java Buildpack Defaults

SAP Java Buildpack 为 Tomcat 应用程序容器提供了一些默认配置,这些配置可以由应用程序使用资源配置功能进行自定义。

以下是应用程序可以自定义的所有占位符及其默认值的列表:

[图片]

配置 HTTP header size 的例子:

env:
  JBP_CONFIG_RESOURCE_CONFIGURATION: "['tomcat/conf/server.xml': {'connector.maxHttpHeaderSize':1024}]"

配置最大线程数的例子:

env:
  JBP_CONFIG_RESOURCE_CONFIGURATION: "['tomcat/conf/server.xml': {'connector.maxThreads':800}]"

开启 HTTP trace 的例子:

env:
  JBP_CONFIG_RESOURCE_CONFIGURATION: "['tomcat/conf/server.xml': {'connector.allowTrace':true}]"

TomEE

默认情况下,使用 SAP Java buildpack 推送的 Web 应用程序在 Apache Tomcat 容器中运行。

通过使用应用程序 manifest.yml 文件中的 TARGET_RUNTIME 环境变量,应用程序可以显式定义目标应用程序容器 - Apache TomEE。

---
applications:
- name: <APP_NAME>
  ...
  env:
    TARGET_RUNTIME: tomee

Java Options

可以通过定义 JBP_CONFIG_JAVA_OPTS 环境变量来配置 Java 属性。

在应用程序的 manifest.yml 文件中定义 JBP_CONFIG_JAVA_OPTS 环境变量。

---
applications:
- name: <app-name>
  memory: 512M
...
  env:
     JBP_CONFIG_JAVA_OPTS: 'java_opts: ''-DtestJBPConfig=^%PATH^% -DtestJBPConfig1="test test" -DtestJBPConfig2="%PATH%"'''

使用 Cloud Foundry 命令行界面 (cf CLI) 的 cf set-env 命令定义 JBP_CONFIG_JAVA_OPTS 环境变量。


cf set-env myapp JBP_CONFIG_JAVA_OPTS “[java_opts: '-DtestJBPConfig=%PATH% -DtestJBPConfig1=“test test” -DtestJBPConfig2=”%PATH%"’]"


Java Out Of Memory Behavior

当 JVM 遇到终端故障时,SAP Java Buildpack 将堆的直方图打印到日志中。 除此之外,如果应用程序绑定到名称或标签包含 heap-dump 的卷服务,也会生成一个堆转储文件并将其存储在挂载的卷中。


ERR Stopping VM due to OutOfMemoryError

ERR Resource exhaustion event: the JVM was unable to allocate memory from the heap.

ERR ResourceExhausted! (1/0)

OUT | Instance Count | Total Bytes | Class Name |

OUT | 30130 | 5556616 | [C |

OUT | 866 | 2485600 | [B |

OUT | 29215 | 701160 | Ljava/lang/String; |

OUT | 3971 | 449528 | Ljava/lang/Class; |

OUT | 9998 | 319936 | Ljava/util/HashMapN o d e ; ∣ O U T ∣ 3624 ∣ 318912 ∣ L j a v a / l a n g / r e f l e c t / M e t h o d ; ∣ O U T ∣ 6429 ∣ 205728 ∣ L j a v a / u t i l / c o n c u r r e n t / C o n c u r r e n t H a s h M a p Node; | OUT | 3624 | 318912 | Ljava/lang/reflect/Method; | OUT | 6429 | 205728 | Ljava/util/concurrent/ConcurrentHashMapNode;∣OUT∣3624∣318912∣Ljava/lang/reflect/Method;∣OUT∣6429∣205728∣Ljava/util/concurrent/ConcurrentHashMapNode; |

OUT | 2821 | 171472 | [Ljava/lang/Object; |

OUT | 40 | 117328 | [J |

OUT | 750 | 111096 | [Ljava/util/HashMapN o d e ; ∣ O U T ∣ 5618 ∣ 89888 ∣ L j a v a / l a n g / O b j e c t ; ∣ O U T ∣ 1054 ∣ 74048 ∣ [ L j a v a / l a n g / S t r i n g ; ∣ O U T ∣ 696 ∣ 62552 ∣ [ I ∣ O U T ∣ 59 ∣ 51920 ∣ [ L j a v a / u t i l / c o n c u r r e n t / C o n c u r r e n t H a s h M a p Node; | OUT | 5618 | 89888 | Ljava/lang/Object; | OUT | 1054 | 74048 | [Ljava/lang/String; | OUT | 696 | 62552 | [I | OUT | 59 | 51920 | [Ljava/util/concurrent/ConcurrentHashMapNode;∣OUT∣5618∣89888∣Ljava/lang/Object;∣OUT∣1054∣74048∣[Ljava/lang/String;∣OUT∣696∣62552∣[I∣OUT∣59∣51920∣[Ljava/util/concurrent/ConcurrentHashMapNode;|

OUT | 1063 | 51024 | Ljava/util/HashMap; |

OUT | 854 | 40992 | Lorg/apache/tomcat/util/modeler/AttributeInfo;|


相关文章
|
18小时前
|
SQL 安全 Java
Java Web应用的安全防护与攻防深度剖析
Java Web应用的安全防护与攻防深度剖析
|
19小时前
|
负载均衡 安全 Java
Java中的无服务(Serverless)应用最佳实践
Java中的无服务(Serverless)应用最佳实践
|
18小时前
|
缓存 Java 数据库
实战:构建高性能Java Web应用的技术方案
实战:构建高性能Java Web应用的技术方案
|
20小时前
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【7月更文挑战第1天】在分布式系统中,Java分布式锁解决了多节点共享资源的同步访问问题,确保数据一致性。常见的实现包括Redis的SETNX和过期时间、ZooKeeper的临时有序节点、数据库操作及Java并发库。优化策略涉及锁超时、续期、公平性及性能。选择合适的锁策略对高并发系统的稳定性和性能至关重要。
10 0
|
23小时前
|
Java
解析Java中的反射机制应用
解析Java中的反射机制应用
|
1天前
|
Java 数据处理 数据库
Java中equalsIgnoreCase方法的应用
Java中equalsIgnoreCase方法的应用
|
1天前
|
Java
Calendar类在Java中的高级应用与使用技巧
Calendar类在Java中的高级应用与使用技巧
|
2月前
|
Java 关系型数据库 应用服务中间件
阿里云RDS购买Linux完整过程——安装java环境并跑起来tomcat
阿里云RDS购买Linux完整过程——安装java环境并跑起来tomcat
64 0
|
2月前
|
Ubuntu Oracle Java
百度搜索:蓝易云【Ubuntu安装Java环境】
现在,你已经成功在Ubuntu上安装了Java环境。你可以在终端中运行Java程序或编译Java源代码。请注意,Ubuntu默认安装的是OpenJDK,如果需要Oracle JDK等其他Java版本,可以参考相应的安装文档。
45 3
|
2月前
|
Java 编译器 开发工具
最新IntelliJ IDEA下载安装以及Java环境搭建教程(含Java入门教程)
最新IntelliJ IDEA下载安装以及Java环境搭建教程(含Java入门教程)
244 0