diff --git a/docs/server/kb/linux-thread-names.mdx b/docs/server/kb/linux-thread-names.mdx new file mode 100644 index 0000000000..fc1749fde1 --- /dev/null +++ b/docs/server/kb/linux-thread-names.mdx @@ -0,0 +1,176 @@ +--- +title: "Linux: Thread names" +sidebar_label: "Linux: Thread names" +description: "Understand how RavenDB names its threads on Linux to work within the kernel's 15-character limit, and how to interpret thread names when monitoring the server process." +sidebar_position: 5 +--- + +import Admonition from '@theme/Admonition'; +import Panel from "@site/src/components/Panel"; +import ContentFrame from "@site/src/components/ContentFrame"; + +# Linux: Thread names + + + +* In this article: + * [Overview](linux-thread-names.mdx#overview) + * [Listing RavenDB threads](linux-thread-names.mdx#listing-ravendb-threads) + * [Thread name reference](linux-thread-names.mdx#thread-name-reference) + * [Indexing](linux-thread-names.mdx#indexing) + * [Transaction merging](linux-thread-names.mdx#transaction-merging) + * [Replication](linux-thread-names.mdx#replication) + * [ETL and queue sink](linux-thread-names.mdx#etl-and-queue-sink) + * [Backup](linux-thread-names.mdx#backup) + * [Cluster transactions](linux-thread-names.mdx#cluster-transactions) + * [Rachis consensus](linux-thread-names.mdx#rachis-consensus) + + + + + + + +## Overview + +The Linux kernel enforces a hard limit of **15 characters** on thread names (16 bytes including the null terminator). Thread names longer than 15 characters are silently truncated when the thread is created. This makes identifying RavenDB threads difficult when monitoring the server process. +For example, a thread named `"Indexing of Orders of NorthWind"` is truncated to `"Indexing of Ord"` in `ps` output, giving no indication of which index or database it belongs to. + +RavenDB addresses this by maintaining two names for every thread it creates: + +- A **full name** - the human-readable name used internally and returned by the API (for example, `"Indexing of Orders of NorthWind"`). +- A **short name** - a structured abbreviated format used as the actual kernel thread name on Linux and macOS (for example, `"Idx NorthWind Orders"`). + +On Windows, the full name is used directly, since Windows does not enforce a 15-character limit. + +The full name is always accessible via the `/admin/debug/threads/runaway` endpoint, regardless of operating system. + + + + + + + + + +## Listing RavenDB threads + +To list all threads in the RavenDB server process together with their kernel thread names, use `ps`: + +```bash +ps -L -o pid,lwp,pri,nice,start,stat,bsdtime,cmd,comm -C Raven.Server +``` + +
+ +The `COMMAND` column displays the kernel thread name. On Linux this is the short name; on Windows the full name is shown. + +To retrieve full thread names at any time, query the debug endpoint: + +``` +GET /admin/debug/threads/runaway +``` + +
+ +This endpoint returns all threads sorted by CPU duration and reports the full name for each thread, regardless of what the operating system exposes. +See [Debug Endpoints](../../server/troubleshooting/debug-routes.mdx#debug-endpoints). + +
+ +
+ + + + + +## Thread name reference + +The tables below list the short name format used on Linux for each thread type. Variables enclosed in `{}` are substituted at runtime with the actual values for that thread instance. +For example, `Idx {dbName} {idxName}` for an indexing thread on database `NorthWind` running index `Orders/ByCompany` becomes `Idx NorthWind Orders/ByCompany` at runtime. + + + +Note that the short name formats shown here can themselves exceed 15 characters once the runtime variables are filled in. The kernel will truncate them further. +For example, `Idx NorthWind Orders/ByCompany` becomes `Idx NorthWind O` in `ps` output. The practical value of the prefix (e.g. `Idx`, `TxMrgr`, `IncRep`) is that it always fits within the 15-character window and identifies the thread type. + +To get the full name of a thread you spotted in `ps`, use the OS thread ID shown in the `LWP` column (`LWP` stands for Light Weight Process, which is the Linux kernel's term for a thread): + +1. Call `GET /admin/debug/threads/runaway`. +2. Find the entry where `Id` matches the `LWP` value. +3. Read the `Name` field - this is the full name for that thread. + + + +### Indexing + +| Short name format | Description | +|---|---| +| `Idx {dbName} {idxName}` | An indexing thread processing index `{idxName}` in database `{dbName}`. | + +--- + +### Transaction merging + +| Short name format | Description | +|---|---| +| `TxMrgr {name}` | A transaction merger thread for database or resource `{name}`. | + +--- + +### Replication + +| Short name format | Description | +|---|---| +| `IncRep {dbName} from {sourceDbName}` | An incoming replication thread receiving data from `{sourceDbName}` into `{dbName}`. | +| `OutRpl {dbName} to {destination}` | An outgoing replication thread sending data from `{dbName}` to `{destination}`. | +| `PllRepHb {dbName} to {destination}` | An outgoing pull replication thread acting as hub, sending from `{dbName}` to `{destination}`. | +| `PllRepSnk {dbName} at {url}` | A pull replication thread acting as sink, connecting `{dbName}` to the hub at `{url}`. | + +--- + +### ETL and queue sink + +| Short name format | Description | +|---|---| +| `Etl {tag} {name}` | An ETL process thread for task `{name}` identified by connection tag `{tag}`. | +| `QuSnk {tag} {name}` | A queue sink process thread for task `{name}` identified by connection tag `{tag}`. | + +--- + +### Backup + +| Short name format | Description | +|---|---| +| `BkpTsk {dbName}` | A backup task coordinator thread for database `{dbName}`. | +| `Bkp {dbName}` | A backup execution thread for database `{dbName}`. | +| `UpBkp {dbName} to {targetName}` | A thread uploading a backup file for `{dbName}` to backup target `{targetName}`. | +| `DlBkp {dbName} from {targetName}` | A thread deleting a backup file for `{dbName}` from backup target `{targetName}`. | + +--- + +### Cluster transactions + +| Short name format | Description | +|---|---| +| `ClstrTx {dbName}` | A cluster transaction processing thread for database `{dbName}`. | + +--- + +### Rachis consensus + +| Short name format | Description | +|---|---| +| `CnsnsLdr-{engineTag} IT {term}` | The Rachis consensus leader for engine `{engineTag}` at term `{term}`. (`IT` = in term.) | +| `Cnddte for {engineTag}` | A candidate thread participating in leader election for engine `{engineTag}`. | +| `CndAm for {engineTag}>{tag}` | A candidate ambassador thread communicating with node `{tag}` during election for `{engineTag}`. | +| `Fllwr {connection}` | A follower thread handling replication from the cluster leader via connection `{connection}`. | +| `FllwrAmb {tag}` | A follower ambassador thread maintaining communication with node `{tag}`. | +| `Elctr {source}` | An elector thread processing election messages from `{source}`. | +| `Observer {term}` | The cluster observer thread monitoring cluster health at term `{term}`. | +| `HrtbtSpv {serverTag} to {clusterTag}` | A heartbeat supervisor thread from node `{serverTag}` to cluster node `{clusterTag}`. | +| `HrtbtWrkr {leader} IT {term}` | A heartbeat worker thread communicating with leader `{leader}` at term `{term}`. (`IT` = in term.) | + + + + diff --git a/docs/server/troubleshooting/debug-routes.mdx b/docs/server/troubleshooting/debug-routes.mdx index ad8e7bdaf7..f20e90c9c5 100644 --- a/docs/server/troubleshooting/debug-routes.mdx +++ b/docs/server/troubleshooting/debug-routes.mdx @@ -43,7 +43,7 @@ For the endpoints that begin with `/databases/*/`, replace `*` with the name of | /admin/debug/proc/meminfo | GET | | Return /proc/<RavenDB ProcNum>/meminfo | Available only on Linux | | /admin/debug/proc/stats | GET | | Return /proc/<RavenDB ProcNum>/stats | Available only on Linux | | /admin/debug/proc/status | GET | | Return /proc/<RavenDB ProcNum>/status | Available only on Linux | -| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration | | +| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration. Returns full thread names even on Linux, where the OS shows abbreviated names. See [Linux: Thread names](../kb/linux-thread-names.mdx). | | | /build/version | GET | | Returns product build number, major version, commit hash and full version number | | | /databases/*/admin/debug/cluster/txinfo | GET | | List the incomplete [cluster transaction commands](../clustering/cluster-transactions.mdx#cluster--cluster-wide-transactions) | | | /databases/*/admin/debug/txinfo | GET | | List | | diff --git a/docs/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png b/docs/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png index 624ee9377e..e218da22ae 100644 Binary files a/docs/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png and b/docs/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png differ diff --git a/docs/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx b/docs/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx new file mode 100644 index 0000000000..31ad4fc035 Binary files /dev/null and b/docs/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx differ diff --git a/package-lock.json b/package-lock.json index 35b8f6642c..2ff8347aa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "postcss": "^8.5.6", "tailwindcss": "^4.1.11", + "tsx": "^4.21.0", "typescript": "~5.6.2" }, "engines": { @@ -248,6 +249,7 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.41.0.tgz", "integrity": "sha512-G9I2atg1ShtFp0t7zwleP6aPS4DcZvsV4uoQOripp16aR6VJzbEnKFPLW4OFXzX7avgZSpYeBAS+Zx4FOgmpPw==", "license": "MIT", + "peer": true, "dependencies": { "@algolia/client-common": "5.41.0", "@algolia/requester-browser-xhr": "5.41.0", @@ -398,6 +400,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2185,6 +2188,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2207,6 +2211,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2316,6 +2321,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2737,6 +2743,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3494,6 +3501,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.9.2.tgz", "integrity": "sha512-DEVIwhbrZZ4ir31X+qQNEQqDWkgCJUV6kiPPAd2MGTY8n5/n0c4B8qA5k1ipF2izwH00JEf0h6Daaut71zzkyw==", "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/types": "3.9.2", "@rspack/core": "^1.5.0", @@ -3662,6 +3670,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -4196,6 +4205,448 @@ "dev": true, "license": "MIT" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -4666,6 +5117,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -5220,6 +5672,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5324,6 +5777,7 @@ "integrity": "sha512-oExhY90bes5pDTVrei0xlMVosTxwd/NMafIpqsC4dMbRYZ5KB981l/CX8tMnGsagTplj/RcG9BeRYmV6/J5m3w==", "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" @@ -6307,6 +6761,7 @@ "version": "19.1.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -6476,6 +6931,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.39.0", "@typescript-eslint/types": "8.39.0", @@ -6895,6 +7351,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6975,6 +7432,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -7018,6 +7476,7 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.41.0.tgz", "integrity": "sha512-9E4b3rJmYbBkn7e3aAPt1as+VVnRhsR4qwRRgOzpeyz4PAOuwKh0HI4AN6mTrqK0S0M9fCCSTOUnuJ8gPY/tvA==", "license": "MIT", + "peer": true, "dependencies": { "@algolia/abtesting": "1.7.0", "@algolia/client-abtesting": "5.41.0", @@ -7757,6 +8216,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -8752,6 +9212,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9795,6 +10256,48 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -9835,6 +10338,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -10722,6 +11226,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11099,6 +11604,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -15961,6 +16479,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16561,6 +17080,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -17464,6 +17984,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -18336,6 +18857,7 @@ "version": "19.1.0", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -18344,6 +18866,7 @@ "version": "19.1.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "peer": true, "dependencies": { "scheduler": "^0.26.0" }, @@ -18395,6 +18918,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "peer": true, "dependencies": { "@types/react": "*" }, @@ -18421,6 +18945,7 @@ "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -19006,6 +19531,16 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -20574,7 +21109,28 @@ "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "peer": true + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -20732,6 +21288,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "devOptional": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -21083,6 +21640,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -21288,6 +21846,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -21986,6 +22545,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/versioned_docs/version-6.2/server/kb/linux-thread-names.mdx b/versioned_docs/version-6.2/server/kb/linux-thread-names.mdx new file mode 100644 index 0000000000..fc1749fde1 --- /dev/null +++ b/versioned_docs/version-6.2/server/kb/linux-thread-names.mdx @@ -0,0 +1,176 @@ +--- +title: "Linux: Thread names" +sidebar_label: "Linux: Thread names" +description: "Understand how RavenDB names its threads on Linux to work within the kernel's 15-character limit, and how to interpret thread names when monitoring the server process." +sidebar_position: 5 +--- + +import Admonition from '@theme/Admonition'; +import Panel from "@site/src/components/Panel"; +import ContentFrame from "@site/src/components/ContentFrame"; + +# Linux: Thread names + + + +* In this article: + * [Overview](linux-thread-names.mdx#overview) + * [Listing RavenDB threads](linux-thread-names.mdx#listing-ravendb-threads) + * [Thread name reference](linux-thread-names.mdx#thread-name-reference) + * [Indexing](linux-thread-names.mdx#indexing) + * [Transaction merging](linux-thread-names.mdx#transaction-merging) + * [Replication](linux-thread-names.mdx#replication) + * [ETL and queue sink](linux-thread-names.mdx#etl-and-queue-sink) + * [Backup](linux-thread-names.mdx#backup) + * [Cluster transactions](linux-thread-names.mdx#cluster-transactions) + * [Rachis consensus](linux-thread-names.mdx#rachis-consensus) + + + + + + + +## Overview + +The Linux kernel enforces a hard limit of **15 characters** on thread names (16 bytes including the null terminator). Thread names longer than 15 characters are silently truncated when the thread is created. This makes identifying RavenDB threads difficult when monitoring the server process. +For example, a thread named `"Indexing of Orders of NorthWind"` is truncated to `"Indexing of Ord"` in `ps` output, giving no indication of which index or database it belongs to. + +RavenDB addresses this by maintaining two names for every thread it creates: + +- A **full name** - the human-readable name used internally and returned by the API (for example, `"Indexing of Orders of NorthWind"`). +- A **short name** - a structured abbreviated format used as the actual kernel thread name on Linux and macOS (for example, `"Idx NorthWind Orders"`). + +On Windows, the full name is used directly, since Windows does not enforce a 15-character limit. + +The full name is always accessible via the `/admin/debug/threads/runaway` endpoint, regardless of operating system. + + + + + + + + + +## Listing RavenDB threads + +To list all threads in the RavenDB server process together with their kernel thread names, use `ps`: + +```bash +ps -L -o pid,lwp,pri,nice,start,stat,bsdtime,cmd,comm -C Raven.Server +``` + +
+ +The `COMMAND` column displays the kernel thread name. On Linux this is the short name; on Windows the full name is shown. + +To retrieve full thread names at any time, query the debug endpoint: + +``` +GET /admin/debug/threads/runaway +``` + +
+ +This endpoint returns all threads sorted by CPU duration and reports the full name for each thread, regardless of what the operating system exposes. +See [Debug Endpoints](../../server/troubleshooting/debug-routes.mdx#debug-endpoints). + +
+ +
+ + + + + +## Thread name reference + +The tables below list the short name format used on Linux for each thread type. Variables enclosed in `{}` are substituted at runtime with the actual values for that thread instance. +For example, `Idx {dbName} {idxName}` for an indexing thread on database `NorthWind` running index `Orders/ByCompany` becomes `Idx NorthWind Orders/ByCompany` at runtime. + + + +Note that the short name formats shown here can themselves exceed 15 characters once the runtime variables are filled in. The kernel will truncate them further. +For example, `Idx NorthWind Orders/ByCompany` becomes `Idx NorthWind O` in `ps` output. The practical value of the prefix (e.g. `Idx`, `TxMrgr`, `IncRep`) is that it always fits within the 15-character window and identifies the thread type. + +To get the full name of a thread you spotted in `ps`, use the OS thread ID shown in the `LWP` column (`LWP` stands for Light Weight Process, which is the Linux kernel's term for a thread): + +1. Call `GET /admin/debug/threads/runaway`. +2. Find the entry where `Id` matches the `LWP` value. +3. Read the `Name` field - this is the full name for that thread. + + + +### Indexing + +| Short name format | Description | +|---|---| +| `Idx {dbName} {idxName}` | An indexing thread processing index `{idxName}` in database `{dbName}`. | + +--- + +### Transaction merging + +| Short name format | Description | +|---|---| +| `TxMrgr {name}` | A transaction merger thread for database or resource `{name}`. | + +--- + +### Replication + +| Short name format | Description | +|---|---| +| `IncRep {dbName} from {sourceDbName}` | An incoming replication thread receiving data from `{sourceDbName}` into `{dbName}`. | +| `OutRpl {dbName} to {destination}` | An outgoing replication thread sending data from `{dbName}` to `{destination}`. | +| `PllRepHb {dbName} to {destination}` | An outgoing pull replication thread acting as hub, sending from `{dbName}` to `{destination}`. | +| `PllRepSnk {dbName} at {url}` | A pull replication thread acting as sink, connecting `{dbName}` to the hub at `{url}`. | + +--- + +### ETL and queue sink + +| Short name format | Description | +|---|---| +| `Etl {tag} {name}` | An ETL process thread for task `{name}` identified by connection tag `{tag}`. | +| `QuSnk {tag} {name}` | A queue sink process thread for task `{name}` identified by connection tag `{tag}`. | + +--- + +### Backup + +| Short name format | Description | +|---|---| +| `BkpTsk {dbName}` | A backup task coordinator thread for database `{dbName}`. | +| `Bkp {dbName}` | A backup execution thread for database `{dbName}`. | +| `UpBkp {dbName} to {targetName}` | A thread uploading a backup file for `{dbName}` to backup target `{targetName}`. | +| `DlBkp {dbName} from {targetName}` | A thread deleting a backup file for `{dbName}` from backup target `{targetName}`. | + +--- + +### Cluster transactions + +| Short name format | Description | +|---|---| +| `ClstrTx {dbName}` | A cluster transaction processing thread for database `{dbName}`. | + +--- + +### Rachis consensus + +| Short name format | Description | +|---|---| +| `CnsnsLdr-{engineTag} IT {term}` | The Rachis consensus leader for engine `{engineTag}` at term `{term}`. (`IT` = in term.) | +| `Cnddte for {engineTag}` | A candidate thread participating in leader election for engine `{engineTag}`. | +| `CndAm for {engineTag}>{tag}` | A candidate ambassador thread communicating with node `{tag}` during election for `{engineTag}`. | +| `Fllwr {connection}` | A follower thread handling replication from the cluster leader via connection `{connection}`. | +| `FllwrAmb {tag}` | A follower ambassador thread maintaining communication with node `{tag}`. | +| `Elctr {source}` | An elector thread processing election messages from `{source}`. | +| `Observer {term}` | The cluster observer thread monitoring cluster health at term `{term}`. | +| `HrtbtSpv {serverTag} to {clusterTag}` | A heartbeat supervisor thread from node `{serverTag}` to cluster node `{clusterTag}`. | +| `HrtbtWrkr {leader} IT {term}` | A heartbeat worker thread communicating with leader `{leader}` at term `{term}`. (`IT` = in term.) | + + + + diff --git a/versioned_docs/version-6.2/server/troubleshooting/debug-routes.mdx b/versioned_docs/version-6.2/server/troubleshooting/debug-routes.mdx index c6035cff25..f20e90c9c5 100644 --- a/versioned_docs/version-6.2/server/troubleshooting/debug-routes.mdx +++ b/versioned_docs/version-6.2/server/troubleshooting/debug-routes.mdx @@ -1,6 +1,7 @@ --- title: "Troubleshooting: Debug Endpoints" sidebar_label: Debug Endpoints +description: "Access RavenDB debug HTTP endpoints to inspect server internals including memory usage, thread pools, queries, and cluster state." sidebar_position: 0 --- @@ -42,11 +43,11 @@ For the endpoints that begin with `/databases/*/`, replace `*` with the name of | /admin/debug/proc/meminfo | GET | | Return /proc/<RavenDB ProcNum>/meminfo | Available only on Linux | | /admin/debug/proc/stats | GET | | Return /proc/<RavenDB ProcNum>/stats | Available only on Linux | | /admin/debug/proc/status | GET | | Return /proc/<RavenDB ProcNum>/status | Available only on Linux | -| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration | | +| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration. Returns full thread names even on Linux, where the OS shows abbreviated names. See [Linux: Thread names](../kb/linux-thread-names.mdx). | | | /build/version | GET | | Returns product build number, major version, commit hash and full version number | | | /databases/*/admin/debug/cluster/txinfo | GET | | List the incomplete [cluster transaction commands](../clustering/cluster-transactions.mdx#cluster--cluster-wide-transactions) | | | /databases/*/admin/debug/txinfo | GET | | List | | -| /databases/*/debug/documents/huge | GET | | List IDs of documents which exceed `PerformanceHints.`<br />`Documents.`<br />`HugeDocumentSizeInMb` setting | | +| /databases/*/debug/documents/huge | GET | | List IDs of documents which exceed `PerformanceHints.`
`Documents.`
`HugeDocumentSizeInMb` setting | | | /databases/*/debug/identities | GET | | | | | /databases/*/debug/info-package | GET | | Save debug package information for later analysis | | | /databases/*/debug/io-metrics | GET | | Get current IO metrics: "Writes, Flush, Sync" for each storage environment | | diff --git a/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png b/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png index 624ee9377e..e218da22ae 100644 Binary files a/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png and b/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png differ diff --git a/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx b/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx new file mode 100644 index 0000000000..31ad4fc035 Binary files /dev/null and b/versioned_docs/version-6.2/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx differ diff --git a/versioned_docs/version-7.0/server/kb/linux-thread-names.mdx b/versioned_docs/version-7.0/server/kb/linux-thread-names.mdx new file mode 100644 index 0000000000..fc1749fde1 --- /dev/null +++ b/versioned_docs/version-7.0/server/kb/linux-thread-names.mdx @@ -0,0 +1,176 @@ +--- +title: "Linux: Thread names" +sidebar_label: "Linux: Thread names" +description: "Understand how RavenDB names its threads on Linux to work within the kernel's 15-character limit, and how to interpret thread names when monitoring the server process." +sidebar_position: 5 +--- + +import Admonition from '@theme/Admonition'; +import Panel from "@site/src/components/Panel"; +import ContentFrame from "@site/src/components/ContentFrame"; + +# Linux: Thread names + + + +* In this article: + * [Overview](linux-thread-names.mdx#overview) + * [Listing RavenDB threads](linux-thread-names.mdx#listing-ravendb-threads) + * [Thread name reference](linux-thread-names.mdx#thread-name-reference) + * [Indexing](linux-thread-names.mdx#indexing) + * [Transaction merging](linux-thread-names.mdx#transaction-merging) + * [Replication](linux-thread-names.mdx#replication) + * [ETL and queue sink](linux-thread-names.mdx#etl-and-queue-sink) + * [Backup](linux-thread-names.mdx#backup) + * [Cluster transactions](linux-thread-names.mdx#cluster-transactions) + * [Rachis consensus](linux-thread-names.mdx#rachis-consensus) + + + + + + + +## Overview + +The Linux kernel enforces a hard limit of **15 characters** on thread names (16 bytes including the null terminator). Thread names longer than 15 characters are silently truncated when the thread is created. This makes identifying RavenDB threads difficult when monitoring the server process. +For example, a thread named `"Indexing of Orders of NorthWind"` is truncated to `"Indexing of Ord"` in `ps` output, giving no indication of which index or database it belongs to. + +RavenDB addresses this by maintaining two names for every thread it creates: + +- A **full name** - the human-readable name used internally and returned by the API (for example, `"Indexing of Orders of NorthWind"`). +- A **short name** - a structured abbreviated format used as the actual kernel thread name on Linux and macOS (for example, `"Idx NorthWind Orders"`). + +On Windows, the full name is used directly, since Windows does not enforce a 15-character limit. + +The full name is always accessible via the `/admin/debug/threads/runaway` endpoint, regardless of operating system. + + + + + + + + + +## Listing RavenDB threads + +To list all threads in the RavenDB server process together with their kernel thread names, use `ps`: + +```bash +ps -L -o pid,lwp,pri,nice,start,stat,bsdtime,cmd,comm -C Raven.Server +``` + +
+ +The `COMMAND` column displays the kernel thread name. On Linux this is the short name; on Windows the full name is shown. + +To retrieve full thread names at any time, query the debug endpoint: + +``` +GET /admin/debug/threads/runaway +``` + +
+ +This endpoint returns all threads sorted by CPU duration and reports the full name for each thread, regardless of what the operating system exposes. +See [Debug Endpoints](../../server/troubleshooting/debug-routes.mdx#debug-endpoints). + +
+ +
+ + + + + +## Thread name reference + +The tables below list the short name format used on Linux for each thread type. Variables enclosed in `{}` are substituted at runtime with the actual values for that thread instance. +For example, `Idx {dbName} {idxName}` for an indexing thread on database `NorthWind` running index `Orders/ByCompany` becomes `Idx NorthWind Orders/ByCompany` at runtime. + + + +Note that the short name formats shown here can themselves exceed 15 characters once the runtime variables are filled in. The kernel will truncate them further. +For example, `Idx NorthWind Orders/ByCompany` becomes `Idx NorthWind O` in `ps` output. The practical value of the prefix (e.g. `Idx`, `TxMrgr`, `IncRep`) is that it always fits within the 15-character window and identifies the thread type. + +To get the full name of a thread you spotted in `ps`, use the OS thread ID shown in the `LWP` column (`LWP` stands for Light Weight Process, which is the Linux kernel's term for a thread): + +1. Call `GET /admin/debug/threads/runaway`. +2. Find the entry where `Id` matches the `LWP` value. +3. Read the `Name` field - this is the full name for that thread. + + + +### Indexing + +| Short name format | Description | +|---|---| +| `Idx {dbName} {idxName}` | An indexing thread processing index `{idxName}` in database `{dbName}`. | + +--- + +### Transaction merging + +| Short name format | Description | +|---|---| +| `TxMrgr {name}` | A transaction merger thread for database or resource `{name}`. | + +--- + +### Replication + +| Short name format | Description | +|---|---| +| `IncRep {dbName} from {sourceDbName}` | An incoming replication thread receiving data from `{sourceDbName}` into `{dbName}`. | +| `OutRpl {dbName} to {destination}` | An outgoing replication thread sending data from `{dbName}` to `{destination}`. | +| `PllRepHb {dbName} to {destination}` | An outgoing pull replication thread acting as hub, sending from `{dbName}` to `{destination}`. | +| `PllRepSnk {dbName} at {url}` | A pull replication thread acting as sink, connecting `{dbName}` to the hub at `{url}`. | + +--- + +### ETL and queue sink + +| Short name format | Description | +|---|---| +| `Etl {tag} {name}` | An ETL process thread for task `{name}` identified by connection tag `{tag}`. | +| `QuSnk {tag} {name}` | A queue sink process thread for task `{name}` identified by connection tag `{tag}`. | + +--- + +### Backup + +| Short name format | Description | +|---|---| +| `BkpTsk {dbName}` | A backup task coordinator thread for database `{dbName}`. | +| `Bkp {dbName}` | A backup execution thread for database `{dbName}`. | +| `UpBkp {dbName} to {targetName}` | A thread uploading a backup file for `{dbName}` to backup target `{targetName}`. | +| `DlBkp {dbName} from {targetName}` | A thread deleting a backup file for `{dbName}` from backup target `{targetName}`. | + +--- + +### Cluster transactions + +| Short name format | Description | +|---|---| +| `ClstrTx {dbName}` | A cluster transaction processing thread for database `{dbName}`. | + +--- + +### Rachis consensus + +| Short name format | Description | +|---|---| +| `CnsnsLdr-{engineTag} IT {term}` | The Rachis consensus leader for engine `{engineTag}` at term `{term}`. (`IT` = in term.) | +| `Cnddte for {engineTag}` | A candidate thread participating in leader election for engine `{engineTag}`. | +| `CndAm for {engineTag}>{tag}` | A candidate ambassador thread communicating with node `{tag}` during election for `{engineTag}`. | +| `Fllwr {connection}` | A follower thread handling replication from the cluster leader via connection `{connection}`. | +| `FllwrAmb {tag}` | A follower ambassador thread maintaining communication with node `{tag}`. | +| `Elctr {source}` | An elector thread processing election messages from `{source}`. | +| `Observer {term}` | The cluster observer thread monitoring cluster health at term `{term}`. | +| `HrtbtSpv {serverTag} to {clusterTag}` | A heartbeat supervisor thread from node `{serverTag}` to cluster node `{clusterTag}`. | +| `HrtbtWrkr {leader} IT {term}` | A heartbeat worker thread communicating with leader `{leader}` at term `{term}`. (`IT` = in term.) | + + + + diff --git a/versioned_docs/version-7.0/server/troubleshooting/debug-routes.mdx b/versioned_docs/version-7.0/server/troubleshooting/debug-routes.mdx index c6035cff25..f20e90c9c5 100644 --- a/versioned_docs/version-7.0/server/troubleshooting/debug-routes.mdx +++ b/versioned_docs/version-7.0/server/troubleshooting/debug-routes.mdx @@ -1,6 +1,7 @@ --- title: "Troubleshooting: Debug Endpoints" sidebar_label: Debug Endpoints +description: "Access RavenDB debug HTTP endpoints to inspect server internals including memory usage, thread pools, queries, and cluster state." sidebar_position: 0 --- @@ -42,11 +43,11 @@ For the endpoints that begin with `/databases/*/`, replace `*` with the name of | /admin/debug/proc/meminfo | GET | | Return /proc/<RavenDB ProcNum>/meminfo | Available only on Linux | | /admin/debug/proc/stats | GET | | Return /proc/<RavenDB ProcNum>/stats | Available only on Linux | | /admin/debug/proc/status | GET | | Return /proc/<RavenDB ProcNum>/status | Available only on Linux | -| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration | | +| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration. Returns full thread names even on Linux, where the OS shows abbreviated names. See [Linux: Thread names](../kb/linux-thread-names.mdx). | | | /build/version | GET | | Returns product build number, major version, commit hash and full version number | | | /databases/*/admin/debug/cluster/txinfo | GET | | List the incomplete [cluster transaction commands](../clustering/cluster-transactions.mdx#cluster--cluster-wide-transactions) | | | /databases/*/admin/debug/txinfo | GET | | List | | -| /databases/*/debug/documents/huge | GET | | List IDs of documents which exceed `PerformanceHints.`<br />`Documents.`<br />`HugeDocumentSizeInMb` setting | | +| /databases/*/debug/documents/huge | GET | | List IDs of documents which exceed `PerformanceHints.`
`Documents.`
`HugeDocumentSizeInMb` setting | | | /databases/*/debug/identities | GET | | | | | /databases/*/debug/info-package | GET | | Save debug package information for later analysis | | | /databases/*/debug/io-metrics | GET | | Get current IO metrics: "Writes, Flush, Sync" for each storage environment | | diff --git a/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png b/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png index 624ee9377e..e218da22ae 100644 Binary files a/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png and b/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png differ diff --git a/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx b/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx new file mode 100644 index 0000000000..31ad4fc035 Binary files /dev/null and b/versioned_docs/version-7.0/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx differ diff --git a/versioned_docs/version-7.1/server/kb/linux-thread-names.mdx b/versioned_docs/version-7.1/server/kb/linux-thread-names.mdx new file mode 100644 index 0000000000..fc1749fde1 --- /dev/null +++ b/versioned_docs/version-7.1/server/kb/linux-thread-names.mdx @@ -0,0 +1,176 @@ +--- +title: "Linux: Thread names" +sidebar_label: "Linux: Thread names" +description: "Understand how RavenDB names its threads on Linux to work within the kernel's 15-character limit, and how to interpret thread names when monitoring the server process." +sidebar_position: 5 +--- + +import Admonition from '@theme/Admonition'; +import Panel from "@site/src/components/Panel"; +import ContentFrame from "@site/src/components/ContentFrame"; + +# Linux: Thread names + + + +* In this article: + * [Overview](linux-thread-names.mdx#overview) + * [Listing RavenDB threads](linux-thread-names.mdx#listing-ravendb-threads) + * [Thread name reference](linux-thread-names.mdx#thread-name-reference) + * [Indexing](linux-thread-names.mdx#indexing) + * [Transaction merging](linux-thread-names.mdx#transaction-merging) + * [Replication](linux-thread-names.mdx#replication) + * [ETL and queue sink](linux-thread-names.mdx#etl-and-queue-sink) + * [Backup](linux-thread-names.mdx#backup) + * [Cluster transactions](linux-thread-names.mdx#cluster-transactions) + * [Rachis consensus](linux-thread-names.mdx#rachis-consensus) + + + + + + + +## Overview + +The Linux kernel enforces a hard limit of **15 characters** on thread names (16 bytes including the null terminator). Thread names longer than 15 characters are silently truncated when the thread is created. This makes identifying RavenDB threads difficult when monitoring the server process. +For example, a thread named `"Indexing of Orders of NorthWind"` is truncated to `"Indexing of Ord"` in `ps` output, giving no indication of which index or database it belongs to. + +RavenDB addresses this by maintaining two names for every thread it creates: + +- A **full name** - the human-readable name used internally and returned by the API (for example, `"Indexing of Orders of NorthWind"`). +- A **short name** - a structured abbreviated format used as the actual kernel thread name on Linux and macOS (for example, `"Idx NorthWind Orders"`). + +On Windows, the full name is used directly, since Windows does not enforce a 15-character limit. + +The full name is always accessible via the `/admin/debug/threads/runaway` endpoint, regardless of operating system. + + + + + + + + + +## Listing RavenDB threads + +To list all threads in the RavenDB server process together with their kernel thread names, use `ps`: + +```bash +ps -L -o pid,lwp,pri,nice,start,stat,bsdtime,cmd,comm -C Raven.Server +``` + +
+ +The `COMMAND` column displays the kernel thread name. On Linux this is the short name; on Windows the full name is shown. + +To retrieve full thread names at any time, query the debug endpoint: + +``` +GET /admin/debug/threads/runaway +``` + +
+ +This endpoint returns all threads sorted by CPU duration and reports the full name for each thread, regardless of what the operating system exposes. +See [Debug Endpoints](../../server/troubleshooting/debug-routes.mdx#debug-endpoints). + +
+ +
+ + + + + +## Thread name reference + +The tables below list the short name format used on Linux for each thread type. Variables enclosed in `{}` are substituted at runtime with the actual values for that thread instance. +For example, `Idx {dbName} {idxName}` for an indexing thread on database `NorthWind` running index `Orders/ByCompany` becomes `Idx NorthWind Orders/ByCompany` at runtime. + + + +Note that the short name formats shown here can themselves exceed 15 characters once the runtime variables are filled in. The kernel will truncate them further. +For example, `Idx NorthWind Orders/ByCompany` becomes `Idx NorthWind O` in `ps` output. The practical value of the prefix (e.g. `Idx`, `TxMrgr`, `IncRep`) is that it always fits within the 15-character window and identifies the thread type. + +To get the full name of a thread you spotted in `ps`, use the OS thread ID shown in the `LWP` column (`LWP` stands for Light Weight Process, which is the Linux kernel's term for a thread): + +1. Call `GET /admin/debug/threads/runaway`. +2. Find the entry where `Id` matches the `LWP` value. +3. Read the `Name` field - this is the full name for that thread. + + + +### Indexing + +| Short name format | Description | +|---|---| +| `Idx {dbName} {idxName}` | An indexing thread processing index `{idxName}` in database `{dbName}`. | + +--- + +### Transaction merging + +| Short name format | Description | +|---|---| +| `TxMrgr {name}` | A transaction merger thread for database or resource `{name}`. | + +--- + +### Replication + +| Short name format | Description | +|---|---| +| `IncRep {dbName} from {sourceDbName}` | An incoming replication thread receiving data from `{sourceDbName}` into `{dbName}`. | +| `OutRpl {dbName} to {destination}` | An outgoing replication thread sending data from `{dbName}` to `{destination}`. | +| `PllRepHb {dbName} to {destination}` | An outgoing pull replication thread acting as hub, sending from `{dbName}` to `{destination}`. | +| `PllRepSnk {dbName} at {url}` | A pull replication thread acting as sink, connecting `{dbName}` to the hub at `{url}`. | + +--- + +### ETL and queue sink + +| Short name format | Description | +|---|---| +| `Etl {tag} {name}` | An ETL process thread for task `{name}` identified by connection tag `{tag}`. | +| `QuSnk {tag} {name}` | A queue sink process thread for task `{name}` identified by connection tag `{tag}`. | + +--- + +### Backup + +| Short name format | Description | +|---|---| +| `BkpTsk {dbName}` | A backup task coordinator thread for database `{dbName}`. | +| `Bkp {dbName}` | A backup execution thread for database `{dbName}`. | +| `UpBkp {dbName} to {targetName}` | A thread uploading a backup file for `{dbName}` to backup target `{targetName}`. | +| `DlBkp {dbName} from {targetName}` | A thread deleting a backup file for `{dbName}` from backup target `{targetName}`. | + +--- + +### Cluster transactions + +| Short name format | Description | +|---|---| +| `ClstrTx {dbName}` | A cluster transaction processing thread for database `{dbName}`. | + +--- + +### Rachis consensus + +| Short name format | Description | +|---|---| +| `CnsnsLdr-{engineTag} IT {term}` | The Rachis consensus leader for engine `{engineTag}` at term `{term}`. (`IT` = in term.) | +| `Cnddte for {engineTag}` | A candidate thread participating in leader election for engine `{engineTag}`. | +| `CndAm for {engineTag}>{tag}` | A candidate ambassador thread communicating with node `{tag}` during election for `{engineTag}`. | +| `Fllwr {connection}` | A follower thread handling replication from the cluster leader via connection `{connection}`. | +| `FllwrAmb {tag}` | A follower ambassador thread maintaining communication with node `{tag}`. | +| `Elctr {source}` | An elector thread processing election messages from `{source}`. | +| `Observer {term}` | The cluster observer thread monitoring cluster health at term `{term}`. | +| `HrtbtSpv {serverTag} to {clusterTag}` | A heartbeat supervisor thread from node `{serverTag}` to cluster node `{clusterTag}`. | +| `HrtbtWrkr {leader} IT {term}` | A heartbeat worker thread communicating with leader `{leader}` at term `{term}`. (`IT` = in term.) | + + + + diff --git a/versioned_docs/version-7.1/server/troubleshooting/debug-routes.mdx b/versioned_docs/version-7.1/server/troubleshooting/debug-routes.mdx index e211b984d8..f20e90c9c5 100644 --- a/versioned_docs/version-7.1/server/troubleshooting/debug-routes.mdx +++ b/versioned_docs/version-7.1/server/troubleshooting/debug-routes.mdx @@ -1,6 +1,7 @@ --- title: "Troubleshooting: Debug Endpoints" sidebar_label: Debug Endpoints +description: "Access RavenDB debug HTTP endpoints to inspect server internals including memory usage, thread pools, queries, and cluster state." sidebar_position: 0 --- @@ -42,7 +43,7 @@ For the endpoints that begin with `/databases/*/`, replace `*` with the name of | /admin/debug/proc/meminfo | GET | | Return /proc/<RavenDB ProcNum>/meminfo | Available only on Linux | | /admin/debug/proc/stats | GET | | Return /proc/<RavenDB ProcNum>/stats | Available only on Linux | | /admin/debug/proc/status | GET | | Return /proc/<RavenDB ProcNum>/status | Available only on Linux | -| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration | | +| /admin/debug/threads/runaway | GET | | List all threads and their names, sorted by duration. Returns full thread names even on Linux, where the OS shows abbreviated names. See [Linux: Thread names](../kb/linux-thread-names.mdx). | | | /build/version | GET | | Returns product build number, major version, commit hash and full version number | | | /databases/*/admin/debug/cluster/txinfo | GET | | List the incomplete [cluster transaction commands](../clustering/cluster-transactions.mdx#cluster--cluster-wide-transactions) | | | /databases/*/admin/debug/txinfo | GET | | List | | diff --git a/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png b/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png index 624ee9377e..e218da22ae 100644 Binary files a/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png and b/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/cluster-dashboard-13-traffic-per-database-widget.png differ diff --git a/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx b/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx new file mode 100644 index 0000000000..31ad4fc035 Binary files /dev/null and b/versioned_docs/version-7.1/studio/cluster/cluster-dashboard/assets/snag/cluster-dashboard-13-traffic-per-database-widget.snagx differ