java - 如何在没有 X11 的情况下从 Linux 控制台触发手动 Java GC

标签 java linux garbage-collection

我需要一种能够从 ubuntu 上的 linux 控制台脚本触发完整 GC 的方法。 我知道这是非常糟糕的做法,但无需过多详细说明,这会使我的服务器保持运行状态,这仅意味着在我解决实际问题时持续 1 或 2 天,因此我不必在晚上醒来并执行通过 jconsole 或 jvisualvm 手动 GC。

或者,我必须制作一个鼠标脚本,每 3-4 小时左右点击一次按钮,这更糟糕。

请帮忙。

最佳答案

如果您可以让您的应用程序启动一个 JMX 服务器(我相信这暗示了您对 jconsole/jvisualvm 的使用),那么您可以通过命令行实用程序调用 Memory MBean 的 gc 操作。

首先,您需要某种命令行 JMX 客户端。我用过 this one过去用于简单的命令行调用并且运行良好。 (编辑:其实我刚才用它来测试下面的命令,它在本地Tomcat进程上成功调用了GC)

然后您需要计算出触发垃圾回收的命令。我认为这应该可行(您当然需要根据需要更改主机/端口/凭据):

java -jar cmdline-jmxclient-X.X.jar - localhost:8081 java.lang:type=Memory gc

最后,您可以通过 cron 或等效程序安排调用此命令。

瞧!

关于java - 如何在没有 X11 的情况下从 Linux 控制台触发手动 Java GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4155696/

相关文章:

php - APC 何时删除旧条目?

java - 如何在paintComponent()方法之外访问Graphics对象

java.lang.OutOfMemory错误: GC overhead limit exceeded : Application deployed in weblogic

linux - "od"在 linux 中代表什么,为什么有用?

linux - 在 telnet session 中使用变量

linux - 在 Lisp/SBCL 中使用 uinput 内核模块

java - 垃圾收集器如何更新推送到操作数堆栈的引用?

java - Openshift - javabean 每两秒创建一次

java - 用于 JNDI 查找的上下文文件中的资源定义

java - 本地引用变量是否添加到 GC