apache / apache/iotdb

the memory in the old generation isn't GC in time, with code sessionPool.showPathsTemplateSetOn

オープン
#14,407 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
6.4k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
115

説明

When run the code below, the memory in the old generation isn't GC in time, which eventually leads to the data node crashing.

Version
version: 1.3.2

### log :
A fatal error has been detected by the Java Runtime Environment:
Internal Error (debug.cpp:362), pid=32562, tid=88579
fatal error: OutOfMemory encountered: Java heap space

JRE version: OpenJDK Runtime Environment Corretto-17.0.11.9.1 (17.0.11+9) (build 17.0.11+9-LTS)
Java VM: OpenJDK 64-Bit Server VM Corretto-17.0.11.9.1 (17.0.11+9-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64)

--------------- S U M M A R Y ------------

Command Line: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED -Dlogback.configurationFile=./sbin/../conf/logback-datanode.xml -DIOTDB_HOME=./sbin/.. -DIOTDB_DATA_HOME=./sbin/.. -DTSFILE_HOME=./sbin/.. -DIOTDB_CONF=./sbin/../conf -DTSFILE_CONF=./sbin/../conf -Dname=iotdb\.IoTDB -DIOTDB_LOG_DIR=./sbin/../logs -DOFF_HEAP_MEMORY=1232M -Diotdb.jmx.local=true -Xms4912M -Xmx4912M -XX:MaxDirectMemorySize=1232M -Djdk.nio.maxCachedBufferSize=1291845 -XX:+CrashOnOutOfMemoryError -XX:+UseAdaptiveSizePolicy -Xss512k -XX:SafepointTimeoutDelay=1000 -XX:+SafepointTimeout org.apache.iotdb.db.service.DataNode -s

Host: "Mac14,7" arm64, 8 cores, 16G, Darwin 23.4.0, macOS 14.4 (23E214)
Time: Thu Dec 12 22:29:33 2024 CST elapsed time: 33.258095 seconds (0d 0h 0m 33s)

### code:
```
public class SessionPoolDemo {

private static SessionPool sessionPool;
private static void constructCustomSessionPool() {
sessionPool = new SessionPool.Builder()
.host("127.0.0.1")
.port(6667)
.user("root")
.password("root")
.build();
}

public static void main(String[] args) throws Exception {
constructCustomSessionPool();

for (int i = 0; i < 1000; i++) { // or 5000
List locationTemplate = sessionPool.showPathsTemplateSetOn("locationTemplate");
System.out.println(locationTemplate.size());
}
}
}
```

### GC:
gc

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

SessionPoolDemoで使用されているSessionPool.showPathsTemplateSetOn呼び出しから始め、提供されたJVM設定とGCの証拠を使ってIoTDB 1.3.2で問題を再現します。繰り返し呼び出しにおける割り当てと保持を追跡します。完了の条件は、ループによってold generationが増加し、Java heap-spaceエラーにつながることがなくなることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
databases
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。