Set sshd.threads to at least 4.
Otherwise, weird hangs can occur, for example when using Git LFS.
See https://github.com/git-lfs/git-lfs/issues/3727
Change-Id: Ic19cb136bb37d62d8339b85c514c180f733e3465
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index 89ea2e8..f219e48 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -4239,7 +4239,8 @@
If additional requests are received while all threads are busy they
are queued and serviced in a first-come-first-served order.
+
-By default, 2x the number of CPUs available to the JVM.
+By default, 2x the number of CPUs available to the JVM (but at least 4
+threads).
+
[NOTE]
When SSH daemon is enabled then this setting also defines the max number of
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/ThreadSettingsConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/ThreadSettingsConfig.java
index 6cb32cc..c20e0a4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/config/ThreadSettingsConfig.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/ThreadSettingsConfig.java
@@ -28,7 +28,7 @@
@Inject
ThreadSettingsConfig(@GerritServerConfig Config cfg) {
int cores = Runtime.getRuntime().availableProcessors();
- sshdThreads = cfg.getInt("sshd", "threads", 2 * cores);
+ sshdThreads = cfg.getInt("sshd", "threads", Math.max(4, 2 * cores));
httpdMaxThreads = cfg.getInt("httpd", "maxThreads", 25);
int defaultDatabasePoolLimit = sshdThreads + httpdMaxThreads + 2;
databasePoolLimit = cfg.getInt("database", "poolLimit", defaultDatabasePoolLimit);