Skip to content

Commit

Permalink
GH-482 ProfilerRuntimeCPU.MAX_STRING_LENGTH can be changed in JDBC se…
Browse files Browse the repository at this point in the history
…ttings UI
  • Loading branch information
thurka committed Nov 27, 2023
1 parent 9687d03 commit 2de679f
Show file tree
Hide file tree
Showing 18 changed files with 138 additions and 15 deletions.
2 changes: 1 addition & 1 deletion visualvm/libs.profiler/lib.profiler.common/manifest.mf
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Manifest-Version: 1.0
OpenIDE-Module: org.graalvm.visualvm.lib.common/2
OpenIDE-Module-Localizing-Bundle: org/graalvm/visualvm/lib/common/Bundle.properties
OpenIDE-Module-Specification-Version: 2.8
OpenIDE-Module-Specification-Version: 2.9
OpenIDE-Module-Needs: org.graalvm.visualvm.lib.common.Profiler

Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ questions.
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.15</specification-version>
<specification-version>2.16</specification-version>
</run-dependency>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public class ProfilingSettings {
public static final String PROP_INSTRUMENT_METHOD_INVOKE = "profiler.settings.instrument.method.invoke"; //NOI18N
public static final String PROP_INSTRUMENT_SPAWNED_THREADS = "profiler.settings.instrument.spawned.threads"; //NOI18N
public static final String PROP_N_PROFILED_THREADS_LIMIT = "profiler.settings.n.profiled.threads.limit"; //NOI18N
public static final String PROP_MAX_STRING_LENGTH = "profiler.settings.max.string.length"; //NOI18N
public static final String PROP_STACK_DEPTH_LIMIT = "profiler.settings.stack.depth.limit"; //NOI18N
public static final String PROP_SORT_RESULTS_BY_THREAD_CPU_TIME = "profiler.settings.sort.results.by.thread.cpu.time"; //NOI18N
public static final String PROP_SAMPLING_INTERVAL = "profiler.settings.sampling.interval"; //NOI18N
Expand Down Expand Up @@ -150,6 +151,7 @@ public class ProfilingSettings {
private int codeRegionCPUResBufSize = 1000;
private int cpuProfilingType = CommonConstants.CPU_INSTR_FULL;
private int instrScheme = CommonConstants.INSTRSCHEME_LAZY;
private int maxStringLength = CommonConstants.MAX_STRING_LENGTH_DEFAULT;
private int nProfiledThreadsLimit = 32;
private int stackDepthLimit = Integer.MAX_VALUE;
private int profilingType = PROFILE_MONITOR;
Expand Down Expand Up @@ -405,6 +407,14 @@ public int getNProfiledThreadsLimit() {
return nProfiledThreadsLimit;
}

public void setMaxStringLength(int maxLength) {
maxStringLength = maxLength;
}

public int getMaxStringLength() {
return maxStringLength;
}

public void setStackDepthLimit(int num) {
stackDepthLimit = num;
}
Expand Down Expand Up @@ -575,6 +585,7 @@ public void applySettings(final ProfilerEngineSettings settings) {
settings.setNProfiledThreadsLimit(Integer.MAX_VALUE); // zero or negative value means we do not limit it, just remember value for the UI
}

settings.setMaxStringLength(getMaxStringLength());
settings.setStackDepthLimit(getStackDepthLimit());
settings.setSortResultsByThreadCPUTime(getSortResultsByThreadCPUTime());

Expand Down Expand Up @@ -632,6 +643,7 @@ public void copySettingsInto(final ProfilingSettings settings) {
settings.setInstrumentMethodInvoke(getInstrumentMethodInvoke());
settings.setInstrumentSpawnedThreads(getInstrumentSpawnedThreads());
settings.setNProfiledThreadsLimit(getNProfiledThreadsLimit());
settings.setMaxStringLength(getMaxStringLength());
settings.setStackDepthLimit(getStackDepthLimit());
settings.setSortResultsByThreadCPUTime(getSortResultsByThreadCPUTime());

Expand Down Expand Up @@ -693,6 +705,8 @@ public String debug() {
sb.append('\n'); //NOI18N
sb.append("nProfiledThreadsLimit: ").append(getNProfiledThreadsLimit()); //NOI18N
sb.append('\n'); //NOI18N
sb.append("maxStringLength: ").append(getMaxStringLength()); //NOI18N
sb.append('\n'); //NOI18N
sb.append("stackDepthLimit: ").append(getStackDepthLimit()); //NOI18N
sb.append('\n'); //NOI18N
sb.append("sortResultsByThreadCPUTime: ").append(getSortResultsByThreadCPUTime()); //NOI18N
Expand Down Expand Up @@ -764,6 +778,7 @@ public void load(final Map props, final String prefix) {
setInstrumentSpawnedThreads(Boolean.valueOf(getProperty(props, prefix + PROP_INSTRUMENT_SPAWNED_THREADS, "false"))
.booleanValue()); //NOI18N
setNProfiledThreadsLimit(Integer.parseInt(getProperty(props, prefix + PROP_N_PROFILED_THREADS_LIMIT, "32"))); //NOI18N
setMaxStringLength(Integer.parseInt(getProperty(props, prefix + PROP_MAX_STRING_LENGTH, Integer.toString(CommonConstants.MAX_STRING_LENGTH_DEFAULT))));
setStackDepthLimit(Integer.parseInt(getProperty(props, prefix + PROP_STACK_DEPTH_LIMIT, String.valueOf(Integer.MAX_VALUE))));
setSortResultsByThreadCPUTime(Boolean.valueOf(getProperty(props, prefix + PROP_SORT_RESULTS_BY_THREAD_CPU_TIME, "false"))
.booleanValue()); //NOI18N
Expand Down Expand Up @@ -882,6 +897,7 @@ public void store(final Map props, final String prefix) {
props.put(prefix + PROP_INSTRUMENT_METHOD_INVOKE, Boolean.toString(getInstrumentMethodInvoke()));
props.put(prefix + PROP_INSTRUMENT_SPAWNED_THREADS, Boolean.toString(getInstrumentSpawnedThreads()));
props.put(prefix + PROP_N_PROFILED_THREADS_LIMIT, Integer.toString(getNProfiledThreadsLimit()));
props.put(prefix + PROP_MAX_STRING_LENGTH, Integer.toString(getMaxStringLength()));
props.put(prefix + PROP_STACK_DEPTH_LIMIT, Integer.toString(getStackDepthLimit()));
props.put(prefix + PROP_SORT_RESULTS_BY_THREAD_CPU_TIME, Boolean.toString(getSortResultsByThreadCPUTime()));
props.put(prefix + PROP_SAMPLING_FREQUENCY, Integer.toString(getSamplingFrequency()));
Expand Down
2 changes: 1 addition & 1 deletion visualvm/libs.profiler/lib.profiler/manifest.mf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Manifest-Version: 1.0
OpenIDE-Module: org.graalvm.visualvm.lib.jfluid/2
OpenIDE-Module-Localizing-Bundle: org/graalvm/visualvm/lib/jfluid/Bundle.properties
OpenIDE-Module-Specification-Version: 2.15
OpenIDE-Module-Specification-Version: 2.16

Original file line number Diff line number Diff line change
Expand Up @@ -1225,6 +1225,7 @@ public void sendSetInstrumentationParamsCmd(boolean changeableOnly)
throws ClientUtils.TargetAppOrVMTerminated {
SetChangeableInstrParamsCommand cmd = new SetChangeableInstrParamsCommand(settings.isLockContentionMonitoringEnabled(),
settings.getNProfiledThreadsLimit(),
settings.getMaxStringLength(),
settings.getStackDepthLimit(),
settings.getSamplingInterval(),
settings.getAllocTrackEvery(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public final class ProfilerEngineSettings implements CommonConstants, Cloneable
private boolean lockContentionMonitoringEnabled;
private boolean threadsSamplingEnabled;
private int allocStackTraceLimit = -5; // Negative number means full (unlimited) depth actually used, although the limit is preserved
private int maxStringLength = MAX_STRING_LENGTH_DEFAULT;
private int allocTrackEvery = 10;
private int architecture; // system architecture 32bit/64bit
private int codeRegionCPUResBufSize = 1000;
Expand Down Expand Up @@ -277,6 +278,16 @@ public int getNProfiledThreadsLimit() {
return nProfiledThreadsLimit;
}

public void setMaxStringLength(int maxLength) {
if (maxLength > MAX_STRING_LENGTH_TOP_LIMIT)
throw new IllegalArgumentException(maxLength+" is over top limit "+MAX_STRING_LENGTH_TOP_LIMIT); // NOI18N
maxStringLength = maxLength;
}

public int getMaxStringLength() {
return maxStringLength;
}

public void setStackDepthLimit(int num) {
stackDepthLimit = num;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ public interface CommonConstants {

/** Size of the event buffer, used to store/read rough profiling data */
public static final int EVENT_BUFFER_SIZE_IN_BYTES = 1200000;
/** Default for max string size (in chars) sent as value of parameter from TA */
public static final int MAX_STRING_LENGTH_DEFAULT = 1024;
/** Max limit for MAX_STRING_LENGTH_DEFAULT */
public static final int MAX_STRING_LENGTH_TOP_LIMIT = 4200;

// Codes of various profiling events, that are generated and stored in the buffer file by server and
// then retrieved by tool
Expand Down Expand Up @@ -319,5 +323,6 @@ public interface CommonConstants {
public static final int AGENT_VERSION_90 = 18;
public static final int AGENT_VERSION_VISUALVM_20 = 19;
public static final int AGENT_VERSION_VISUALVM_206 = 20;
public static final int CURRENT_AGENT_VERSION = AGENT_VERSION_VISUALVM_206;
public static final int AGENT_VERSION_VISUALVM_218 = 21;
public static final int CURRENT_AGENT_VERSION = AGENT_VERSION_VISUALVM_218;
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class ProfilerRuntimeCPU extends ProfilerRuntime {
//~ Static fields/initializers -----------------------------------------------------------------------------------------------

private static final boolean DEBUG = false;
private static final int MAX_STRING_LENGTH = 2048;
private static int maxStringLength = MAX_STRING_LENGTH_DEFAULT; // in chars
static final Object NO_RET_VALUE = new Object();
private static int nProfiledThreadsLimit;
protected static int nProfiledThreadsAllowed;
Expand Down Expand Up @@ -94,6 +94,10 @@ public static void setNProfiledThreadsLimit(int num) {
nProfiledThreadsLimit = nProfiledThreadsAllowed = num;
}

public static void setMaxStringLength(int maxLength) {
maxStringLength = maxLength;
}

public static void setStackDepthLimit(int num) {
stackDepthLimit = num;
}
Expand Down Expand Up @@ -784,12 +788,12 @@ static String convertToString(Object o) {
}

private static int truncatedByteLength(String s) {
int length = s.length()*2;
int length = s.length();

if (length < MAX_STRING_LENGTH) {
return length;
if (length < maxStringLength) {
return length*2;
}
return MAX_STRING_LENGTH;
return maxStringLength*2;
}

private static String getObjectId(Object o, String clazz) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1458,6 +1458,7 @@ public void run() {
lockContentionMonitoring = scipCmd.isLockContentionMonitoringEnabled();
ProfilerRuntime.setLockContentionMonitoringEnabled(lockContentionMonitoring);
ProfilerRuntimeCPU.setNProfiledThreadsLimit(scipCmd.getNProfiledThreadsLimit());
ProfilerRuntimeCPU.setMaxStringLength(scipCmd.getMaxStringLength());
ProfilerRuntimeCPU.setStackDepthLimit(scipCmd.getStackDepthLimit());
ProfilerRuntimeCPUSampledInstr.setSamplingInterval(scipCmd.getSamplingInterval());
ProfilerRuntimeSampler.setSamplngFrequency(scipCmd.getThreadsSamplingFrequency());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public class SetChangeableInstrParamsCommand extends Command {
private boolean threadsSamplingEnabled;
private boolean lockContentionMonitoringEnabled;
private int nProfiledThreadsLimit;
private int maxStringLength;
private int stackDepthLimit;
private int objAllocStackSamplingDepth;
private int objAllocStackSamplingInterval;
Expand All @@ -55,14 +56,16 @@ public class SetChangeableInstrParamsCommand extends Command {

//~ Constructors -------------------------------------------------------------------------------------------------------------

public SetChangeableInstrParamsCommand(boolean lockContentionMonitoringEnabled, int nProfiledThreadsLimit, int stackDepthLimit,
public SetChangeableInstrParamsCommand(boolean lockContentionMonitoringEnabled, int nProfiledThreadsLimit,
int maxStringLength, int stackDepthLimit,
int samplingInterval, int objAllocStackSamplingInterval,
int objAllocStackSamplingDepth, boolean runGCOnGetResults,
boolean waitTrackingEnabled, boolean sleepTrackingEnabled,
boolean threadsSamplingEnabled, int threadsSamplingFrequency) {
super(SET_CHANGEABLE_INSTR_PARAMS);
this.lockContentionMonitoringEnabled = lockContentionMonitoringEnabled;
this.nProfiledThreadsLimit = nProfiledThreadsLimit;
this.maxStringLength = maxStringLength;
this.stackDepthLimit = stackDepthLimit;
this.samplingInterval = samplingInterval;
this.threadsSamplingFrequency = threadsSamplingFrequency;
Expand All @@ -89,6 +92,10 @@ public int getNProfiledThreadsLimit() {
return nProfiledThreadsLimit;
}

public int getMaxStringLength() {
return maxStringLength;
}

public int getStackDepthLimit() {
return stackDepthLimit;
}
Expand Down Expand Up @@ -129,6 +136,7 @@ public boolean isThreadsSamplingEnabled() {
public String toString() {
return super.toString() + ", lockContentionMonitoringEnabled: " + lockContentionMonitoringEnabled // NOI18N
+ ", nProfiledThreadsLimit: " + nProfiledThreadsLimit // NOI18N
+ ", maxStringLength: " + maxStringLength // NOI18N
+ ", stackDepthLimit: " + stackDepthLimit // NOI18N
+ ", samplingInterval: " + samplingInterval // NOI18N
+ ", objAllocStackSamplingInterval: " + objAllocStackSamplingInterval // NOI18N
Expand All @@ -143,6 +151,7 @@ public String toString() {
void readObject(ObjectInputStream in) throws IOException {
lockContentionMonitoringEnabled = in.readBoolean();
nProfiledThreadsLimit = in.readInt();
maxStringLength = in.readInt();
stackDepthLimit = in.readInt();
samplingInterval = in.readInt();
objAllocStackSamplingInterval = in.readInt();
Expand All @@ -157,6 +166,7 @@ void readObject(ObjectInputStream in) throws IOException {
void writeObject(ObjectOutputStream out) throws IOException {
out.writeBoolean(lockContentionMonitoringEnabled);
out.writeInt(nProfiledThreadsLimit);
out.writeInt(maxStringLength);
out.writeInt(stackDepthLimit);
out.writeInt(samplingInterval);
out.writeInt(objAllocStackSamplingInterval);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Server start to listen on port 5140
received command GET_METHOD_NAMES_FOR_JMETHOD_IDS, length: 1
received command METHOD_LOADED, className: java.lang.String, classLoaderId: 7, methodName: toString(), methodSignature:
received command EVENT_BUFFER_DUMPED, bufSize: 1024
received command SET_CHANGEABLE_INSTR_PARAMS, lockContentionMonitoringEnabled: false, nProfiledThreadsLimit: 32, stackDepthLimit: 12, samplingInterval: 10, objAllocStackSamplingInterval: 5, objAllocStackSamplingDepth: 10, runGCOnGetResultsInMemoryProfiling: true, waitTrackingEnabled: true, sleepTrackingEnabled: true, threadsSamplingEnabled: true, threadsSamplingFrequency: 10
received command SET_CHANGEABLE_INSTR_PARAMS, lockContentionMonitoringEnabled: false, nProfiledThreadsLimit: 32, maxStringLength: 1024, stackDepthLimit: 12, samplingInterval: 10, objAllocStackSamplingInterval: 5, objAllocStackSamplingDepth: 10, runGCOnGetResultsInMemoryProfiling: true, waitTrackingEnabled: true, sleepTrackingEnabled: true, threadsSamplingEnabled: true, threadsSamplingFrequency: 10
received command INITIATE_PROFILING, instrType = 0
received command INSTRUMENT_METHOD_GROUP 1 classes.
received command GET_DEFINING_CLASSLOADER, className: java.lang.String, classLoaderId: 1
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public void testComplexCommands() {
log("sending command " + cmd);
wireIO.sendComplexCommand(cmd);

cmd = new SetChangeableInstrParamsCommand(false, 32, 12, 10, 5, 10, true, true, true, true, 10);
cmd = new SetChangeableInstrParamsCommand(false, 32, 1024, 12, 10, 5, 10, true, true, true, true, 10);
log("sending command " + cmd);
wireIO.sendComplexCommand(cmd);

Expand Down
2 changes: 1 addition & 1 deletion visualvm/libs.profiler/profiler.api/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ questions.
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.0</specification-version>
<specification-version>2.16</specification-version>
</run-dependency>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ private ProfilingSettings loadProfilingSettings() {
settings.setExcludeWaitTime(pref.getBoolean(ProfilingSettings.PROP_EXCLUDE_WAIT_TIME, true));
settings.setInstrumentSpawnedThreads(pref.getBoolean(ProfilingSettings.PROP_INSTRUMENT_SPAWNED_THREADS, false));
settings.setNProfiledThreadsLimit(pref.getInt(ProfilingSettings.PROP_N_PROFILED_THREADS_LIMIT, 128));
settings.setMaxStringLength(pref.getInt(ProfilingSettings.PROP_MAX_STRING_LENGTH, CommonConstants.MAX_STRING_LENGTH_DEFAULT));
settings.setInstrScheme(pref.getInt(ProfilingSettings.PROP_INSTR_SCHEME, CommonConstants.INSTRSCHEME_LAZY));
settings.setInstrumentMethodInvoke(pref.getBoolean(ProfilingSettings.PROP_INSTRUMENT_METHOD_INVOKE, true));
settings.setInstrumentGetterSetterMethods(pref.getBoolean(ProfilingSettings.PROP_INSTRUMENT_GETTER_SETTER_METHODS, false));
Expand All @@ -218,6 +219,7 @@ private void storeProfilingSettings(ProfilingSettings settings) {
pref.putBoolean(ProfilingSettings.PROP_EXCLUDE_WAIT_TIME, settings.getExcludeWaitTime());
pref.putBoolean(ProfilingSettings.PROP_INSTRUMENT_SPAWNED_THREADS, settings.getInstrumentSpawnedThreads());
pref.putInt(ProfilingSettings.PROP_N_PROFILED_THREADS_LIMIT, settings.getNProfiledThreadsLimit());
pref.putInt(ProfilingSettings.PROP_MAX_STRING_LENGTH, settings.getMaxStringLength());
pref.putInt(ProfilingSettings.PROP_INSTR_SCHEME, settings.getInstrScheme());
pref.putBoolean(ProfilingSettings.PROP_INSTRUMENT_METHOD_INVOKE, settings.getInstrumentMethodInvoke());
pref.putBoolean(ProfilingSettings.PROP_INSTRUMENT_GETTER_SETTER_METHODS, settings.getInstrumentGetterSetterMethods());
Expand Down
4 changes: 2 additions & 2 deletions visualvm/profiling/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.0</specification-version>
<specification-version>2.9</specification-version>
</run-dependency>
</dependency>
<dependency>
Expand All @@ -39,7 +39,7 @@
<compile-dependency/>
<run-dependency>
<release-version>2</release-version>
<specification-version>2.0</specification-version>
<specification-version>2.16</specification-version>
</run-dependency>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,5 @@ ProfilerMemoryPanel_TOOLTIP_Limit_alloc=Unselect to collect full depth allocatio
ProfilerMemoryPanel_TOOLTIP_Limit_alloc2=Limit depth of allocations call tree (select 0 for no allocation calls)
ProfilerMemoryPanel_LBL_unlimited=unlimited
ProfilerMemoryPanel_LBL_No_alloc=(no allocation calls)
ProfilerJDBCPanel_BTN_QuerySize=Maximum JDBC query size:
ProfilerJDBCPanel_TOOLTIP_QuerySize=Maximum JDBC query size (can be set from {0} to {1})

0 comments on commit 2de679f

Please sign in to comment.