说明,此测试不完备,只是一个简单的集成,详细的需要进行jvm 参数的调整

环境准备

pom.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.6.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.dalong.webapi</groupId>
 <artifactId>webapi</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>webapi</name>
 <description>Demo project for Spring Boot</description>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>com.netflix.servo</groupId>
   <artifactId>servo-core</artifactId>
   <version>0.12.7</version>
  </dependency>
  <dependency>
   <groupId>org.jolokia</groupId>
   <artifactId>jolokia-core</artifactId>
   <version>1.6.2</version>
  </dependency>
  <dependency>
   <groupId>io.micrometer</groupId>
   <artifactId>micrometer-registry-prometheus</artifactId>
  </dependency>
  <dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.9.2</version>
  </dependency>
  <dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>20.0</version>
  </dependency>
  <dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.9.2</version>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>
 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>
  • docker-compose 环境
    主要集成了zulu、oracle、openjdk 以及granfana,prometheus
 
version: "3"
services: 
  zulu:
    build: 
      context: ./zulu
      dockerfile: Dockerfile
    ports: 
    - "8080:8080"
  oracle:
    build: 
      context: ./oracle
      dockerfile: Dockerfile
    ports: 
    - "8081:8080"
  openjdk:
    build: 
      context: ./openjdk
      dockerfile: Dockerfile
    ports: 
    - "8082:8080"
  grafana:
    image: grafana/grafana
    ports:
    - "3000:3000"
  prometheus:
    image: prom/prometheus
    volumes:
    - "./prometheus.yml:/etc/prometheus/prometheus.yml"
    ports:
    - "9090:9090" 
  • 各jvm 运行dockerfile
    zulu Dockerfile
 
FROM azul/zulu-openjdk-alpine:8u222
LABEL AUTHOR="dalongrong"
LABEL EMAIL="1141591465@qq.com"
WORKDIR /
COPY jmx_prometheus_javaagent-0.12.0.jar /jmx_prometheus_javaagent-0.12.0.jar
COPY webapi-0.0.1-SNAPSHOT.jar /webapi-0.0.1-SNAPSHOT.jar
COPY docker-entrypiont.sh /docker-entrypiont.sh
RUN chmod +x /docker-entrypiont.sh
EXPOSE 8080 9999 30384
ENTRYPOINT [ "/docker-entrypiont.sh" ]

docker-entrypiont.sh:

#!/bin/sh
java -jar /webapi-0.0.1-SNAPSHOT.jar
 

openjdk以及oracle 的都是类似,主要的不通就是基础镜像

FROM frolvlad/alpine-java:jdk8-slim
FROM openjdk:8u222-jdk

几个说明,因为spring boot 已经包含了jmx 的暴露,所以对于jmx 的处理就没有多加复杂的处理,项目中包含了一个jmx-exporter
如果需要可以添加使用

  • grafana dashborad 配置
    可以参考项目中的grafana/dashboard.json
  • prometheus 配置
    使用静态配置prometheus.yml 文件
 
scrape_configs:
  - job_name: zulu
    metrics_path: /actuator/prometheus
    scrape_interval: 10s
    scrape_timeout: 10s
    static_configs:
      - targets: ['zulu:8080']
  - job_name: openjdk
    metrics_path: /actuator/prometheus
    scrape_interval: 10s
    scrape_timeout: 10s
    static_configs:
      - targets: ['openjdk:8080']
  - job_name: oracle
    scrape_interval: 10s
    scrape_timeout: 10s
    metrics_path: /actuator/prometheus
    static_configs:
      - targets: ['oracle:8080']
 
ab -c 10 -n 100000 http://localhost:port/actuator/env

为了同时运行,使用了一个简单的shell start.sh

