JIFA 是阿里贡献给 Eclipse 的一个适用于 Java 应用的问题诊断应用。
它以图形化的方式展示
- Heap Dump Analysis
- GC Log Analysis
- Thread Dump Analysis
因为云环境/生产环境的一些限制,应用的问题可能不能被就地分析,所以Jifa provides a web solution, allowing developers to use the browser to troubleshoot.
Start with Docker
Heap Dump Analysis
这是一份不断申请内存导致MLE内存泄漏的代码,我们用它来生成Heap Dump这个hprof
格式的二进制文件:
可以看到内存占用一路走高
上传到JIFA
打出来了一个内存泄漏的点
在支配树里面可以看到主要的内存泄露发生在MemoryLeak这个类里面
系统属性也全打出来了
GC Log
/opt/adopt_jdk8/bin/java -Xloggc:gc.log -XX:+PrintGCDetails -jar SPECjvm2008.jar -ikv compress
Thread Dump
简单的生成Thread Dump的代码
import java.util.Map;
public class ThreadDump {
public static void main(String[] args) {
// 在主线程中执行一些任务
for (int i = 0; i < 5; i++) {
new Thread(() -> {
while (true) {
// 无限循环,模拟长时间运行的线程
}
}).start();
}
// 让主线程休眠一段时间
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 输出Thread Dump
System.out.println(generateThreadDump());
}
// 生成Thread Dump
private static String generateThreadDump() {
StringBuilder threadDump = new StringBuilder();
Map<Thread, StackTraceElement[]> threadMap = Thread.getAllStackTraces();
for (Map.Entry<Thread, StackTraceElement[]> entry : threadMap.entrySet()) {
Thread thread = entry.getKey();
StackTraceElement[] stackTraceElements = entry.getValue();
threadDump.append("Thread: ").append(thread.getName()).append("\n");
for (StackTraceElement element : stackTraceElements) {
threadDump.append("\t").append(element.toString()).append("\n");
}
threadDump.append("\n");
}
return threadDump.toString();
}
}
它的输出如下
Thread: Notification Thread
Thread: Thread-4
app//ThreadDump.lambda$0(ThreadDump.java:8)
app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
Thread: Signal Dispatcher
Thread: Finalizer
java.base@17.0.8/java.lang.Object.wait(Native Method)
java.base@17.0.8/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
java.base@17.0.8/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
java.base@17.0.8/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172)
Thread: Thread-3
app//ThreadDump.lambda$0(ThreadDump.java:8)
app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
Thread: Common-Cleaner
java.base@17.0.8/java.lang.Object.wait(Native Method)
java.base@17.0.8/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
java.base@17.0.8/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
java.base@17.0.8/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)
Thread: Thread-0
app//ThreadDump.lambda$0(ThreadDump.java:8)
app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
Thread: Thread-1
app//ThreadDump.lambda$0(ThreadDump.java:8)
app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
Thread: main
java.base@17.0.8/java.lang.Thread.dumpThreads(Native Method)
java.base@17.0.8/java.lang.Thread.getAllStackTraces(Thread.java:1662)
app//ThreadDump.generateThreadDump(ThreadDump.java:28)
app//ThreadDump.main(ThreadDump.java:22)
Thread: Thread-2
app//ThreadDump.lambda$0(ThreadDump.java:8)
app//ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
java.base@17.0.8/java.lang.Thread.run(Thread.java:833)
Thread: Reference Handler
java.base@17.0.8/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
java.base@17.0.8/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
java.base@17.0.8/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)
2023-06-23 15:56:47
Full thread dump OpenJDK 64-Bit Server VM (17.0.8+7 mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x00007f7404157ca0, length=16, elements={
0x00007f740412c120, 0x00007f740412d500, 0x00007f7404132aa0, 0x00007f7404133e50,
0x00007f7404135260, 0x00007f7404136c10, 0x00007f7404138140, 0x00007f74041395b0,
0x00007f7404140ce0, 0x00007f740414cd70, 0x00007f7404152d60, 0x00007f7404153d10,
0x00007f7404154d10, 0x00007f7404155d10, 0x00007f7404156d00, 0x00007f7404025430
}
"Reference Handler" #2 daemon prio=10 os_prio=0 cpu=0.13ms elapsed=309.58s tid=0x00007f740412c120 nid=0x34a waiting on condition [0x00007f73e85f6000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@17.0.8/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@17.0.8/Reference.java:253)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@17.0.8/Reference.java:215)
"Finalizer" #3 daemon prio=8 os_prio=0 cpu=0.23ms elapsed=309.58s tid=0x00007f740412d500 nid=0x34b in Object.wait() [0x00007f73e84f5000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base@17.0.8/Native Method)
- waiting on <0x000000009b302f40> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155)
- locked <0x000000009b302f40> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:176)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@17.0.8/Finalizer.java:172)
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0.11ms elapsed=309.57s tid=0x00007f7404132aa0 nid=0x34c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Service Thread" #5 daemon prio=9 os_prio=0 cpu=0.08ms elapsed=309.57s tid=0x00007f7404133e50 nid=0x34d runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Monitor Deflation Thread" #6 daemon prio=9 os_prio=0 cpu=17.19ms elapsed=309.57s tid=0x00007f7404135260 nid=0x34e runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=2.99ms elapsed=309.57s tid=0x00007f7404136c10 nid=0x34f waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"C1 CompilerThread0" #10 daemon prio=9 os_prio=0 cpu=3.77ms elapsed=309.57s tid=0x00007f7404138140 nid=0x350 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"Sweeper thread" #11 daemon prio=9 os_prio=0 cpu=0.07ms elapsed=309.57s tid=0x00007f74041395b0 nid=0x351 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Notification Thread" #12 daemon prio=9 os_prio=0 cpu=0.07ms elapsed=309.57s tid=0x00007f7404140ce0 nid=0x352 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Common-Cleaner" #13 daemon prio=8 os_prio=0 cpu=0.28ms elapsed=309.56s tid=0x00007f740414cd70 nid=0x354 in Object.wait() [0x00007f73d98f6000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base@17.0.8/Native Method)
- waiting on <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155)
- locked <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base@17.0.8/CleanerImpl.java:140)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
at jdk.internal.misc.InnocuousThread.run(java.base@17.0.8/InnocuousThread.java:162)
"Thread-0" #14 prio=5 os_prio=0 cpu=309573.04ms elapsed=309.56s tid=0x00007f7404152d60 nid=0x355 runnable [0x00007f73d97f5000]
java.lang.Thread.State: RUNNABLE
at ThreadDump.lambda$0(ThreadDump.java:8)
at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
"Thread-1" #15 prio=5 os_prio=0 cpu=309571.34ms elapsed=309.56s tid=0x00007f7404153d10 nid=0x356 runnable [0x00007f73d96f4000]
java.lang.Thread.State: RUNNABLE
at ThreadDump.lambda$0(ThreadDump.java:8)
at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
"Thread-2" #16 prio=5 os_prio=0 cpu=309574.32ms elapsed=309.56s tid=0x00007f7404154d10 nid=0x357 runnable [0x00007f73d95f3000]
java.lang.Thread.State: RUNNABLE
at ThreadDump.lambda$0(ThreadDump.java:8)
at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
"Thread-3" #17 prio=5 os_prio=0 cpu=309574.32ms elapsed=309.56s tid=0x00007f7404155d10 nid=0x358 runnable [0x00007f73d94f2000]
java.lang.Thread.State: RUNNABLE
at ThreadDump.lambda$0(ThreadDump.java:8)
at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
"Thread-4" #18 prio=5 os_prio=0 cpu=309574.21ms elapsed=309.56s tid=0x00007f7404156d00 nid=0x359 runnable [0x00007f73d93f1000]
java.lang.Thread.State: RUNNABLE
at ThreadDump.lambda$0(ThreadDump.java:8)
at ThreadDump$$Lambda$1/0x0000000801000a08.run(Unknown Source)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
"DestroyJavaVM" #19 prio=5 os_prio=0 cpu=24.68ms elapsed=304.55s tid=0x00007f7404025430 nid=0x343 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"VM Thread" os_prio=0 cpu=5.65ms elapsed=309.59s tid=0x00007f74041281a0 nid=0x349 runnable
"GC Thread#0" os_prio=0 cpu=0.15ms elapsed=309.68s tid=0x00007f7404078190 nid=0x344 runnable
"G1 Main Marker" os_prio=0 cpu=0.08ms elapsed=309.68s tid=0x00007f7404086ea0 nid=0x345 runnable
"G1 Conc#0" os_prio=0 cpu=0.06ms elapsed=309.68s tid=0x00007f7404087e00 nid=0x346 runnable
"G1 Refine#0" os_prio=0 cpu=0.06ms elapsed=309.68s tid=0x00007f74040fb6e0 nid=0x347 runnable
"G1 Service" os_prio=0 cpu=34.92ms elapsed=309.68s tid=0x00007f74040fc5d0 nid=0x348 runnable
"VM Periodic Task Thread" os_prio=0 cpu=107.07ms elapsed=309.57s tid=0x00007f7404142a10 nid=0x353 waiting on condition
JNI global refs: 6, weak refs: 0
Heap
garbage-first heap total 112640K, used 2016K [0x0000000094800000, 0x0000000100000000)
region size 1024K, 1 young (1024K), 0 survivors (0K)
Metaspace used 142K, committed 384K, reserved 1114112K
class space used 5K, committed 128K, reserved 1048576K
在输出的信息中,JNI global refs: 6, weak refs: 0 指的是JNI(Java Native
Interface)全局引用和弱引用的数量。JNI允许Java程序与本地代码进行交互,通过调用本地方法来执行一些底层的操作。在这个过程中,Java对象可能会被传递给本地代码,并且本地代码可以持有对这些Java对象的引用。这些引用可以是全局引用或者弱引用。
JNI全局引用:全局引用是一个持久的Java对象引用,它在整个应用程序的生命周期中有效,不会因为方法调用结束而销毁。这些全局引用需要手动释放,否则可能会导致内存泄漏。在输出信息中,JNI
global refs: 6表示当前存在的全局引用数量为6。JNI弱引用:弱引用是一种不会阻止垃圾回收的引用类型,当被引用的Java对象不再有强引用时,它可能被垃圾回收器回收。在输出信息中,weak
refs: 0表示当前不存在弱引用。接下来是Heap(堆)部分的信息,它提供了关于Java堆内存的详细信息:
garbage-first heap total 112640K, used
2016K:表明整个Java堆的总大小为112640K,已使用的内存为2016K。[0x0000000094800000, 0x0000000100000000):表示Java堆的内存地址范围。
region size 1024K, 1 young (1024K), 0 survivors
(0K):说明堆被划分为不同的区域,这里有一个年轻代(young
generation)的区域,大小为1024K,并且没有survivor区域用于存放幸存对象。然后是关于Metaspace(元空间)的信息:
used 142K, committed 384K, reserved
1114112K:表示当前元空间已使用142K的内存,已分配的内存为384K,保留内存为1114112K。 最后是有关Class
space(类空间)的信息:used 5K, committed 128K, reserved
1048576K:表示当前类空间已使用5K的内存,已分配的内存为128K,保留内存为1048576K。
这些信息提供了对Java堆和元空间的内存使用情况的统计和分析。
"Common-Cleaner" #13 daemon prio=8 os_prio=0 cpu=0.28ms elapsed=309.56s tid=0x00007f740414cd70 nid=0x354 in Object.wait() [0x00007f73d98f6000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base@17.0.8/Native Method)
- waiting on <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155)
- locked <0x000000009b3180b8> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base@17.0.8/CleanerImpl.java:140)
at java.lang.Thread.run(java.base@17.0.8/Thread.java:833)
at jdk.internal.misc.InnocuousThread.run(java.base@17.0.8/InnocuousThread.java:162)
这段输出是有关线程信息的,提供了关于名为 “Common-Cleaner” 的线程的详细信息。下面是对输出信息的逐行解释:
“Common-Cleaner” #13 daemon prio=8 os_prio=0 cpu=0.28ms
elapsed=309.56s tid=0x00007f740414cd70 nid=0x354 in
Object.wait():这是线程的基本描述信息,指示线程名称为
“Common-Cleaner”,线程优先级为8,并且是一个守护线程(daemon)。其他信息包括操作系统优先级、CPU时间以及已经过的时间。[0x00007f73d98f6000]:这是线程堆栈的起始内存地址。
java.lang.Thread.State: TIMED_WAITING (on object
monitor):这表示线程的状态为TIMED_WAITING,即线程正在等待一段时间。at java.lang.Object.wait(java.base@17.0.8/Native Method):这行代码表明线程调用了
Object.wait() 方法进行等待。wait() 方法是Java中的一个同步方法,用于使线程进入等待状态,直到其他线程唤醒它。waiting on <0x000000009b3180b8> (a
java.lang.ref.ReferenceQueue$Lock):这是线程正在等待的对象,在这里是一个锁对象,它的内存地址为
<0x000000009b3180b8>。 at
java.lang.ref.ReferenceQueue.remove(java.base@17.0.8/ReferenceQueue.java:155):这表示线程正在执行
ReferenceQueue.remove() 方法,该方法用于从引用队列中移除对象。locked <0x000000009b3180b8> (a
java.lang.ref.ReferenceQueue$Lock):这表示线程已经获取了 <0x000000009b3180b8>
对象的锁,因为它是在等待该锁被释放之前进行的。 at
jdk.internal.ref.CleanerImpl.run(java.base@17.0.8/CleanerImpl.java:140):这表示线程正在执行
CleanerImpl.run() 方法,在该方法中清理对象。at java.lang.Thread.run(java.base@17.0.8/Thread.java:833):这表示线程正在执行
Thread.run() 方法,即线程的主要执行逻辑。at
jdk.internal.misc.InnocuousThread.run(java.base@17.0.8/InnocuousThread.java:162):这表示线程正在执行的特殊线程
InnocuousThread.run() 方法。总之,这些信息描述了一个名为 “Common-Cleaner”
的线程的状态、等待的锁对象以及正在执行的方法。该线程可能负责执行对象的清理操作,尤其是回收不再被引用的对象。
我用jstack -l PID > threaddump.txt
命令生成了threaddump
信息,并导入了JIFA
踩过的坑
WSL原生环境
Downloading https://services.gradle.org/distributions/gradle-7.3-bin.zip
...........10%...........20%...........30%...........40%...........50%...........60%...........70%...........80%...........90%...........100%
Welcome to Gradle 7.3!
Here are the highlights of this release:
- Easily declare new test suites in Java projects
- Support for Java 17
- Support for Scala 3
For more details see https://docs.gradle.org/7.3/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':backend:heap-dump-analyzer:eclipse-mat-deps'.
> java.lang.RuntimeException: java.net.SocketTimeoutException: timeout
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1m 45s
➜ jifa git:(master) java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
> Task :backend:master:runVertxCodeGen
Note: Loaded RxJava2 code generator
Note: Loaded service_proxy_handler code generator
Note: Loaded service_proxy code generator
Note: Loaded data_object_converters code generator
warning: Supported source version 'RELEASE_8' from annotation processor 'org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor' less than -source '11'
Note: Non future method org.eclipse.jifa.master.service.AdminService: void isAdmin(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void add(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Admin>>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void isDBConnectivity(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void startDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void stopDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.ConfigService: void getConfig(java.lang.String configName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void findActive(org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void pendingJobsInFrontOf(org.eclipse.jifa.master.entity.Job job, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Job>>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void allocate(java.lang.String userId, java.lang.String hostIP, org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, java.lang.String attachment, long estimatedLoad, boolean immediate, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void finish(org.eclipse.jifa.master.entity.enums.JobType type, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Worker>>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void diskCleanup(java.lang.String hostIP, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectMostIdleWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectWorkerByIP(java.lang.String hostIp, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void count(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Integer>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void files(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, int page, int pageSize, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.File>>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void file(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.File>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void deleteFile(java.lang.String name, org.eclipse.jifa.master.entity.enums.Deleter deleter, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transfer(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String originalName, java.lang.String name, org.eclipse.jifa.master.model.TransferWay transferWay, java.util.Map<java.lang.String,java.lang.String> transferInfo, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transferDone(java.lang.String name, org.eclipse.jifa.common.enums.FileTransferState transferState, long size, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void setShared(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void updateDisplayName(java.lang.String name, java.lang.String displayName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void isAdmin(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void add(java.lang.String userId, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.AdminService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Admin>>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void isDBConnectivity(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Boolean>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void startDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.SupportService: void stopDummyWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.ConfigService: void getConfig(java.lang.String configName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void findActive(org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void pendingJobsInFrontOf(org.eclipse.jifa.master.entity.Job job, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Job>>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void allocate(java.lang.String userId, java.lang.String hostIP, org.eclipse.jifa.master.entity.enums.JobType jobType, java.lang.String target, java.lang.String attachment, long estimatedLoad, boolean immediate, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.JobService: void finish(org.eclipse.jifa.master.entity.enums.JobType type, java.lang.String target, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void queryAll(io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.Worker>>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void diskCleanup(java.lang.String hostIP, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectMostIdleWorker(io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.WorkerService: void selectWorkerByIP(java.lang.String hostIp, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Worker>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void count(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Integer>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void files(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String expectedFilename, int page, int pageSize, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.util.List<org.eclipse.jifa.master.entity.File>>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void file(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.File>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void deleteFile(java.lang.String name, org.eclipse.jifa.master.entity.enums.Deleter deleter, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transfer(java.lang.String userId, org.eclipse.jifa.common.enums.FileType type, java.lang.String originalName, java.lang.String name, org.eclipse.jifa.master.model.TransferWay transferWay, java.util.Map<java.lang.String,java.lang.String> transferInfo, io.vertx.core.Handler<io.vertx.core.AsyncResult<org.eclipse.jifa.master.entity.Job>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void transferDone(java.lang.String name, org.eclipse.jifa.common.enums.FileTransferState transferState, long size, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void setShared(java.lang.String name, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Non future method org.eclipse.jifa.master.service.FileService: void updateDisplayName(java.lang.String name, java.lang.String displayName, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>> handler)
Note: Generated model org.eclipse.jifa.master.entity.Admin: org.eclipse.jifa.master.entity.AdminConverter
Note: Generated model org.eclipse.jifa.master.service.AdminService: org.eclipse.jifa.master.service.AdminServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.service.FileService: org.eclipse.jifa.master.service.FileServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.service.ConfigService: org.eclipse.jifa.master.service.ConfigServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.service.FileService: org.eclipse.jifa.master.service.FileServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.FileService: org.eclipse.jifa.master.service.reactivex.FileService
Note: Generated model org.eclipse.jifa.master.entity.Worker: org.eclipse.jifa.master.entity.WorkerConverter
Note: Generated model org.eclipse.jifa.master.entity.Master: org.eclipse.jifa.master.entity.MasterConverter
Note: Generated model org.eclipse.jifa.master.service.SupportService: org.eclipse.jifa.master.service.SupportServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.SupportService: org.eclipse.jifa.master.service.SupportServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.entity.File: org.eclipse.jifa.master.entity.FileConverter
Note: Generated model org.eclipse.jifa.master.service.SupportService: org.eclipse.jifa.master.service.reactivex.SupportService
Note: Generated model org.eclipse.jifa.master.service.ConfigService: org.eclipse.jifa.master.service.ConfigServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.WorkerService: org.eclipse.jifa.master.service.WorkerServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.JobService: org.eclipse.jifa.master.service.JobServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.entity.Job: org.eclipse.jifa.master.entity.JobConverter
Note: Generated model org.eclipse.jifa.master.service.WorkerService: org.eclipse.jifa.master.service.WorkerServiceVertxProxyHandler
Note: Generated model org.eclipse.jifa.master.entity.Config: org.eclipse.jifa.master.entity.ConfigConverter
Note: Generated model org.eclipse.jifa.master.service.JobService: org.eclipse.jifa.master.service.reactivex.JobService
Note: Generated model org.eclipse.jifa.master.service.ConfigService: org.eclipse.jifa.master.service.reactivex.ConfigService
Note: Generated model org.eclipse.jifa.master.service.AdminService: org.eclipse.jifa.master.service.reactivex.AdminService
Note: Generated model org.eclipse.jifa.master.entity.GlobalLock: org.eclipse.jifa.master.entity.GlobalLockConverter
Note: Generated model org.eclipse.jifa.master.service.WorkerService: org.eclipse.jifa.master.service.reactivex.WorkerService
Note: Generated model org.eclipse.jifa.master.service.AdminService: org.eclipse.jifa.master.service.AdminServiceVertxEBProxy
Note: Generated model org.eclipse.jifa.master.service.JobService: org.eclipse.jifa.master.service.JobServiceVertxEBProxy
warning: Unclosed files for the types 'PathForCodeGenProcessor'; these types will not undergo annotation processing
2 warnings
> Task :backend:master:compileJava
Note: /home/bernard/project/jifa/backend/master/src/main/generated/org/eclipse/jifa/master/entity/FileConverter.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :generateSSHConfig
Enter passphrase (empty for no passphrase): Enter same passphrase again:
> Task :backend:thread-dump-analyzer:compileJava
/home/bernard/project/jifa/backend/thread-dump-analyzer/src/main/java/org/eclipse/jifa/tda/model/Snapshot.java:30: warning: Not generating hashCode: One of equals or hashCode exists. You should either write both of these or none of these (in the latter case, lombok generates them).
@Data
^
1 warning
> Task :backend:heap-dump-analyzer:impl:compileJava
Note: /home/bernard/project/jifa/backend/heap-dump-analyzer/impl/src/main/java/org/eclipse/jifa/hda/impl/HeapDumpAnalyzerImpl.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :backend:worker:test
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/home/bernard/project/jifa/backend/heap-dump-analyzer/mat-deps/configuration/org.eclipse.osgi/29/0/.cp/target/dependency/MatCalciteDependencies.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
> Task :frontend:npmInstall
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: echarts-liquidfill@2.0.6
npm WARN Found: echarts@5.3.3
npm WARN node_modules/echarts
npm WARN echarts@"^5.3.3" from the root project
npm WARN 1 more (v-charts)
npm WARN
npm WARN Could not resolve dependency:
npm WARN peer echarts@"^4.8.0" from echarts-liquidfill@2.0.6
npm WARN node_modules/v-charts/node_modules/echarts-liquidfill
npm WARN echarts-liquidfill@"^2.0.2" from v-charts@1.19.0
npm WARN node_modules/v-charts
npm WARN
npm WARN Conflicting peer dependency: echarts@4.9.0
npm WARN node_modules/echarts
npm WARN peer echarts@"^4.8.0" from echarts-liquidfill@2.0.6
npm WARN node_modules/v-charts/node_modules/echarts-liquidfill
npm WARN echarts-liquidfill@"^2.0.2" from v-charts@1.19.0
npm WARN node_modules/v-charts
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated popper.js@1.16.1: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1
npm WARN deprecated html-webpack-plugin@3.2.0: 3.x is no longer supported
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated eslint-loader@2.2.1: This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
npm WARN deprecated babel-eslint@10.1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated @hapi/topo@3.1.6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/joi@15.1.1: Switch to 'npm install joi'
npm WARN deprecated @hapi/address@2.1.4: Moved to 'npm install @sideway/address'
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated @hapi/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
added 1445 packages, and audited 1446 packages in 2m
93 packages are looking for funding
run `npm fund` for details
50 vulnerabilities (1 low, 18 moderate, 26 high, 5 critical)
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
npm notice
npm notice New minor version of npm available! 9.5.0 -> 9.7.2
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v9.7.2>
npm notice Run `npm install -g npm@9.7.2` to update!
npm notice
> Task :frontend:build
> jifa@0.2.0-SNAPSHOT prod-build
> vue-cli-service build --mode production --dest build
- Building for production...
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:471:10)
at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:503:5
at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:358:12
at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:236:3
at runSyncOrAsync (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
at Array.<anonymous> (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
at Storage.finished (/home/bernard/project/jifa/frontend/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)
at /home/bernard/project/jifa/frontend/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9
Browserslist: caniuse-lite is outdated. Please run:
npx update-browserslist-db@latest
Why you should do it regularly: https://github.com/browserslist/update-db#readme
/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:114
throw e;
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:471:10)
at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:503:5
at /home/bernard/project/jifa/frontend/node_modules/webpack/lib/NormalModule.js:358:12
at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at iterateNormalLoaders (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
at /home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:236:3
at context.callback (/home/bernard/project/jifa/frontend/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
at /home/bernard/project/jifa/frontend/node_modules/cache-loader/dist/index.js:118:7
at /home/bernard/project/jifa/frontend/node_modules/graceful-fs/graceful-fs.js:61:14
at FSReqCallback.oncomplete (node:fs:198:23) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v18.15.0
> Task :frontend:build FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':frontend:build'.
> Process 'command 'npm'' finished with non-zero exit value 1
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/7.3/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 36m 45s
40 actionable tasks: 39 executed, 1 up-to-date