unifi: add options to control JVM heap size

Our controller was acting very sluggish at times and increasing
available RAM for the JVM fixes this.

Changed files
+28 -3
nixos
modules
services
networking
+28 -3
nixos/modules/services/networking/unifi.nix
···
let
cfg = config.services.unifi;
stateDir = "/var/lib/unifi";
-
cmd = "@${pkgs.jre}/bin/java java -jar ${stateDir}/lib/ace.jar";
+
cmd = ''
+
@${pkgs.jre}/bin/java java \
+
${optionalString (cfg.initialJavaHeapSize != null) "-Xms${(toString cfg.initialJavaHeapSize)}m"} \
+
${optionalString (cfg.maximumJavaHeapSize != null) "-Xmx${(toString cfg.maximumJavaHeapSize)}m"} \
+
-jar ${stateDir}/lib/ace.jar
+
'';
mountPoints = [
{
what = "${pkgs.unifi}/dl";
···
'';
};
+
services.unifi.initialJavaHeapSize = mkOption {
+
type = types.nullOr types.int;
+
default = null;
+
example = 1024;
+
description = ''
+
Set the initial heap size for the JVM in MB. If this option isn't set, the
+
JVM will decide this value at runtime.
+
'';
+
};
+
+
services.unifi.maximumJavaHeapSize = mkOption {
+
type = types.nullOr types.int;
+
default = null;
+
example = 4096;
+
description = ''
+
Set the maximimum heap size for the JVM in MB. If this option isn't set, the
+
JVM will decide this value at runtime.
+
'';
+
};
+
};
config = mkIf cfg.enable {
···
serviceConfig = {
Type = "simple";
-
ExecStart = "${cmd} start";
-
ExecStop = "${cmd} stop";
+
ExecStart = "${(removeSuffix "\n" cmd)} start";
+
ExecStop = "${(removeSuffix "\n" cmd)} stop";
User = "unifi";
PermissionsStartOnly = true;
UMask = "0077";