# OutOfMemoryError on both sides peer and transactor

**URL:** <https://forum.datomic.com/t/outofmemoryerror-on-both-sides-peer-and-transactor/2546>\
**Category:** Troubleshooting\
**Created:** [February 27, 2025, 2:39pm UTC](https://forum.datomic.com/t/outofmemoryerror-on-both-sides-peer-and-transactor/2546 "2025-02-27T14:39:46Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![nikolayandr](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.datomic.com/nikolayandr/32/375_2.png) [@nikolayandr](https://forum.datomic.com/u/nikolayandr)\
**Post date:** [February 27, 2025, 2:39pm UTC](https://forum.datomic.com/t/outofmemoryerror-on-both-sides-peer-and-transactor/2546/1 "2025-02-27T14:39:46Z")

</div>

Hi datomic team, are there any ideas what might happen when peer and transaction indicates about OutOfMemoryError, according lo the logs below I see it it somehow related to indexing, we started to get these errors recently on several different envs with very small traffic, restarting of the peer and the transacrtor do not help, after some time we see these errors again. datomic version is 1.0.7277

Peer logs :

```auto
clojure.lang.ExceptionInfo: Unable to convert data: {:key "67c05464-8a44-4e69-b413-48da3561370a", :crc32 3420686353, :size 22731791}
	at datomic.cache$report_val_fn_fail.invokeStatic(cache.clj:69)
	at datomic.cache$report_val_fn_fail.invoke(cache.clj:65)
	at datomic.domain.DeserializingRepairingLookup$fn__16804.invoke(domain.clj:217)
	at datomic.domain.DeserializingRepairingLookup.valAt(domain.clj:214)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.cache$lookup_with_inflight_cache$reify __9410$fn__ 9411.invoke(cache.clj:184)
	at clojure.lang.Delay.deref(Delay.java:42)
	at clojure.core$deref.invokeStatic(core.clj:2337)
	at clojure.core$deref.invoke(core.clj:2323)
	at datomic.cache$lookup_with_inflight_cache$reify__9410.valAt(cache.clj:187)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.cache$lookup_cache$reify__9407.valAt(cache.clj:151)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.common$getx.invokeStatic(common.clj:209)
	at datomic.common$getx.invoke(common.clj:205)
	at datomic.index$get_dir_node.invokeStatic(index.clj:194)
	at datomic.index$get_dir_node.invoke(index.clj:185)
	at datomic.index.Index.seek(index.clj:566)
	at datomic.db$ident_setting_datoms.invokeStatic(db.clj:2759)
	at datomic.db$ident_setting_datoms.invoke(db.clj:2752)
	at datomic.db$run_hooks.invokeStatic(db.clj:2774)
	at datomic.db$run_hooks.invoke(db.clj:2765)
	at datomic.db$db.invokeStatic(db.clj:2864)
	at datomic.db$db.invoke(db.clj:2848)
	at datomic.db_io$load_db_from_basis.invokeStatic(db_io.clj:75)
	at datomic.db_io$load_db_from_basis.doInvoke(db_io.clj:69)
	at clojure.lang.RestFn.invoke(RestFn.java:467)
	at datomic.peer.Connection$fn __21505$load_db__ 21513.invoke(peer.clj:225)
	at datomic.peer.Connection$fn__21505.invoke(peer.clj:226)
	at datomic.peer.Connection.create_connection_state(peer.clj:204)
	at datomic.peer$create_connection$reconnect_fn__21588.invoke(peer.clj:488)
	at clojure.core$partial$fn__5908.invoke(core.clj:2640)
	at datomic.common$retry_fn$fn__9168.invoke(common.clj:545)
	at datomic.common$retry_fn.invokeStatic(common.clj:545)
	at datomic.common$retry_fn.doInvoke(common.clj:528)
	at clojure.lang.RestFn.invoke(RestFn.java:713)
	at datomic.peer$create_connection$fn__21590.invoke(peer.clj:492)
	at datomic.reconnector2.Reconnector$fn__17136.invoke(reconnector2.clj:57)
	at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
	at clojure.lang.AFn.call(AFn.java:18)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError: Java heap space

```

Transactor logs:

```auto
2025-02-27 12:00:04.165 WARN default datomic.index - {:message "merge-one-index failed", :pid 1, :tid 5814}
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at clojure.core$deref_future.invokeStatic(core.clj:2317)
	at clojure.core$future_call$reify__8544.deref(core.clj:7042)
	at clojure.core$deref.invokeStatic(core.clj:2337)
	at clojure.core$deref.invoke(core.clj:2323)
	at clojure.core$map$fn__5935.invoke(core.clj:2772)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:58)
	at clojure.lang.RT.seq(RT.java:535)
	at clojure.core$seq__5467.invokeStatic(core.clj:139)
	at clojure.core$seq__5467.invoke(core.clj:139)
	at datomic.index$merge_one_index$fn__15019.invoke(index.clj:1377)
	at datomic.index$merge_one_index.invokeStatic(index.clj:1377)
	at datomic.index$merge_one_index.invoke(index.clj:1220)
	at datomic.index$merge_db_STAR_$build_tiered_index __15285$build_index__ 15289.invoke(index.clj:1814)
	at datomic.index$merge_db_STAR_$build_tiered_index __15285$fn__ 15335.invoke(index.clj:1897)
	at datomic.index$merge_db_STAR_$build_tiered_index__15285.invoke(index.clj:1885)
	at datomic.index$merge_db_STAR_.invokeStatic(index.clj:1909)
	at datomic.index$merge_db_STAR_.invoke(index.clj:1796)
	at datomic.index$merge_db$fn __15387$fn__ 15391.invoke(index.clj:2014)
	at datomic.index$merge_db$fn__15387.invoke(index.clj:2007)
	at datomic.index$merge_db.invokeStatic(index.clj:1998)
	at datomic.index$merge_db.invoke(index.clj:1988)
	at datomic.update$process_request_index$fn __27023$fn__ 27024$fn__27028.invoke(update.clj:315)
	at datomic.update$process_request_index$fn __27023$fn__ 27024.invoke(update.clj:310)
	at datomic.update$process_request_index$fn__27023.invoke(update.clj:306)
	at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
	at clojure.lang.AFn.call(AFn.java:18)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.base/java.util.Arrays.copyOf(Arrays.java:3536)
	at java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:100)
	at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:130)
	at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:123)
	at java.base/java.util.zip.CheckedOutputStream.write(CheckedOutputStream.java:73)
	at org.fressian.impl.RawOutput.writeRawBytes(RawOutput.java:95)
	at org.fressian.FressianWriter.writeString(FressianWriter.java:138)
	at org.fressian.impl.Handlers$6.write(Handlers.java:68)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at org.fressian.impl.Handlers$13.write(Handlers.java:139)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at datomic.index$reify__14764.write(index.clj:606)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at datomic.index$reify__14768.write(index.clj:625)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at datomic.fressian$fressian.invokeStatic(fressian.clj:87)
	at datomic.fressian$fressian.doInvoke(fressian.clj:76)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:671)
	at clojure.core$apply.invoke(core.clj:662)
2025-02-27 12:00:04.165 WARN default datomic.index - ... caused by ...
java.lang.OutOfMemoryError: Java heap space
	at java.base/java.util.Arrays.copyOf(Arrays.java:3536)
	at java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:100)
	at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:130)
	at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:123)
	at java.base/java.util.zip.CheckedOutputStream.write(CheckedOutputStream.java:73)
	at org.fressian.impl.RawOutput.writeRawBytes(RawOutput.java:95)
	at org.fressian.FressianWriter.writeString(FressianWriter.java:138)
	at org.fressian.impl.Handlers$6.write(Handlers.java:68)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at org.fressian.impl.Handlers$13.write(Handlers.java:139)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at datomic.index$reify__14764.write(index.clj:606)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at datomic.index$reify__14768.write(index.clj:625)
	at org.fressian.FressianWriter.doWrite(FressianWriter.java:449)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:459)
	at org.fressian.FressianWriter.writeAs(FressianWriter.java:464)
	at org.fressian.FressianWriter.writeObject(FressianWriter.java:472)
	at datomic.fressian$fressian.invokeStatic(fressian.clj:87)
	at datomic.fressian$fressian.doInvoke(fressian.clj:76)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:671)
	at clojure.core$apply.invoke(core.clj:662)

```

---

<div class="post-metadata">

**Author:** ![nikolayandr](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.datomic.com/nikolayandr/32/375_2.png) [@nikolayandr](https://forum.datomic.com/u/nikolayandr)\
**Post date:** [February 27, 2025, 4:36pm UTC](https://forum.datomic.com/t/outofmemoryerror-on-both-sides-peer-and-transactor/2546/2 "2025-02-27T16:36:14Z")

</div>

We found the root cause, both envs where the problem occurs were affected by the transaction where a bunch of attributes were affected by attribute `:db/noHistory=true`, and right after this the transactor started to notify failed indexing jobs, on the screen you can see the time when `:db/noHistory=true` was added and checking the transactor logs you can see when the first failed indexing job happened. @jaret could you please tell whether adding `noHistory=true` to attributes triggers indexing on the trasactor side?

The screen from datomic console, the transaction hapeened at 13:18:07  
The query was:

```auto
[:find ?ident ?tx ?date ?added
 :where
 [?e :db/noHistory ?doc ?tx ?added]
 [?e :db/ident ?ident]
 [?tx :db/txInstant ?date]
]

```

 ![image](https://us1.discourse-cdn.com/flex016/uploads/cognitect/original/1X/7ad840ad7d171b5983e1459664b31fc70b51399c.png)

The transactor logs, the first error happened at 13:18:15:

```auto
java.lang.OutOfMemoryError: Java heap space
2025-02-19 13:18:15.856 WARN default datomic.index - ... caused by ...
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.core$map$fn__5935.invoke(core.clj:2772)
	at datomic.index$merge_db_STAR_$build_tiered_index __13838$fn__ 13888$fn__13898.invoke(index.clj:2050)
	at datomic.cache$getx_uncached.invoke(cache.clj:57)
	at datomic.cache$getx_uncached.invokeStatic(cache.clj:59)
	at datomic.cache$lookup_cache$reify__11891.valAtUncached(cache.clj:169)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.cache$lookup_with_inflight_cache$reify__11894.valAt(cache.clj:187)
	at clojure.core$deref.invoke(core.clj:2323)
	at clojure.core$deref.invokeStatic(core.clj:2337)
	at clojure.lang.Delay.deref(Delay.java:42)
	at datomic.cache$lookup_with_inflight_cache$reify __11894$fn__ 11895.invoke(cache.clj:184)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.domain.DeserializingRepairingLookup.valAt(domain.clj:214)
	at datomic.domain.DeserializingRepairingLookup$fn__17950.invoke(domain.clj:215)
	at datomic.domain$deserialize.invoke(domain.clj:195)
	at datomic.domain$deserialize.invokeStatic(domain.clj:198)
	at datomic.fressian$val __GT_obj$fn__ 9674.invoke(fressian.clj:223)
	at datomic.fressian$val __GT_obj$fn__ 9674$fn__9675.invoke(fressian.clj:228)
	at org.fressian.FressianReader.readObject(FressianReader.java:274)
	at org.fressian.FressianReader.read(FressianReader.java:666)
	at org.fressian.FressianReader.handleStruct(FressianReader.java:695)
	at datomic.index$reify__13311.read(index.clj:635)
	at org.fressian.FressianReader.readObject(FressianReader.java:274)
	at org.fressian.FressianReader.read(FressianReader.java:623)
	at org.fressian.FressianReader.readClosedList(FressianReader.java:827)
	at org.fressian.FressianReader.read(FressianReader.java:604)
	at org.fressian.FressianReader.internalReadChunkedString(FressianReader.java:752)
	at java.base/java.lang.StringBuilder.toString(StringBuilder.java:450)
	at java.base/java.lang.StringUTF16.newString(StringUTF16.java:1179)
	at java.base/java.util.Arrays.copyOfRange(Arrays.java:3821)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.base/java.lang.Thread.run(Thread.java:831)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at clojure.lang.AFn.call(AFn.java:18)
	at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
	at datomic.update$process_request_index$fn__25056.invoke(update.clj:306)
	at datomic.update$process_request_index$fn __25056$fn__ 25057.invoke(update.clj:310)
	at datomic.update$process_request_index$fn __25056$fn__ 25057$fn__25061.invoke(update.clj:315)
	at datomic.index$merge_db.invoke(index.clj:2146)
	at datomic.index$merge_db.invokeStatic(index.clj:2156)
	at datomic.index$merge_db$fn__13940.invoke(index.clj:2165)
	at datomic.index$merge_db$fn __13940$fn__ 13944.invoke(index.clj:2172)
	at datomic.index$merge_db_STAR_.invoke(index.clj:1954)
	at datomic.index$merge_db_STAR_.invokeStatic(index.clj:2067)
	at datomic.index$merge_db_STAR_$build_tiered_index__13838.invoke(index.clj:2043)
	at datomic.index$merge_db_STAR_$build_tiered_index __13838$fn__ 13888.invoke(index.clj:2050)
	at datomic.index$merge_db_STAR_$build_tiered_index __13838$build_index__ 13842.invoke(index.clj:1972)
	at datomic.index$merge_one_index.invoke(index.clj:1404)
	at datomic.index$merge_one_index.invokeStatic(index.clj:1468)
	at datomic.index$merge_one_index$f __13377__ auto ____ 13546.invoke(index.clj:1508)
	at datomic.index$bounded_count.invoke(index.clj:964)
	at datomic.index$bounded_count.invokeStatic(index.clj:967)
	at clojure.core$next__5451.invoke(core.clj:64)
	at clojure.core$next__5451.invokeStatic(core.clj:64)
	at clojure.lang.RT.next(RT.java:713)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at datomic.index$fully_take_while_delivering_tail$fn__13433.invoke(index.clj:1048)
	at clojure.core$seq__5467.invoke(core.clj:139)
	at clojure.core$seq__5467.invokeStatic(core.clj:139)
	at clojure.lang.RT.seq(RT.java:535)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.core$filter$fn__5962.invoke(core.clj:2826)
	at clojure.core$seq__5467.invokeStatic(core.clj:139)
	at clojure.lang.RT.seq(RT.java:535)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.core$filter$fn__5962.invoke(core.clj:2826)
	at clojure.core$seq__5467.invokeStatic(core.clj:139)
	at clojure.lang.RT.seq(RT.java:535)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.core$concat$cat __5560$fn__ 5561.invoke(core.clj:744)
	at clojure.core$next__5451.invokeStatic(core.clj:64)
	at clojure.lang.RT.next(RT.java:713)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.core$map$fn__5935.invoke(core.clj:2772)
	at datomic.index$merge_db_STAR_$build_tiered_index __13838$fn__ 13888$fn__13898.invoke(index.clj:2050)
	at datomic.cache$getx_uncached.invoke(cache.clj:57)
	at datomic.cache$getx_uncached.invokeStatic(cache.clj:59)
	at datomic.cache$lookup_cache$reify__11891.valAtUncached(cache.clj:169)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.cache$lookup_with_inflight_cache$reify__11894.valAt(cache.clj:187)
	at clojure.core$deref.invoke(core.clj:2323)
	at clojure.core$deref.invokeStatic(core.clj:2337)
	at clojure.lang.Delay.deref(Delay.java:42)
	at datomic.cache$lookup_with_inflight_cache$reify __11894$fn__ 11895.invoke(cache.clj:184)
	at clojure.lang.RT.get(RT.java:791)
	at datomic.domain.DeserializingRepairingLookup.valAt(domain.clj:214)
	at datomic.domain.DeserializingRepairingLookup$fn__17950.invoke(domain.clj:217)
	at datomic.cache$report_val_fn_fail.invoke(cache.clj:65)
	at datomic.cache$report_val_fn_fail.invokeStatic(cache.clj:69)

```