#!/usr/bin/sh
rm -rf jdk/*.log
for file in jdk/*; do
 nohup bash $file > $file.log &
done

启动&&测试

  • 启动
docker-compose up -d
cd load-test && sh start.sh
  • 配置granfana

    需要配置premetheus server 地址,以及初始化中账户的处理

加载dashborad json 文件,在grafana/dashboard.json

  • prometheus 效果

  • granfana dashborad 的参数效果

  • 简单说明
    因为测试上的很随意实际上是有问题的,但是zulu 优化上的openjdk 总体还是很不错的,连接有一篇别人的测试,可以参考,但是也是不完备的。

参考资料

https://github.com/rongfengliang/zulu-openjdk-openjdk-oracle-jdk
https://technology.amis.nl/2018/11/23/comparing-jvm-performance-zulu-openjdk-openjdk-oracle-jdk-graalvm-ce/

通过granfana 以及prometheus 比较zulu 、oracle、openjdk 等jvm 运行的更多相关文章

  1. Ubuntu 18.04 上使用 OpenJDK 安装并运行 Tomcat

    在Linux上安装与卸载JDK和JRE,两种常用方法: 一.通过 apt-get 命令在线进行安装与卸载(会自动配置好环境变量) 二.通过下载并解压 .tar.gz 包进行手动安装与手动卸载(需要手动 ...

  2. Oracle开始从Java运行时中移除JAR包

    早在2012年8月,在Java平台首席架构师Mark Reinhold宣布模块化项目Jigsaw之后不久,JEP 162这一题为“准备模块化”的提案就指出,在Jigsaw项目中为模块化系统开发的代码不 ...

  3. 不安装oracle客户端,如何运行sqlplus

    1.软件下载 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载如下三个包: oracle-instantc ...

  4. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  5. 使用 Prometheus 监控minio 性能指标信息&&docker-compose 方式运行

    minio server 已经支持Prometheus 了,对于系统的运行参数我们可以方便.实时的查看 运行使用docker-compose docker-compose 文件 version: &q ...

  6. 在k8s集群中,利用prometheus的jmx_exporter进行tomcat的JVM性能监控,并用grafana作前端展示

    查找了很多文档,没有完全达到我要求的, 于是,作了一定的调整,成现在这样. 操作步骤如下: 一,准备好两个文件. jmx_prometheus_javaagent-0.3.1.jar jmx_expo ...

  7. Oracle 11g 递归+ exists运行计划的改变

    有一个递归查询在10g上执行非常快,但在11g上执行不出来. SQL> select * from v$version; BANNER ----------------------------- ...

  8. Oracle中表连接的运行原理

    Oracle优化器会自动选择以下三种方式的一种运行表连接,但在数据环境上配合强化选择合适的方式或强制使用某种方式是SQL优化的需要:      NESTED LOOP 对于被连接的数据子集较小的情况, ...

  9. oracle建立job定期运行存储过程

    1 首先查看 SQL> show parameter job NAME TYPE VALUE------------------------------------ ----------- -- ...

随机推荐

  1. Python与MogoDB交互

    睡了大半天,终于有时间整理下拖欠的MongoDB的封装啦. 首先我们先进行下数据库的连接: conn = MongoClient('localhost',27017) # 建立连接 result = ...

  2. Linux 6 修改ssh默认远程端口号

    linux 默认的ssh远程端口是22,有时默认端口会遭到别有用心的人们扫描或攻击,为了时我们的系统更加安全那就需要修改远程端口号 操作步骤:1.修改ssh_config配置文件 vim /etc/s ...

  3. Fiddler-在fiddlerscript中修改某个请求的请求头内容

    1.进入  OnBeforeRequest函数 在里面添加如下代码 if(oSession.fullUrl.Contains("url")){// //headers中添加测试参数 ...

  4. Thymeleaf前后端分页查询

    分页查询是一个很常见的功能,对于分页也有很多封装好的轮子供我们使用. 比如使用mybatis做后端分页可以用Pagehelper这个插件,如果使用SpringDataJPA更方便,直接就内置的分页查询 ...

  5. 将windows共享文件夹挂载到Linux

    今天想用docker部署下 .net core的 服务,需要把代码文件从windows传到linux,以前一直都是拖拽的,这次安装的系统没有图形界面, 所以到网上找到了下面的这种方法,将共享文件夹挂载 ...

  6. 英语DYAMAUND钻石DYAMAUND单词

    dyamaund and the English words dyamaund The Vertu of the Dyamaund": Gemstones, Knowledge and Va ...

  7. 如何创建SAP Cloud Platform Process Integration runtime服务

    登录SAP Cloud Platform cockpit,进入subaccount的Service marketplace界面,选择process integration runtime: 点击ins ...

  8. DOS命令_查询某个端口的占用情况并释放

    >netstat -aon | findstr “80″Proto   Local Address           Foreign Address         State         ...

  9. python测量函数运行时间长度

    python测试函数运行时间长度的方法如下 import time def measure_time(): def wraps(func): def mesure(*args,**kwargs): s ...

  10. 【OGG】 RAC环境下管理OGG的高可用 (五)

    [OGG] RAC环境下管理OGG的高可用 (五) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道 ...