-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dart VM isolates take about 35 MB of memory each #614
Comments
We are changing the rules for how Isolates are being recycled: If you do not register a handler on a port, then isolates cannot observe external input and thus can be closed down once the currently executing handler finishes. This will fix the above "broken" code. Todd, please assign back to me when this is in. We are in the process of reducing the amount of memory that is needed to start a new isolate. Regardless of the progress we make there, I don't think you can rely on isolates for asynchronous operations for file access. As far as I know socket operations already are handled in a different manner. |
We decided not to change the rules for registering a null handler. Right now we create the ReceivePort eagerly for a new isolate and store it in the new Isolate object. If we switched this to create the port on first access, then this would "fix" the leak when not closing the port. What do you think, Ivan? |
Added Isolates label. |
Ivan -- how do you want to proceed on this bug? The reason it was originally assigned to me is no longer valid. Since I'm not doing any work to reduce isolate size, we should close it or reassign it to somebody else. Set owner to @iposva-google. |
The original reason for filing this bug has long gone: We now support native isolates to implement the IO libraries. Added AssumedStale label. |
…s, markdown, matcher, mockito, path, pool, source_map_stack_trace, sse, stream_channel, string_scanner, test, test_reflective_loader, tools, typed_data, webdev Revisions updated by `dart tools/rev_sdk_deps.dart`. cli_util (https://github.com/dart-lang/cli_util/compare/91747f7..6c318c2): 6c318c2 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#81) df83fb5 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#80) collection (https://github.com/dart-lang/collection/compare/0d0e184..30fd0f8): 30fd0f8 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#277) dartdoc (https://github.com/dart-lang/dartdoc/compare/0746cda..9be04e0): 9be04e0c 2023-03-28 Jonas Finnemann Jensen Allow ID attributes on headings when running with --sanitize-html (#3358) 8785dd24 2023-03-27 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#3377) 0944fa32 2023-03-27 dependabot[bot] Bump github/codeql-action from 2.2.6 to 2.2.9 (#3379) e318d34f 2023-03-27 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#3378) ffi (https://github.com/dart-lang/ffi/compare/32f5eef..04fa38a): 04fa38a 2023-04-03 Daco Harkes test zero termination of Utf8 string (#147) eb93bbb 2023-04-03 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#188) 2a6b643 2023-04-03 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#189) intl (https://github.com/dart-lang/intl/compare/fca552f..a958db0): a958db0 2023-03-29 Googler Internal change json_rpc_2 (https://github.com/dart-lang/json_rpc_2/compare/0280ac6..aea3bea): aea3bea 2023-03-28 Kevin Moore Fix analysis, bump min SDK to 2.19 (#93) lints (https://github.com/dart-lang/lints/compare/dfded5e..f09399a): f09399a 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#110) 9581bab 2023-03-25 Parker Lougheed Fix 'recommended' spelling in README (#109) c92e1ca 2023-03-23 Michael Thomsen Update README.md (#108) 7134608 2023-02-01 dependabot[bot] Bump actions/checkout from 3.2.0 to 3.3.0 (#98) markdown (https://github.com/dart-lang/markdown/compare/ecbffa9..d437c85): d437c85 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#529) 3550fe6 2023-04-01 dependabot[bot] Bump subosito/flutter-action from 2.8.0 to 2.10.0 (#528) d1b7907 2023-04-01 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#527) 0daf231 2023-03-31 le.chang Footnote support (#441) b96bc08 2023-03-30 Jonas Finnemann Jensen Prepare a release of 7.0.2 (#526) matcher (https://github.com/dart-lang/matcher/compare/dc310d9..61f4347): 61f4347 2023-03-21 Nate Bosch Prepare to publish (#214) mockito (https://github.com/dart-lang/mockito/compare/ed5bd84..28e8eda): 28e8eda 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 ccb9abf 2023-04-01 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 65ee0c4 2023-03-23 Nate Bosch Expand pub constraint on test_api (#615) e6ea7ad 2023-03-23 Nate Bosch GitHub Sync (#614) path (https://github.com/dart-lang/path/compare/24b58a2..cd37179): cd37179 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#139) pool (https://github.com/dart-lang/pool/compare/694cfd8..338bfb4): 338bfb4 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#67) source_map_stack_trace (https://github.com/dart-lang/source_map_stack_trace/compare/45ea368..08a81a8): 08a81a8 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#37) 4cbe06e 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#36) sse (https://github.com/dart-lang/sse/compare/8c03b73..8c3efdc): 8c3efdc 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#80) e35336a 2023-04-02 dependabot[bot] Bump nanasess/setup-chromedriver from 1.1.0 to 2.0.0 (#81) stream_channel (https://github.com/dart-lang/stream_channel/compare/a20ccd4..fe0f5e4): fe0f5e4 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#89) string_scanner (https://github.com/dart-lang/string_scanner/compare/29e471e..f7a656f): f7a656f 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#56) fe8c301 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#55) test (https://github.com/dart-lang/test/compare/cc0598b..a01b185): a01b185e 2023-03-30 Nate Bosch More smoothly handle missing compiler info (#1980) b24b4668 2023-03-27 Daco Harkes Support native assets (#1975) c3828267 2023-03-23 Nate Bosch Prepare to publish (#1974) 9035bba8 2023-03-21 Parker Lougheed Use deps.dev for OpenSSF scorecard results link (#1976) test_reflective_loader (https://github.com/dart-lang/test_reflective_loader/compare/c4c2d5c..a85a930): a85a930 2023-04-01 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#46) 27bc418 2023-04-01 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#47) tools (https://github.com/dart-lang/tools/compare/fb2dada..d40ca93): d40ca93 2023-04-03 dependabot[bot] Bump actions/labeler from 4.0.2 to 4.0.3 (#66) 4185d6d 2023-04-03 dependabot[bot] Bump coverallsapp/github-action from 1.2.4 to 2.0.0 (#65) b14d5be 2023-04-03 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#64) typed_data (https://github.com/dart-lang/typed_data/compare/f858046..d85363d): d85363d 2023-04-02 dependabot[bot] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#62) 0f57d9b 2023-04-02 dependabot[bot] Bump actions/checkout from 3.3.0 to 3.5.0 (#63) webdev (https://github.com/dart-lang/webdev/compare/c2c8b17..b139649): b139649e 2023-03-31 Elliott Brooks Don't show non-instantiated variables (#2061) 8437f60a 2023-03-31 Elliott Brooks Move project-specific getters to `TestProject` instead of `TestContext` (#2052) 652e040c 2023-03-30 Elliott Brooks Provide an app entrypoint to DWDS (#2047) 0afc9eb4 2023-03-30 Elliott Brooks Add Dart Code Metrics (#2055) 5fcbb803 2023-03-29 Elliott Brooks Apply `trailing-comma` lint (#2054) 5bd21384 2023-03-28 Elliott Brooks Skip failing webdev integration_test cases (#2051) 2d8e9c23 2023-03-24 Elliott Brooks (she/her) Adds a script for the release steps of `dwds` and `webdev` (#2049) afee8c74 2023-03-23 Elliott Brooks (she/her) Reset `webdev`, `dwds`, `test_common` after publishing (#2048) 4122b234 2023-03-22 Devon Carew update to the latest mono_repo generated CI (#2044) 2b6e9182 2023-03-22 Elliott Brooks (she/her) Prepare Webdev for `3.0.3` release (#2046) c3cbd89b 2023-03-22 Elliott Brooks (she/her) Prepare DWDS for 18.0.2 release (#2045) bb22b3a0 2023-03-22 Anna Gringauze Make debugger skip same locations in dart during stepping. (#2043) b9499819 2023-03-20 Anna Gringauze Prepare for variable names changes due to patterns support in DDC (#2042) Change-Id: I5b8d591d1b906338564cf008f935b17f85ed2813 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292922 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Devon Carew <devoncarew@google.com>
Each isolate that is created seems to take about 35 MB of memory until it is closed and GCd. This affects the number of asynchronous file system or socket operations that can be created, since they are implemented with isolates (currently). This also means that no system with more than a couple hundred isolates can work.
This seems to be true on both the debug and release ia32 builds. The following code shows the resulting memory use. If port.close() is called, then the isolates are GCd and memory use stays below 100 MB.
class A extends Isolate {
A() : super.light(); // or heavy, makes no difference.
void main() { /* port.close();*/ }
}
main() {
var a = new A();
for (var j = 0; j < 100; ++j ) {
a.spawn();
print(j);
}
}
The text was updated successfully, but these errors were encountered: