[Bug] 1.5.0 mysql backend内存泄漏

Aperta
#3,101 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
java, mysql

Direzione di ricerca

Cerca ResultSetWrapper nella codebase Java e verifica come vengono creati, utilizzati e chiusi il relativo resultSet e statement. Riproduci il carico di lavoro del backend MySQL sulla versione 1.5.0 controllando i log o un dump della memoria, quindi verifica che le risorse vengano rilasciate in modo coerente e che la memoria non continui più a crescere fino all’esaurimento.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Bug Type (问题类型)

performance (性能下降)

Before submit
  • 我已经确认现有的 IssuesFAQ 中没有相同 / 重复问题 (I have confirmed and searched that there are no similar problems in the historical issue and documents)
Environment (环境信息)
  • Server Version: 1.5.0 (Apache Release Version)
  • Backend: Mysql
  • OS: CentOS 7.x
Expected & Actual behavior (期望与实际表现)
  • 问题描述:
    1、内存dump中mysql驱动实例呈线性增长趋势
    2、gc回收后占用空间没有下降,直至内存溢出
  • 问题分析
    在ResultSetWrapper中创建和close方法中分别加入日志,发现存在一定比例的ResultSetWrapper没有正常调用关闭方法。
  • 问题解决
    在ResultSetWrapper中加入finalize方法,在回收前判断resultSet和statement有没有正常关闭,未关闭则处理
    加入此处理后问题解决。
    @Override
    protected void finalize() {
    try {
    if (this.resultSet != null && !this.resultSet.isClosed()) {
    LOG.warn("resultSet was not closed properly, forcing close via finalize");
    this.resultSet.close();
    }
    } catch (SQLException e) {
    throw new BackendException("Failed to close ResultSet", e);
    } finally {
    try {
    if (this.statement != null && !this.statement.isClosed()) {
    LOG.warn("statement was not closed properly, forcing close via finalize");
    this.statement.close();
    }
    } catch (SQLException e) {
    throw new BackendException("Failed to close Statement", e);
    }
    }
    }
Vertex/Edge example (问题点 / 边数据举例)

Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)

Lingua principale
Java
Stelle
3.2k
Fork
637
Merge medio
3g 18h
PR unite (30g)
23

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/hugegraph

Tutte le issue di apache/hugegraph

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.