Ubuntu编译调试OpenJDK8

2022-08-05 20:13:06 807

Centos编译调试OpenJDK11

下载源码

非官方 切换到jdk8u分支

https://github.com/unofficial-openjdk/openjdk.git

编译

编译jdk需要一个引导jdk, 引导jdk版本需要比编译版本小一个版本或等于当前版本

命令行运行

sh configure  --with-debug-level=slowdebug --enable-debug-symbols --disable-zip-debug-info --with-boot-jdk=/usr/local/java

若报缺少依赖

configure: error: Could not find freetype! You might be able to fix this by running 'sudo apt-get install libfreetype6-dev'. 

则需要对应安装

注意 sudo apt-get install libX11-dev实际为sudo apt-get install libx11-dev

然后

sudo bear make all

因为openjdk是make编译的,Clion对Cmake构建的项目比较友好,使用Make构建的项目,CLion仍然可以通过Compilation Database来导入项目。因此使用bear工具生成Compilation Database

若报错

*** This OS is not supported: Linux ubuntu ****
gmake[5]: *** [****/openjdk/hotspot/make/linux/Makefile:242:check_os_version] 错误 1

修改/openjdk/hotspot/make/linux/Makefile

line:236插入DISABLE_HOTSPOT_OS_VERSION_CHECK=ok

cc1plus: all warnings being treated as errors

修改****/openjdk/hotspot/make/linux/makefiles/gcc.make, 注释掉这行

WARNINGS_ARE_ERRORS = -Werror

出现这个, 编译成功

## Finished jdk (build time 00:02:00)

----- Build times -------
Start 2022-08-05 13:52:55
End   2022-08-05 13:58:12
00:00:17 corba
00:02:21 hotspot
00:00:09 jaxp
00:00:15 jaxws
00:02:00 jdk
00:00:15 langtools
00:05:17 TOTAL
-------------------------
Finished building OpenJDK for target 'default'

验证

./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-***)
OpenJDK 64-Bit Server VM (build 25.71-b00-debug, mixed mode)

调试

用clion打开项目目录下的compile_commands.json, Open As Project

Settings->Build->Custom Build Targets->见图

1.png

2.png

保存

启动按钮的旁边 , 点击 Add Configurations

添加 Custom Build Application

Target设置为刚才设置的debug

Executable设置为编译openjdk中的bin目录下的java

Program directory设置为-version,以作测试

若debug报错

则在用户目录下创建.gdbinit, 内容如下

handle SIGSEGV pass noprint nostop
handle SIGBUS pass noprint nostop

打开/openjdk/jdk/src/share/bin/main.c

在main方法设置断点, debug启动项目

断点挂住

成功

排查记录: Java所有接口卡死

线上接口, 每天凌晨三四点后开始卡死, 重启后恢复调用后等待两分钟, 然后504两分钟正好是nginx反代的超时时间排查过程日志把nginx和应用日志都找出来看了下, 没发现什么问题应用机器状态看了下cpu占用率/内存, 没问题磁盘占用也没问题应用状态通过jps查找到java进程然后jstack 进
2024-11-07

基于eCapture无需 CA 证书捕获 SSL/TLS 明文

curl查看curl使用哪个库root@zzx:~# ldd `which curl` | grep -E "tls|ssl|nspr|nss" libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x00007ff14c35c000) libgn
2023-11-27
Ubuntu编译调试OpenJDK8

Ubuntu编译调试OpenJDK8

Centos编译调试OpenJDK11下载源码非官方 切换到jdk8u分支https://github.com/unofficial-openjdk/openjdk.git编译编译jdk需要一个引导jdk, 引导jdk版本需要比编译版本小一个版本或等于当前版本命令行运行sh configure -
2022-08-05

Java服务高CPU占用代码排查方法

1.查找进程通过top -c命令可以确定出现问题的进程2.查找线程 接下来就要找到这个进程中是哪个线程出现问题这个确定也是比较简单的,只需要输入命令:top -Hp PID例top -Hp 9828 3.定位代码jstack 进程PID | grep 线程id的16进制 -c 显示行数jstack
2022-03-31

SpringBoot连接Redis服务出现Command timed out

docker 部署的redis一直出现超时docker pull redis 网上的都说要设置这个值spring.redis.timeout=50000 然而实际使用过程中仍然超时查看redis 服务端配置-bash# cat redis.conf | grep tcp-k tcp-keepali
2020-12-14

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29