-
TheBlueMatt commented at 9:48 pm on October 26, 2016: contributor#9014 brought to light in issue introduced in #7946 - when we do a reorg, we now keep the full contents of each block we connect in memory until the reorg is complete. Luckily, #9014 makes this a bit eaiser to fix - dont keep more than a few blocks around in shared_ptrs, just re-read them from disk after the reorg is complete when you need to call signalers. This may be complicated due to pruning, but it should be doable.
-
TheBlueMatt commented at 9:50 pm on October 26, 2016: contributorNote that this issue has never made it into a released version, so to avoid regression we should fix this before 0.14.
-
fanquake added the label Resource usage on Oct 27, 2016
-
laanwj added this to the milestone 0.14.0 on Oct 27, 2016
-
MarcoFalke added this to the milestone 0.15.0 on Feb 2, 2017
-
MarcoFalke removed this from the milestone 0.14.0 on Feb 2, 2017
-
MarcoFalke commented at 7:08 pm on February 2, 2017: memberDefer this to 0.15 and remove 0.14 milestone according to current irc log.
-
TheBlueMatt commented at 8:43 pm on June 28, 2017: contributor
This was partially addressed in #9208. However, the issue of keeping around all blocks connected in the ConnectTrace still exists. Note that, of course, this does not present an issue during normal connect since a ConnectTrace should only ever contain one block (as ABCS will return if it made progress).
#10286 will present yet another issue here. Because wallet callbacks will not force the ABC thread to pause, callbacks could pile up and even if blocks get freed from the ConnectTrace, they could still sit around in memory waiting for the callback to finish. Luckily since wallet also takes cs_main there is some ability to block the main thread from making progress, assuming locks will switch between threads and not always get taken on the same thread if there is contention, but hopefully eventually wallet can lose much of its cs_main-taking, which means wallet needs a way to pause validation if it is super, super huge and gets far behind.
-
TheBlueMatt commented at 8:04 pm on July 25, 2017: contributorShould likely be pushed to 16, as 10708 is not making 15.
-
MarcoFalke added this to the milestone Future on Jul 25, 2017
-
MarcoFalke removed this from the milestone 0.15.0 on Jul 25, 2017
-
MarcoFalke removed this from the milestone Future on May 3, 2018
-
willcl-ark commented at 8:31 pm on October 25, 2022: contributor
Testing with
bitcoin-cli invalidateblock 00000000000000000003618a9a50c352c58fa3a7ae6d0016d2720a9aff2c2db2
, a 50k block re-org, shows thatbitcoind
memory usage peaks at ~ 10GB during this process on my system, although it cannot cause OOM:0$ grep ^VmPeak /proc/$(pidof bitcoind)/status 1 2VmPeak: 10721532 kB
So it seems like this may still be somewhat present, despite previous comments indicating that it had gone away, and this comment indicating that #15402 had fixed it somewhat more concretely.
Perhaps we should close this one and keep #14289 open, although it would be nice to address the penultimate comment here first?
Edit: testing a day’s-worth of blocks re-org (6 * 24) used 729MB
-
MarcoFalke commented at 9:17 am on August 31, 2023: member
Testing
Did you test with or without a wallet?
-
willcl-ark commented at 9:34 am on September 6, 2023: contributor
Testing
Did you test with or without a wallet?
I tested this without a wallet, which IIUC should give me the “maximum” unbounded memory usage in this scenario?
I accidentally
-reindex
-ed my mainnet dev node earlier this morning as I was adding coinstatsindex to it. When that sorts itself out, I can re-test with a wallet loaded.
This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-12-18 15:12 UTC
More mirrored repositories can be found on mirror.b10c.me