-
Notifications
You must be signed in to change notification settings - Fork 168
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
x64 V8 builds run out of memory #4027
Comments
It happens while running:
|
According to https://ci.nodejs.org/job/node-test-commit-v8-linux/nodes=benchmark-ubuntu2204-intel-64,v8test=v8test/ it looks like this started on 13 Feb 2025. https://ci.nodejs.org/job/node-test-commit-v8-linux/6409/ (Feb 12) passed on nodejs/node@9ce1fff. I don't think any of nodejs/node@9ce1fff...a7f648c would explain the breakage though. |
Oh, I really thought it was the V8 update. I didn't see it also failed with |
apt logs around that date:
|
I can only guess that something changed in Chromium's tooling (depot_tools et al). |
I saw https://ci.nodejs.org/job/node-test-commit-v8-linux/nodes=benchmark-ubuntu2204-intel-64,v8test=v8test/6438/ was running so ssh'ed into the machine to see what it was doing while it was running. The build appears to be spawning a lot of python3 processes: root@test-hetzner-ubuntu2204-x64-2 ~ # ps -ef | grep python3
...
iojs 2611881 2611878 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611884 2611881 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611887 2611884 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611890 2611887 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611893 2611890 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611896 2611893 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611899 2611896 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
iojs 2611902 2611899 0 10:41 ? 00:00:00 python3 /home/iojs/build/workspace/node-test-commit-v8-linux/deps/v8/_depot_tools/ninja.py -C out.gn/x64.release/ -j 20 d8 cctest inspector-test
root@test-hetzner-ubuntu2204-x64-2 ~ # ps -ef | grep python3 | wc -l
13160
root@test-hetzner-ubuntu2204-x64-2 ~ # all of them with the command line:
|
Maybe this |
Maybe related to https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6259139? It landed on the day our CI started failing. |
(I'm in a meeting right now, but my suspicion is the proxy is spawning itself instead of the actual |
Would lowering |
It is this change. There's logic to skip recursively calling the ninja proxy, but it was changed in that CL from if bin_dir.rstrip(os.sep).endswith("depot_tools"):
# skip depot_tools to avoid calling ninja.py infinitely.
continue to bin_dir = bin_dir.rstrip(os.sep)
if os.path.basename(bin_dir) == "depot_tools":
# skip depot_tools to avoid calling ninja.py infinitely.
continue In our builds we have two depot_tools directories on the path:
The old code (using I don't know/remember why we have two depot_tools directories (seems one of those should be redundant?). The second of those is an explicit # setup depot tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools
export PATH=$WORKSPACE/depot_tools:$PATH I'm wondering if the first ( DEPOT_TOOLS_DIR="$(cd _depot_tools && pwd)"
# shellcheck disable=SC2086
PATH="$DEPOT_TOOLS_DIR":$PATH tools/dev/v8gen.py "$BUILD_ARCH_TYPE" $V8_BUILD_OPTIONS
PATH="$DEPOT_TOOLS_DIR":$PATH ninja -C "out.gn/$BUILD_ARCH_TYPE/" "${JOBS_ARG}" d8 cctest inspector-test |
Looks like it's actually coming from https://github.com/nodejs/node/blob/4e222aea82abe0d5a4d82b5c975e094dae6c9d61/tools/v8/node_common.py#L21 depot_tools = os.path.join(v8_path, "_depot_tools") # Check out depot_tools if necessary.
depot_tools = node_common.EnsureDepotTools(v8_path, True) |
I've opened nodejs/node#57330 to rename the clone we make with |
Recent changes to `depot_tools`'s `ninja.py` proxy is causing infinite recursion in our V8 CI builds as we checkout `depot_tools` into a directory with a leading `_` (i.e. `_depot_tools`) and the proxy now checks for an exact match (i.e. `== "depot_tools"`) instead of `endswith("depot_tools")`. Rename our checkout to `depot_tools` (without the leading `_`) so the `ninja.py` proxy can exclude it when reinvoking `ninja`. PR-URL: #57330 Fixes: nodejs/build#4027 Refs: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6259139 Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Marco Ippolito <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Christian Clauss <[email protected]>
Recent changes to `depot_tools`'s `ninja.py` proxy is causing infinite recursion in our V8 CI builds as we checkout `depot_tools` into a directory with a leading `_` (i.e. `_depot_tools`) and the proxy now checks for an exact match (i.e. `== "depot_tools"`) instead of `endswith("depot_tools")`. Rename our checkout to `depot_tools` (without the leading `_`) so the `ninja.py` proxy can exclude it when reinvoking `ninja`. PR-URL: #57330 Fixes: nodejs/build#4027 Refs: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6259139 Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Marco Ippolito <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Christian Clauss <[email protected]>
Recent changes to `depot_tools`'s `ninja.py` proxy is causing infinite recursion in our V8 CI builds as we checkout `depot_tools` into a directory with a leading `_` (i.e. `_depot_tools`) and the proxy now checks for an exact match (i.e. `== "depot_tools"`) instead of `endswith("depot_tools")`. Rename our checkout to `depot_tools` (without the leading `_`) so the `ninja.py` proxy can exclude it when reinvoking `ninja`. PR-URL: #57330 Fixes: nodejs/build#4027 Refs: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6259139 Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Marco Ippolito <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Christian Clauss <[email protected]>
Recent changes to `depot_tools`'s `ninja.py` proxy is causing infinite recursion in our V8 CI builds as we checkout `depot_tools` into a directory with a leading `_` (i.e. `_depot_tools`) and the proxy now checks for an exact match (i.e. `== "depot_tools"`) instead of `endswith("depot_tools")`. Rename our checkout to `depot_tools` (without the leading `_`) so the `ninja.py` proxy can exclude it when reinvoking `ninja`. PR-URL: #57330 Fixes: nodejs/build#4027 Refs: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6259139 Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Marco Ippolito <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Christian Clauss <[email protected]>
Example: https://ci.nodejs.org/job/node-test-commit-v8-linux/6426/nodes=benchmark-ubuntu2204-intel-64,v8test=v8test/console
Here's what I see after some time if I run the build manually:
The text was updated successfully, but these errors were encountered: