-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Adjust the process ulimit to the maximum allowed on startup #17464
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
Merged
zanieb
merged 7 commits into
astral-sh:main
from
zaniebot:claude/add-ulimit-adjustment-pbq7y
Jan 15, 2026
Merged
Adjust the process ulimit to the maximum allowed on startup #17464
zanieb
merged 7 commits into
astral-sh:main
from
zaniebot:claude/add-ulimit-adjustment-pbq7y
Jan 15, 2026
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
035a889 to
023a554
Compare
zanieb
commented
Jan 14, 2026
d3904a9 to
056f8cf
Compare
661f085 to
185c3dd
Compare
Linux defaults to a low open file limit (1024) and macOS also defaults to a low soft limit (256). On modern multi-core machines, uv may schedule more concurrent work than these limits allow, causing "too many open files" errors. This adds a new `uv-unix` crate that raises the soft limit to the hard limit at startup. The raised limit is inherited by child processes spawned via `uv run`. See: astral-sh#16999
The ulimit adjustment is now gated behind the `adjust-ulimit` preview feature, which can be enabled via `--preview` or `--preview-features=adjust-ulimit`.
This matches the typical Linux default (`/proc/sys/fs/nr_open`) and avoids issues with extremely high limits that can break code expecting i32 values or cause timeouts when iterating over all possible FDs. OpenJDK uses the same cap for similar reasons. See: https://bugs.openjdk.org/browse/JDK-8324577 See: oracle/graal#11136
Use `rlim_t` instead of `u64` for the `MAX_NOFILE_LIMIT` constant since `rlim_t` is platform-specific (`u64` on Linux/macOS, `i64` on FreeBSD). Add a `rlim_t_to_u64` helper for safe conversion that returns `None` for negative values (defensive, since resource limits should never be negative in practice). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
185c3dd to
f0b5397
Compare
zsol
approved these changes
Jan 15, 2026
Member
zsol
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
konstin
approved these changes
Jan 15, 2026
Comment on lines
+21
to
+32
| /// We cap at 0x100000 (1,048,576) to match the typical Linux default (`/proc/sys/fs/nr_open`) | ||
| /// and to avoid issues with extremely high limits. | ||
| /// | ||
| /// `OpenJDK` uses this same cap because: | ||
| /// | ||
| /// 1. Some code breaks if `RLIMIT_NOFILE` exceeds `i32::MAX` (despite the type being `u64`) | ||
| /// 2. Code that iterates over all possible FDs, e.g., to close them, can timeout | ||
| /// | ||
| /// See: <https://bugs.openjdk.org/browse/JDK-8324577> | ||
| /// See: <https://github.com/oracle/graal/issues/11136> | ||
| /// | ||
| /// Note: `rlim_t` is platform-specific (`u64` on Linux/macOS, `i64` on FreeBSD). |
Member
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💯 for the extensive comment
e3b4a6f to
803cb3c
Compare
tmeijn
pushed a commit
to tmeijn/dotfiles
that referenced
this pull request
Jan 17, 2026
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.9.24` → `0.9.26` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>astral-sh/uv (astral-sh/uv)</summary> ### [`v0.9.26`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0926) [Compare Source](astral-sh/uv@0.9.25...0.9.26) Released on 2026-01-15. ##### Python - Add CPython 3.15.0a5 ##### Enhancements - Add a hint to update uv when a managed Python download is not found ([#​17461](astral-sh/uv#17461)) - Improve cache initialization failure error message ([#​17469](astral-sh/uv#17469)) - Improve error message for abi3 wheels on free-threaded Python ([#​17442](astral-sh/uv#17442)) - Add support for `--no-sources-package` ([#​14910](astral-sh/uv#14910)) ##### Preview features - Add `METADATA.json` and `WHEEL.json` in uv build backend ([#​15510](astral-sh/uv#15510)) - Add support for GCS request signing ([#​17474](astral-sh/uv#17474)) - Adjust the process ulimit to the maximum allowed on startup ([#​17464](astral-sh/uv#17464)) ##### Bug fixes - Lock to avoid concurrent refresh of pyx tokens ([#​17479](astral-sh/uv#17479)) ##### Documentation - Add linting and formatting instructions to the CONTRIBUTING guide ([#​17470](astral-sh/uv#17470)) - Avoid rendering `pyproject.toml` examples for more system-level settings ([#​17462](astral-sh/uv#17462)) ### [`v0.9.25`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0925) [Compare Source](astral-sh/uv@0.9.24...0.9.25) Released on 2026-01-13. ##### Python - Add CPython 3.15.0a4 - Upgrade Tcl/Tk used by CPython to 9.0 ##### Enhancements - Add `--compile-bytecode` to `uv python install` and `uv python upgrade` to compile the standard library ([#​17088](astral-sh/uv#17088)) - Allow disabling `exclude-newer` per package ([#​16854](astral-sh/uv#16854)) - Broadcast `WM_SETTINGCHANGE` on `uv tool update-shell` ([#​17404](astral-sh/uv#17404)) ##### Preview features - Detect workspace from `uv run` target ([#​17423](astral-sh/uv#17423)) ##### Bug fixes - Avoid unwrapping size for file responses ([#​17434](astral-sh/uv#17434)) - Use keyring authentication when retrieving `tool@latest` version ([#​17448](astral-sh/uv#17448)) - Use latest Pyodide version for each python version ([#​17372](astral-sh/uv#17372)) - Improve trampoline file handle closing ([#​17374](astral-sh/uv#17374)) - Fix error message when installing musl python on armv7 ([#​17213](astral-sh/uv#17213)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44MC4xIiwidXBkYXRlZEluVmVyIjoiNDIuODEuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90IiwiYXV0b21hdGlvbjpib3QtYXV0aG9yZWQiLCJkZXBlbmRlbmN5LXR5cGU6OnBhdGNoIl19-->
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #16999
See the commentary at #16999 (comment) for precedence in other tools.
This is non-fatal on error, but there are various scary behaviors from increased ulimit sizes so I've gated this with preview.