97 lines
4.4 KiB
Plaintext
97 lines
4.4 KiB
Plaintext
// This is an example script for Crash Assistant.
|
|
// It designed to demonstrate abilities of startup scripts and by default warn about over allocation of ram (more than system can provide).
|
|
// With startup scripts you can do including but not limited:
|
|
// - Analyse ram alloction.
|
|
// - Analyse jvm / minecraft args.
|
|
// - Analyse modlist for incompatible / removed neccery mods.
|
|
// Full documentation and more examples: https://github.com/KostromDan/Crash-Assistant/blob/pages/guides/Scripting%20Support/Getting%20Started.md
|
|
|
|
|
|
// --- Configuration Area ---
|
|
var MIN_CRITICAL_GB = 4.0;
|
|
var MIN_RECOMMENDED_GB = 8.0;
|
|
var MAX_RECOMMENDED_GB = 12.0;
|
|
// --------------------------
|
|
|
|
// Most options are commented out. Please uncomment them to enable them.
|
|
|
|
var xmxBytes = MemoryUtils.getJvmMaxHeapBytes();
|
|
var xmxGB = MemoryUtils.bytesToGigabytes(xmxBytes);
|
|
var formattedXmx = MemoryUtils.formatMemorySize(xmxBytes);
|
|
|
|
// 1. Critical Minimum Check
|
|
//if (xmxGB < MIN_CRITICAL_GB) {
|
|
// var msg = LanguageProvider.get("custom.critical_min");
|
|
// msg = msg.replace("$XMX$", formattedXmx);
|
|
// msg = msg.replace("$MIN_RECOMMENDED$", MIN_RECOMMENDED_GB.toString());
|
|
// var warn = Startup.addBootWarning(msg);
|
|
// warn.withMemoryAllocationGuide();
|
|
//}
|
|
|
|
// 2. Minimum Recommended Check
|
|
//else if (xmxGB < MIN_RECOMMENDED_GB) {
|
|
// var msg = LanguageProvider.get("custom.min_recommended");
|
|
// msg = msg.replace("$XMX$", formattedXmx);
|
|
// msg = msg.replace("$MIN_RECOMMENDED$", MIN_RECOMMENDED_GB.toString());
|
|
// var lowMemWarn = Startup.addBootWarning(msg);
|
|
// lowMemWarn.withDontShowAgain("low_memory_check");
|
|
// lowMemWarn.withMemoryAllocationGuide();
|
|
//}
|
|
|
|
// 3. Excessive Allocation Check
|
|
// Warning starts exactly when Xmx exceeds MAX_RECOMMENDED_GB.
|
|
//if (xmxGB > MAX_RECOMMENDED_GB) {
|
|
// var msg = LanguageProvider.get("custom.excessive_allocation");
|
|
// msg = msg.replace("$XMX$", formattedXmx);
|
|
// msg = msg.replace("$MIN_RECOMMENDED$", MIN_RECOMMENDED_GB.toString());
|
|
// msg = msg.replace("$MAX_RECOMMENDED$", MAX_RECOMMENDED_GB.toString());
|
|
// var excessiveMemWarn = Startup.addBootWarning(msg);
|
|
// excessiveMemWarn.withDontShowAgain("excessive_memory_check");
|
|
// excessiveMemWarn.withMemoryAllocationGuide();
|
|
//}
|
|
|
|
// 4. Over-Allocation vs Total Capacity Check (Hardware Limit)
|
|
var totalSystemCapacity = MemoryUtils.getSystemTotalMemoryBytes() + MemoryUtils.getSystemTotalSwapBytes();
|
|
var exceedsTotalSystemCapacity = xmxBytes > totalSystemCapacity;
|
|
if (exceedsTotalSystemCapacity) {
|
|
var msg = LanguageProvider.get("custom.over_allocation");
|
|
msg = msg.replace("$XMX$", formattedXmx);
|
|
msg = msg.replace("$TOTAL_CAPACITY$", MemoryUtils.formatMemorySize(totalSystemCapacity));
|
|
var warn = Startup.addBootWarning(msg);
|
|
warn.withMemoryAllocationGuide();
|
|
}
|
|
|
|
// 5. High System Load Check (Current Capacity)
|
|
var systemAvailable = MemoryUtils.getSystemFreeMemoryBytes() + MemoryUtils.getSystemFreeSwapBytes();
|
|
var jvmAllocated = MemoryUtils.getJvmAllocatedMemoryBytes();
|
|
var stillNeeded = xmxBytes - jvmAllocated;
|
|
|
|
if (!exceedsTotalSystemCapacity && xmxBytes > 0 && stillNeeded > 0 && systemAvailable < stillNeeded) {
|
|
var msg = LanguageProvider.get("custom.high_system_load");
|
|
msg = msg.replace("$XMX$", formattedXmx);
|
|
msg = msg.replace("$AVAILABLE$", MemoryUtils.formatMemorySize(systemAvailable));
|
|
var highLoadWarn = Startup.addBootWarning(msg);
|
|
highLoadWarn.withDontShowAgain("high_system_load_check");
|
|
highLoadWarn.withMemoryAllocationGuide();
|
|
}
|
|
|
|
// 6. Windows Swap/Pagefile Check
|
|
//if (PlatformHelp.isWindows() && MemoryUtils.getSystemTotalSwapBytes() == 0) {
|
|
// var msg = LanguageProvider.get("custom.windows_no_swap");
|
|
// msg = msg.replace("$XMX$", formattedXmx);
|
|
// var noSwapWarn = Startup.addBootWarning(msg);
|
|
// noSwapWarn.withDontShowAgain("windows_no_swap_check");
|
|
// noSwapWarn.withMemoryAllocationGuide();
|
|
//}
|
|
|
|
// 7. Large Heap / ZGC Advice
|
|
//var jvmArgs = ArgUtils.getSafeJvmArgs();
|
|
//var launchArgs = ArgUtils.getSafeLaunchArgs();
|
|
//if (xmxGB > 12.0 && !jvmArgs.contains("-XX:+UseZGC")) {
|
|
// var msg = LanguageProvider.get("custom.large_heap_zgc");
|
|
// msg = msg.replace("$XMX$", formattedXmx);
|
|
// var zgcWarn = Startup.addBootWarning(msg);
|
|
// zgcWarn.withDontShowAgain("zgc_recommendation_check");
|
|
// zgcWarn.withJvmArgsGuide();
|
|
//}
|