通过granfana 以及prometheus 比较zulu 、oracle、openjdk 等jvm 运行
说明,此测试不完备,只是一个简单的集成,详细的需要进行jvm 参数的调整
环境准备
- 参考项目
https://github.com/rongfengliang/zulu-openjdk-openjdk-oracle-jdk - 简单webapi
spring boot 集成了prometheus,详细代码就不贴了,只提供简单的pom 配置
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 进行接口测试,地址为http://service:port/actuator/env 可以参考load-test 目录,区分了openjdk、zulu、oracle
内容为:
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 运行的更多相关文章
- Ubuntu 18.04 上使用 OpenJDK 安装并运行 Tomcat
在Linux上安装与卸载JDK和JRE,两种常用方法: 一.通过 apt-get 命令在线进行安装与卸载(会自动配置好环境变量) 二.通过下载并解压 .tar.gz 包进行手动安装与手动卸载(需要手动 ...
- Oracle开始从Java运行时中移除JAR包
早在2012年8月,在Java平台首席架构师Mark Reinhold宣布模块化项目Jigsaw之后不久,JEP 162这一题为“准备模块化”的提案就指出,在Jigsaw项目中为模块化系统开发的代码不 ...
- 不安装oracle客户端,如何运行sqlplus
1.软件下载 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载如下三个包: oracle-instantc ...
- (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中
利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目 Dao (jar) Service (jar) Controller (web) ...
- 使用 Prometheus 监控minio 性能指标信息&&docker-compose 方式运行
minio server 已经支持Prometheus 了,对于系统的运行参数我们可以方便.实时的查看 运行使用docker-compose docker-compose 文件 version: &q ...
- 在k8s集群中,利用prometheus的jmx_exporter进行tomcat的JVM性能监控,并用grafana作前端展示
查找了很多文档,没有完全达到我要求的, 于是,作了一定的调整,成现在这样. 操作步骤如下: 一,准备好两个文件. jmx_prometheus_javaagent-0.3.1.jar jmx_expo ...
- Oracle 11g 递归+ exists运行计划的改变
有一个递归查询在10g上执行非常快,但在11g上执行不出来. SQL> select * from v$version; BANNER ----------------------------- ...
- Oracle中表连接的运行原理
Oracle优化器会自动选择以下三种方式的一种运行表连接,但在数据环境上配合强化选择合适的方式或强制使用某种方式是SQL优化的需要: NESTED LOOP 对于被连接的数据子集较小的情况, ...
- oracle建立job定期运行存储过程
1 首先查看 SQL> show parameter job NAME TYPE VALUE------------------------------------ ----------- -- ...
随机推荐
- 了解下Scala隐式转换与柯理化
之前有看过kafka源码,有很多implict声明的方法,当时看的一头雾水,今天趁着空闲,了解下scala 的隐式转换和柯理化相关语法知识. 隐式转换 需要类中的一个方法,但是这个类没有提供这样的一个 ...
- 最新版Prometheus+Grafana+node-exporter炫酷界面
一.概述 理论知识就不多介绍了,参考链接: https://www.cnblogs.com/xiao987334176/p/9930517.html 本文使用2台服务器,来搭建. 环境 操作系统 do ...
- idea 用鼠标滚轮调整代码文字大小
File > Settings > Keymap > Editor Actions 下,我们可以找到 “Decrease Font Size”和“Increase Font Size ...
- Redis 集群:CLUSTERDOWN The cluster is down
1.错误 (error)CLUSTERDOWN The cluster is down 2.问题表现 Java项目使用redis集群时报错, HTTP Status 500 - Could not g ...
- Ambari深入学习(II)-实现细节
在第一节中,我们简单讲了一下Ambari的系统架构.我们这一节主要分析Ambari的源代码,总览Ambari的具体实现方式及其工作细节. 一.Ambari-Server启动 Ambari-Server ...
- 2019 4399java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.4399等公司offer,岗位是Java后端开发,最终选择去了4399. 面试了很多家公司,感觉大部分公司考察的点 ...
- 30个关于Shell脚本的经典案例(上)
对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验.针对以上问题,总结了30个生产环境中经典的Shell脚本, ...
- mysql优化 ON DUPLICATE KEY UPDATE
场景:比如,有一张表,专门记录业务里的唯一数据记录,这张表里如果存在此唯一数据的记录就更新此行数据的某个字段,如果此唯一数据不存在,那么就添加一条最新数据. 一贯操作:如果不知道mysql有 ON D ...
- Java 之 JSP
一.JSP 概述 Java Server Pages:java 服务器页面.页面中既可以指定定义 html标签,也可以定义 Java 代码. 二.原理 JSP 本质上就是一个 Servlet. 原理示 ...
- MVC、MVP及MVVM之间的关系
介绍 写这篇随笔完全是为了加深自己的印象,毕竟写比看能获得得更多,另外本人对这三种模式的认识还是浅薄的,有待在以后的工作学习中有更深入的理解,因此不免会有误解,这里推荐大家阅读廖雪峰关于MVVM的介绍 ...