Skip to content

Commit 359cb64

Browse files
committed
logs for debugging heap size
1 parent 560464e commit 359cb64

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/JvmOption.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
package org.elasticsearch.server.cli;
1111

12+
import org.apache.logging.log4j.LogManager;
13+
import org.apache.logging.log4j.Logger;
1214
import org.elasticsearch.common.Strings;
1315
import org.elasticsearch.core.SuppressForbidden;
1416

@@ -33,6 +35,8 @@ class JvmOption {
3335
private final String value;
3436
private final String origin;
3537

38+
private static final Logger logger = LogManager.getLogger(JvmOption.class);
39+
3640
JvmOption(String value, String origin) {
3741
if (origin == null) {
3842
throw new IllegalStateException(Strings.format("""
@@ -43,6 +47,11 @@ class JvmOption {
4347
this.origin = origin;
4448
}
4549

50+
@Override
51+
public String toString() {
52+
return "{value=" + value + ", origin=" + origin + "}";
53+
}
54+
4655
public Optional<String> getValue() {
4756
return Optional.ofNullable(value);
4857
}
@@ -124,6 +133,11 @@ private static List<String> flagsFinal(final List<String> userDefinedJvmOptions)
124133
);
125134
throw new RuntimeException(message);
126135
} else {
136+
for (String line : output) {
137+
if (line.contains("MaxHeapSize")) {
138+
logger.info("@@@ JvmOption flagsFinal: {}", line);
139+
}
140+
}
127141
return output;
128142
}
129143
}

distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/JvmOptionsParser.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
package org.elasticsearch.server.cli;
1111

12+
import org.apache.logging.log4j.LogManager;
13+
import org.apache.logging.log4j.Logger;
1214
import org.elasticsearch.bootstrap.ServerArgs;
1315
import org.elasticsearch.cli.ExitCodes;
1416
import org.elasticsearch.cli.ProcessInfo;
@@ -43,6 +45,8 @@
4345
*/
4446
public final class JvmOptionsParser {
4547

48+
private static final Logger logger = LogManager.getLogger(JvmOptionsParser.class);
49+
4650
static class JvmOptionsFileParserException extends Exception {
4751

4852
private final Path jvmOptionsFile;
@@ -176,6 +180,8 @@ List<String> readJvmOptionsFiles(final Path config) throws IOException, JvmOptio
176180
final List<String> jvmOptions = new ArrayList<>();
177181

178182
for (final Path jvmOptionsFile : jvmOptionsFiles) {
183+
logger.info("READING FILE: " + jvmOptionsFile);
184+
179185
final SortedMap<Integer, String> invalidLines = new TreeMap<>();
180186
try (
181187
InputStream is = Files.newInputStream(jvmOptionsFile);
@@ -187,6 +193,11 @@ List<String> readJvmOptionsFiles(final Path config) throws IOException, JvmOptio
187193
if (invalidLines.isEmpty() == false) {
188194
throw new JvmOptionsFileParserException(jvmOptionsFile, invalidLines);
189195
}
196+
for (String option : jvmOptions) {
197+
if (option.contains("feature_flag")) {
198+
logger.info("FOUND OPTIONS: {}", option);
199+
}
200+
}
190201
}
191202
return jvmOptions;
192203
}

distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/MachineDependentHeap.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99

1010
package org.elasticsearch.server.cli;
1111

12+
import org.apache.logging.log4j.LogManager;
13+
import org.apache.logging.log4j.Logger;
14+
import org.elasticsearch.cli.Terminal;
1215
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
1316
import org.elasticsearch.common.settings.Settings;
1417
import org.elasticsearch.common.util.FeatureFlag;
@@ -40,7 +43,19 @@ public class MachineDependentHeap {
4043

4144
private static final FeatureFlag NEW_ML_MEMORY_COMPUTATION_FEATURE_FLAG = new FeatureFlag("new_ml_memory_computation");
4245

43-
public MachineDependentHeap() {}
46+
private static final Logger logger = LogManager.getLogger(MachineDependentHeap.class);
47+
48+
private final Terminal terminal;
49+
50+
private boolean useNewMlMemoryComputation = false;
51+
52+
public MachineDependentHeap() {
53+
this.terminal = null;
54+
}
55+
56+
public MachineDependentHeap(Terminal terminal) {
57+
this.terminal = terminal;
58+
}
4459

4560
/**
4661
* Calculate heap options.
@@ -55,8 +70,30 @@ public final List<String> determineHeapSettings(
5570
SystemMemoryInfo systemMemoryInfo,
5671
List<String> userDefinedJvmOptions
5772
) throws IOException, InterruptedException {
73+
if (userDefinedJvmOptions.contains("-Des.new_ml_memory_computation_feature_flag_enabled=true")
74+
|| NEW_ML_MEMORY_COMPUTATION_FEATURE_FLAG.isEnabled()) {
75+
useNewMlMemoryComputation = true;
76+
}
5877
// TODO: this could be more efficient, to only parse final options once
5978
final Map<String, JvmOption> finalJvmOptions = JvmOption.findFinalOptions(userDefinedJvmOptions);
79+
if (terminal != null) {
80+
terminal.println("@@@ contains -Des.new_ml_memory_computation_feature_flag_enabled=true --> "
81+
+ userDefinedJvmOptions.contains("-Des.new_ml_memory_computation_feature_flag_enabled=true"));
82+
terminal.println("@@@ contains -Des.inference_default_elser_feature_flag_enabled=true --> "
83+
+ userDefinedJvmOptions.contains("-Des.inference_default_elser_feature_flag_enabled=true"));
84+
terminal.println("@@@ MachineDependentHeap userDefinedJvmOptions: " + userDefinedJvmOptions);
85+
86+
terminal.println(
87+
"@@@ MachineDependentHeap determineHeapSettings: MaxHeap="
88+
+ finalJvmOptions.get("MaxHeapSize")
89+
+ " FeatureFlag="
90+
+ NEW_ML_MEMORY_COMPUTATION_FEATURE_FLAG.isEnabled()
91+
);
92+
terminal.println("@@@ MachineDependentHeap determineHeapSettings: inference_default_elser_feature_flag="
93+
+ new FeatureFlag("inference_default_elser").isEnabled());
94+
terminal.println("@@@ USER DEFINED OPTIONS = " + userDefinedJvmOptions);
95+
terminal.println("@@@ FINAL OPTIONS = " + finalJvmOptions);
96+
}
6097
if (isMaxHeapSpecified(finalJvmOptions) || isMinHeapSpecified(finalJvmOptions) || isInitialHeapSpecified(finalJvmOptions)) {
6198
// User has explicitly set memory settings so we use those
6299
return Collections.emptyList();
@@ -65,6 +102,12 @@ public final List<String> determineHeapSettings(
65102
List<DiscoveryNodeRole> roles = NodeRoleSettings.NODE_ROLES_SETTING.get(nodeSettings);
66103
long availableSystemMemory = systemMemoryInfo.availableSystemMemory();
67104
MachineNodeRole nodeRole = mapNodeRole(roles);
105+
if (terminal != null) {
106+
terminal.println(
107+
"@@@ MachineDependentHeap determineHeapSettings: setMaxHeap: "
108+
+ getHeapSizeMb(nodeSettings, nodeRole, availableSystemMemory)
109+
);
110+
}
68111
return options(getHeapSizeMb(nodeSettings, nodeRole, availableSystemMemory));
69112
}
70113

@@ -107,7 +150,7 @@ protected int getHeapSizeMb(Settings nodeSettings, MachineNodeRole role, long av
107150
case ML_ONLY -> {
108151
double heapFractionBelow16GB = 0.4;
109152
double heapFractionAbove16GB = 0.1;
110-
if (NEW_ML_MEMORY_COMPUTATION_FEATURE_FLAG.isEnabled()) {
153+
if (useNewMlMemoryComputation) {
111154
heapFractionBelow16GB = 0.4 / (1.0 + JvmErgonomics.DIRECT_MEMORY_TO_HEAP_FACTOR);
112155
heapFractionAbove16GB = 0.1 / (1.0 + JvmErgonomics.DIRECT_MEMORY_TO_HEAP_FACTOR);
113156
}

distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/ServerCli.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,13 @@ protected Command loadTool(Map<String, String> sysprops, String toolname, String
265265

266266
// protected to allow tests to override
267267
protected ServerProcess startServer(Terminal terminal, ProcessInfo processInfo, ServerArgs args) throws Exception {
268+
terminal.println("@@@ ServerCli startServer");
269+
268270
var tempDir = ServerProcessUtils.setupTempDir(processInfo);
269271
var jvmOptions = JvmOptionsParser.determineJvmOptions(args, processInfo, tempDir, new MachineDependentHeap());
272+
273+
terminal.println("@@@ ServerCli startServer: jvmOptions=" + jvmOptions);
274+
270275
var serverProcessBuilder = new ServerProcessBuilder().withTerminal(terminal)
271276
.withProcessInfo(processInfo)
272277
.withServerArgs(args)

0 commit comments

Comments
 (0)