diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b411bc..e7be052 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,26 @@ and this project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html) ## [Unreleased] +## [0.83.0] - 2026-10-29 + +Needs DirXMLDev 0.59.0. + +### Fixed + +- A large project no longer runs the server out of memory on the schema and provisioning pages + (#177). Each of their requests read and parsed the whole tree again, and a page sends several at + once. They now read the tree the outline keeps, read again only when its files change. +- The warning that `hosted.properties` "is readable by other users" no longer shows on a folder + that ignores `chmod`, such as a Windows folder mounted into the container, where its advice + can't be followed (DirXMLDev 0.59.0). + +### Changed + +- The server may use three quarters of the container's memory (`-XX:MaxRAMPercentage=75`); Java's + default is a quarter. `IDM_JAVA_OPTS` in `idmweb.env` still overrides it (`-Xmx4g`). The first + log line says how much it has (`heap up to … MB`), and the quickstart and hosted install say + what to do when the log shows `OutOfMemoryError`. + ## [0.82.0] - 2026-10-28 Needs DirXMLDev 0.58.0. diff --git a/docs/hosted-install.md b/docs/hosted-install.md index 5c568ef..2f65df3 100644 --- a/docs/hosted-install.md +++ b/docs/hosted-install.md @@ -134,4 +134,7 @@ An agent (CI, a coding agent, a script) does not install anything: customer keeps logs; set `audit.keep=0` if nothing may be deleted. - Sessions are kept in `/sessions.json` (owner-only): a restart signs nobody out, and each person gets their last project and branch back on their next session. +- Memory: the server takes up to three quarters of the container's memory (its first log line + says `heap up to … MB`). Size the container for the largest project; `IDM_JAVA_OPTS=-Xmx…` in + `idmweb.env` sets the heap instead. - `bin/smoke-container.sh` runs the image end to end on a workstation with Docker. diff --git a/docs/quickstart.md b/docs/quickstart.md index 147aeec..f3dd139 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -193,6 +193,18 @@ command there (`docker exec idmweb idm vault.status --env lab`) binds as you do - **One per machine:** the container is named `idmweb`. - **The server log:** `docker logs idmweb` (add `--tail 200` for the end). When the page reports "an internal error", the stack trace is there; attach it to an issue. +- **Memory:** the server takes up to three quarters of the container's memory; its first log line + says how much (`heap up to … MB`). Docker's own limit can be as little as 2 GB, which a large + project can fill: the log then shows `OutOfMemoryError`. Give Docker more memory + (Docker Desktop: **Settings → Resources**; WSL: `memory=` in `.wslconfig`), or set the heap + yourself with a line in `idmweb.env`, which `setup` keeps: + + ``` + IDM_JAVA_OPTS=-Xmx4g + ``` + + Then `docker compose -f "$HOME/idmweb/compose.yml" up -d` again. The same setting reaches + `docker exec idmweb idm …`. - **Moving to a server for a team:** [hosted-install.md](hosted-install.md) is the same image behind a proxy with TLS and your identity provider. Push the folder's `repo.git` to GitHub or GitLab and point the server's project at it. diff --git a/hosted/docker/bin/idmweb b/hosted/docker/bin/idmweb index 31e1dfb..2d9997a 100755 --- a/hosted/docker/bin/idmweb +++ b/hosted/docker/bin/idmweb @@ -1,8 +1,10 @@ #!/bin/sh # The web server inside the container, on the same class path as idm. set -e +# Java takes a quarter of the container's memory unless told: let the server have three +# quarters (#177). IDM_JAVA_OPTS comes after, so an -Xmx there wins. IDM_HOME=${IDM_HOME:-/opt/idmweb} IDM_LIB=${IDM_LIB:-/opt/idm/lib} CP="$IDM_HOME/lib/dirxml-dev-web.jar:$IDM_HOME/lib/dirxml-dev.jar:$IDM_HOME/lib/dirxml-simulator.jar:$IDM_HOME/lib/dirxml-trace-core.jar:$IDM_HOME/lib/postgresql.jar:$IDM_HOME/lib/console-auth.jar:$IDM_HOME/lib/jldap.jar" for j in "$IDM_LIB"/*.jar; do [ -f "$j" ] && CP="$CP:$j"; done -exec java ${IDM_JAVA_OPTS:-} -Didmweb.home="$IDM_HOME" -Didm.home="$IDM_HOME" -cp "$CP" com.pointblue.dirxml.web.Serve "$@" +exec java -XX:MaxRAMPercentage=75 ${IDM_JAVA_OPTS:-} -Didmweb.home="$IDM_HOME" -Didm.home="$IDM_HOME" -cp "$CP" com.pointblue.dirxml.web.Serve "$@" diff --git a/pom.xml b/pom.xml index f7358f9..fc60eb0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.pointblue.dirxml dirxml-dev-web - 0.82.0 + 0.83.0 MIT License @@ -23,7 +23,7 @@ - 0.58.0 + 0.59.0 1.7.0