diff --git a/CI/vale/styles/Vocab/Besu/accept.txt b/CI/vale/styles/Vocab/Besu/accept.txt index 91f8e0f2c3c..a5d1731b80f 100644 --- a/CI/vale/styles/Vocab/Besu/accept.txt +++ b/CI/vale/styles/Vocab/Besu/accept.txt @@ -54,6 +54,7 @@ Filestore(s)? [gG]eth GitHub Gitter +glibc Goerli GoQuorum [gG]olang diff --git a/docs/public-networks/how-to/troubleshoot/performance.md b/docs/public-networks/how-to/troubleshoot/performance.md new file mode 100644 index 00000000000..9c62a2efb2c --- /dev/null +++ b/docs/public-networks/how-to/troubleshoot/performance.md @@ -0,0 +1,41 @@ +--- +description: Troubleshoot poor performance and resource constraints. +--- + +# Troubleshoot poor performance and resource constraints + +Your hardware, machine environment, and node configuration can affect your node's ability to serve +requests and perform [validator duties](../../concepts/proof-of-stake/index.md), including +[attestation performance](../../concepts/proof-of-stake/attestations.md). + +If you notice high resource usage when [monitoring your node](../monitor/index.md), you can +try the following suggestions: + +* Disable swapping. + Besu is an I/O intensive application, especially during sync, enabling swapping hurts Besu's performance. + You can disable swap at the OS level. + [This article](https://www.tecmint.com/disable-swap-partition/) provides information on how to + disable swap (and caveats). +* Use a high performance SSD disk with NVMe, since Besu's performance bottleneck is often slow disk I/O. +* Configure memory and RAM: + * If you have RAM constraints, use [OpenJ9](../../get-started/system-requirements.md) if you're + running on `x86_64` Linux architecture to reduce memory usage. + * Review and change your [Java heap size](../configure-jvm/manage-memory.md) if necessary. + 5GB is an appropriate limit. + Higher values may improve sync time, but can be reduced after completing sync. + * Ensure Besu is using [jemalloc](../../get-started/install/binary-distribution.md). + * If you have 32GB RAM or more, set the `Xplugin-rocksdb-high-spec-enabled` configuration option + to `true`. + Don't use this on RAM machines with 16GB RAM or less if you're running a consensus client on the + same hardware. +* If you're running on ARM64, make sure the glibc version is greater than 2.29. + If not, Besu uses a Java implementation instead of the native one for some precompiled contracts, + which results in lower performance. + * On Ubuntu, run `ldd --version`. + See [the methods for other environments](https://dev.to/0xbf/how-to-get-glibc-version-c-lang-26he). +* Pay attention to what processes are running on the same machine/VM as Besu. + Java applications, with default settings, are designed to run alone on the machine. + You can run your consensus client on the same machine, but this adds overhead on Besu, and vice + versa (on CPU cache misses, CPU scheduler latency, IO, etc.). + +You should continue to monitor your node after following these suggestions. diff --git a/mkdocs.navigation.yml b/mkdocs.navigation.yml index 31c9c59be6e..0d82d98fab6 100644 --- a/mkdocs.navigation.yml +++ b/mkdocs.navigation.yml @@ -63,6 +63,7 @@ nav: - Troubleshoot: - Use EVM tool: public-networks/how-to/troubleshoot/evm-tool.md - Trace transactions: public-networks/how-to/troubleshoot/trace-transactions.md + - Troubleshoot performance: public-networks/how-to/troubleshoot/performance.md - Troubleshoot peering: public-networks/how-to/troubleshoot/peering.md - Concepts: - The Merge: public-networks/concepts/the-merge.md