Skip to content

seems memory leak happens when using cgo #167

@AaronLin98

Description

@AaronLin98

version: gorocksdb@v1.6.36

function: write_batch.go

func (wb *WriteBatch) Put(key, value []byte) {
	cKey := byteToChar(key)
	cValue := byteToChar(value)
	C.rocksdb_writebatch_put(wb.c, cKey, C.size_t(len(key)), cValue, C.size_t(len(value)))
}

use case:

func writeLargeObjects(db *grocksdb.DB) {
	for i := 0; i < 1000; i += 10 {
		writeLargeObjectsCore(db, i, i+10)
	}
}
func writeLargeObjectsCore(db *grocksdb.DB, l, r int) {
	largeValue := make([]byte, 1*1024*1024) // 1MB bytes
	for i := range largeValue {
		largeValue[i] = 'x'
	}

	batch := grocksdb.NewWriteBatch()
	for i := l; i < r; i++ {
		key := fmt.Sprintf("large_key_%d", i)
		batch.Put([]byte(key), largeValue)
	}

	writeOpts := grocksdb.NewDefaultWriteOptions()
	err := db.Write(writeOpts, batch)
	if err != nil {
		log.Fatalf("Write failed: %v", err)
	}
	writeOpts.Destroy()
	batch.Destroy()
}

results:
By this use case, memory leak will happen.
The VmRSS is much larger than Go sys memory and rocksdb-memtable and rocksdb-block-cache.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions