托管一些 WAR 应用程序的 Ubuntu Server 收到一些堆错误消息,如下所示。该服务器运行 tomcat8 并且运行良好,现在并且没有任何更改代码端服务器出现错误并且 Tomcat 停止。
EVERE: SEVERE:Memory usage is low, parachute is non existent, your
system may start failing.
Exception: java.lang.OutOfMemoryError thrown from the
UncaughtExceptionHandler in thread "Thread-21"
Exception: java.lang.OutOfMemoryError thrown from the
UncaughtExceptionHandler in thread "Thread-9"
Exception: java.lang.OutOfMemoryError thrown from the
UncaughtExceptionHandler in thread "Thread-17"
SEVERE:Memory usage is low, parachute is non existent, your system may start
failing.
Exception in thread "Thread-11" java.lang.OutOfMemoryError: Java heap space
Exception in thread "http-nio-8080-Acceptor-0" Exception in thread
"ContainerBackgroundProcessor[StandardEngine[Catalina]]" Exception in thr
09:39:19.841 ERROR 116336 --- [nio-8080-exec-5]
o.s.b.w.servlet.support.ErrorPageFilter : Forwarding to error page from
request [/teams/my
java.lang.OutOfMemoryError: Java heap space
SEVERE:Memory usage is low, parachute is non existent, your system may start
failing.
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
我不是开发人员,所以我不太了解 java(基本知识)。起初我认为它与 ram 内存(服务器上的 4gb)有关,但后来我在许多地方读到了与 Java max heap size 非常相关的内容。所以我运行以下命令并检查我有 65 MB 的初始大小和 1 GB 的最大值。
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 65011712 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1031798784 {product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
现在我想将最大大小增加到 2 GB 并像这样设置它。我在这里查看了这篇文章,正在谈论执行 So 的命令,但是当我在控制台上运行它时,我无法这样做。这是命令:
java -Xms64m -Xmx2048m
我明白了,就像命令语法不正确
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
也阅读这个答案,但不是很清楚
我也读过关于 catalina.sh 的编辑,但是如果我 vim 该命令,我没有得到可以编辑堆大小或 Xms 的任何部分,所以问题是:
另请阅读此内容,但我不想为任何 jar 设置此内容,希望为服务器上的所有战争应用程序执行此操作。
那么在阅读了这么多帖子和答案之后,并且没有最好的java知识,最好的方法是如何做到这一点?正确的命令如何?运行此命令后,最大堆大小是否配置好?我也知道在代码方面,开发人员也需要检查他们的部分,因为我还读到这个问题不仅来自硬件和 java 配置。谢谢!