diff --git a/Core/src/org/sleuthkit/autopsy/core/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/core/Bundle.properties-MERGED index c0407c965bc0a3dfda23de444ad9b9b167b903d9..fce17d66062af1f66c5358d8015f223e9e69c5a0 100755 --- a/Core/src/org/sleuthkit/autopsy/core/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/core/Bundle.properties-MERGED @@ -2,6 +2,10 @@ Installer.closing.confirmationDialog.message=Ingest is running, are you sure you Installer.closing.confirmationDialog.title=Ingest is Running # {0} - exception message Installer.closing.messageBox.caseCloseExceptionMessage=Error closing case: {0} +# {0} - maxMemory +Installer_checkMemoryAvailable_maxMemExpected_desc=Maximum JVM memory: {0}, is less than the 2 GB required. Some aspects of the application may not work as expected. +# {0} - physicalMemory +Installer_checkMemoryAvailable_physicalRamExpected_desc=Physical memory: {0}, is less than the 8 GB required. Some aspects of the application may not work as expected. OpenIDE-Module-Display-Category=Infrastructure OpenIDE-Module-Long-Description=\ This is the core Autopsy module.\n\n\ diff --git a/Core/src/org/sleuthkit/autopsy/core/Installer.java b/Core/src/org/sleuthkit/autopsy/core/Installer.java index 24c40e9967666af66e2915ae1b002cf9dcae469a..0cbafe987e268ad00099d5c8243011deb8e2a83f 100644 --- a/Core/src/org/sleuthkit/autopsy/core/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/core/Installer.java @@ -20,8 +20,10 @@ import com.sun.jna.platform.win32.Kernel32; import java.awt.Cursor; +import java.awt.GraphicsEnvironment; import java.io.File; import java.io.IOException; +import java.lang.management.ManagementFactory; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -34,6 +36,7 @@ import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javax.imageio.ImageIO; +import javax.swing.JOptionPane; import net.sf.sevenzipjbinding.SevenZip; import net.sf.sevenzipjbinding.SevenZipNativeInitializationException; import org.apache.commons.io.FileUtils; @@ -41,6 +44,7 @@ import org.openide.modules.InstalledFileLocator; import org.openide.modules.ModuleInstall; import org.openide.util.NbBundle; +import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.actions.IngestRunningCheck; import org.sleuthkit.autopsy.casemodule.Case; @@ -373,6 +377,7 @@ private static void ensureOcrLanguagePacksFolderExists() { @Override public void restored() { super.restored(); + checkMemoryAvailable(); ensurePythonModulesFolderExists(); ensureClassifierFolderExists(); ensureOcrLanguagePacksFolderExists(); @@ -392,6 +397,40 @@ public void restored() { preloadTranslationServices(); } + /** + * Checks system resources logging any potential issues. + */ + @Messages({ + "# {0} - physicalMemory", + "Installer_checkMemoryAvailable_physicalRamExpected_desc=Physical memory: {0}, is less than the 8 GB required. Some aspects of the application may not work as expected.", + "# {0} - maxMemory", + "Installer_checkMemoryAvailable_maxMemExpected_desc=Maximum JVM memory: {0}, is less than the 2 GB required. Some aspects of the application may not work as expected." + }) + private void checkMemoryAvailable() { + try { + long memorySize = ((com.sun.management.OperatingSystemMXBean) ManagementFactory + .getOperatingSystemMXBean()).getTotalMemorySize(); + if (memorySize < 8_000_000_000L) { + String desc = Bundle.Installer_checkMemoryAvailable_physicalRamExpected_desc( + FileUtils.byteCountToDisplaySize(memorySize)); + logger.log(Level.SEVERE, desc); + } + } catch (Throwable t) { + logger.log(Level.SEVERE, "There was an error fetching physical memory size", t); + } + + try { + long maxMemory = Runtime.getRuntime().maxMemory(); + if (maxMemory < 2_000_000_000L) { + String desc = Bundle.Installer_checkMemoryAvailable_maxMemExpected_desc( + FileUtils.byteCountToDisplaySize(maxMemory)); + logger.log(Level.SEVERE, desc); + } + } catch (Throwable t) { + logger.log(Level.SEVERE, "There was an error fetching jvm max memory", t); + } + } + /** * Initializes 7zip-java bindings. We are performing initialization once * because we encountered issues related to file locking when initialization