diff --git a/installer/i2pinstaller.xml b/installer/i2pinstaller.xml index 84edded227a89180f3480ccc8412e2617e97fda1..62912b8284081aa27c0953fb43ba61303018be41 100644 --- a/installer/i2pinstaller.xml +++ b/installer/i2pinstaller.xml @@ -7,7 +7,7 @@ <customProcName>false</customProcName> <icon>resources/console.ico</icon> <jre> - <minVersion>1.6.0</minVersion> + <minVersion>1.7.0</minVersion> </jre> <!-- <splash> diff --git a/installer/i2pstandalone.xml b/installer/i2pstandalone.xml index 8b92ed21eeb1d0895cdf83de34e35d694aae03fc..71e338dd922ca913a852fe8d7799ebc75b4f2e68 100644 --- a/installer/i2pstandalone.xml +++ b/installer/i2pstandalone.xml @@ -7,7 +7,7 @@ <customProcName>false</customProcName> <icon>resources/start.ico</icon> <jre> - <minVersion>1.6.0</minVersion> + <minVersion>1.7.0</minVersion> <!-- <minHeapSize>64</minHeapSize> --> diff --git a/installer/resources/runplain.sh b/installer/resources/runplain.sh index f1bf81d81034306dfef0e6b0d4bb5887f7e7cce5..eb4995dfed45a1aaf4c86c31591b6fcf0a0de262 100644 --- a/installer/resources/runplain.sh +++ b/installer/resources/runplain.sh @@ -3,7 +3,7 @@ # This runs the router by itself, WITHOUT the wrapper. # This means the router will not restart if it crashes. # Also, you will be using the default memory size, which is -# probably not enough for i2p. +# probably not enough for i2p, unless you set it below. # You should really use the i2prouter script instead. # @@ -19,6 +19,10 @@ I2PTEMP="%SYSTEM_java_io_tmpdir" PREFERv4="false" CP= +# Uncomment to set the maximum memory. The default and the option may vary in different JVMs. +# Check your java documentation to be sure. +#MAXMEMOPT="-Xmx256m" + # Try using the Java binary that I2P was installed with. # If it's not found, try looking in the system PATH. JAVA=$(which %JAVA_HOME/bin/java || which java) @@ -39,7 +43,7 @@ done if [ $(uname -s) = "Darwin" ]; then export JAVA_TOOL_OPTIONS="-Djava.awt.headless=true" fi -JAVAOPTS="-Djava.net.preferIPv4Stack=${PREFERv4} -Djava.library.path=${I2P}:${I2P}/lib -Di2p.dir.base=${I2P} -DloggerFilenameOverride=logs/log-router-@.txt" +JAVAOPTS="${MAXMEMOPT} -Djava.net.preferIPv4Stack=${PREFERv4} -Djava.library.path=${I2P}:${I2P}/lib -Di2p.dir.base=${I2P} -DloggerFilenameOverride=logs/log-router-@.txt" ( nohup ${JAVA} -cp \"${CP}\" ${JAVAOPTS} net.i2p.router.RouterLaunch > /dev/null 2>&1 ) & diff --git a/router/java/src/net/i2p/router/tasks/OOMListener.java b/router/java/src/net/i2p/router/tasks/OOMListener.java index 3aa2c08661367d714d5888b8b314f66dbc47e5e6..ed2050a390188919a9fbada02f54df9073b10ed8 100644 --- a/router/java/src/net/i2p/router/tasks/OOMListener.java +++ b/router/java/src/net/i2p/router/tasks/OOMListener.java @@ -49,17 +49,23 @@ public class OOMListener implements I2PThread.OOMEventListener { log.log(Log.CRIT, "Thread ran out of memory, shutting down I2P", oom); log.log(Log.CRIT, "free mem: " + Runtime.getRuntime().freeMemory() + " total mem: " + Runtime.getRuntime().totalMemory()); + // Can't find any System property or wrapper property that gives + // you the actual config file path, have to guess + String path; + if (SystemVersion.isLinuxService()) { + path = "/etc/i2p"; + } else { + path = _context.getBaseDir().toString(); + } if (_context.hasWrapper()) { - // Can't find any System property or wrapper property that gives - // you the actual config file path, have to guess - String path; - if (SystemVersion.isLinuxService()) { - path = "/etc/i2p"; - } else { - path = _context.getBaseDir().toString(); - } log.log(Log.CRIT, "To prevent future shutdowns, increase wrapper.java.maxmemory in " + path + File.separatorChar + "wrapper.config"); + } else if (!SystemVersion.isWindows()) { + log.log(Log.CRIT, "To prevent future shutdowns, increase MAXMEMOPT in " + + path + File.separatorChar + "runplain.sh or /usr/bin/i2prouter-nowrapper"); + } else { + log.log(Log.CRIT, "To prevent future shutdowns, run the restartable version of I2P, and increase wrapper.java.maxmemory in " + + path + File.separatorChar + "wrapper.config"); } } catch (OutOfMemoryError oome) {} try { diff --git a/router/java/src/net/i2p/router/tunnel/BloomFilterIVValidator.java b/router/java/src/net/i2p/router/tunnel/BloomFilterIVValidator.java index f96bdfece26e5622b063151fc24323fb402cd8f4..61a52e2a356effdb07349975a9944d2a08918001 100644 --- a/router/java/src/net/i2p/router/tunnel/BloomFilterIVValidator.java +++ b/router/java/src/net/i2p/router/tunnel/BloomFilterIVValidator.java @@ -104,7 +104,6 @@ class BloomFilterIVValidator implements IVValidator { return; // Can't find any System property or wrapper property that gives // you the actual config file path, have to guess - // TODO if !SystemVersion.hasWrapper ... String path; if (SystemVersion.isLinuxService()) { path = "/etc/i2p"; @@ -114,13 +113,21 @@ class BloomFilterIVValidator implements IVValidator { String msg = "Configured for " + DataHelper.formatSize(KBps *1024L) + "Bps share bandwidth but only " + - DataHelper.formatSize(maxMemory) + "B available memory." + - " Recommend increasing wrapper.java.maxmemory in " + - path + File.separatorChar + "wrapper.config" + - // getMaxMemory() returns significantly lower than wrapper config, so add 10% - " to at least " + (recMaxMem * 11 / 10 / (1024*1024)) + " (MB)" + - " if the actual share bandwidth exceeds " + - DataHelper.formatSize(threshKBps * 1024L) + "Bps."; + DataHelper.formatSize(maxMemory) + "B available memory."; + if (_context.hasWrapper()) { + msg += " Recommend increasing wrapper.java.maxmemory in " + + path + File.separatorChar + "wrapper.config"; + } else if (!SystemVersion.isWindows()) { + msg += " Recommend increasing MAXMEMOPT in " + + path + File.separatorChar + "runplain.sh or /usr/bin/i2prouter-nowrapper"; + } else { + msg += " Recommend running the restartable version of I2P, and increasing wrapper.java.maxmemory in " + + path + File.separatorChar + "wrapper.config"; + } + // getMaxMemory() returns significantly lower than wrapper config, so add 10% + msg += " to at least " + (recMaxMem * 11 / 10 / (1024*1024)) + " (MB)" + + " if the actual share bandwidth exceeds " + + DataHelper.formatSize(threshKBps * 1024L) + "Bps."; System.out.println("WARN: " + msg); _context.logManager().getLog(BloomFilterIVValidator.class).logAlways(Log.WARN, msg); }