标签: shutdown-hook

jvm:是否有可能在关闭钩子中发现由于OOM导致进程正在关闭?

我有一个在java(1.6)中运行的关键进程,带有一个注册的关闭钩子.在某些情况下我得到一个OOM问题(下面有关于该问题的更多细节),该过程突然停止,我没有得到任何我的日志,我的捕获(Throable x)没有捕获异常.

但是关闭钩子有效.因此,如果有一种方法可以知道由于某些令人讨厌的OOM而导致进程停止,我可以在退出之前记录必要的信息.

有没有办法做到这一点?

关于OOM:不确定什么是例外,因为我说它不会被抓住.我知道这是一个OOM因为我开始这个过程

-XX:+HeapDumpOnOutOfMemoryError
Run Code Online (Sandbox Code Playgroud)

我得到一个堆转储文件.在其他情况下,会捕获异常,并且它是ava.lang.OutOfMemoryError:超出了GC开销限制.但不确定这种情况总是如此.

编辑:

如果不清楚:我不是试图阻止OOM,因为它可能在某些情况下出于正当理由,我只是想确保在应用程序日志文件中清楚

我的问题是:是否有可能在关机钩子中发现由于OOM导致进程正在关闭?

我需要以编程方式相同的过程进行此操作.

目前最好的方法是查看是否存在process_.hprof(我知道pid)的堆转储文件java_pid_pid,其中包含最近的日期并推断出有一个OOM.我想我可以尝试Runtime.getRuntime().freeMemory()并报告问题,如果可用的内存非常低,但不确定这是多么可靠,可能当进程关闭时它已经释放了很多内存,方法以上是我认为最好的.

java memory jvm out-of-memory shutdown-hook

5
推荐指数
1
解决办法
1111
查看次数

在PHP中,max_execution_time会影响通过register_shutdown_function()调用运行的关闭函数吗?

我有一个注册使用的关闭功能register_shutdown_function()需要很长时间才能完成.PHP max_execution_time会导致PHP终止此函数还是会一直运行直到它完成或出错?

php shutdown execution-time executiontimeout shutdown-hook

5
推荐指数
1
解决办法
1324
查看次数

如何在退出Java应用程序之前确保运行一段代码

我正在使用获得许可的API,该API具有从具有有限数量许可证的许可证服务器获取/释放许可证对象的方法.在我的应用程序开始时,我调用该方法获取许可证,但我想确保即使我的程序突然终止/崩溃(例外,SIGTERM等)也会释放它.关闭钩子是解决此问题的最佳方法吗?

java shutdown-hook

5
推荐指数
1
解决办法
3652
查看次数

在java中的shutdown hook中抛出异常会发生什么

如果在java中执行关闭挂钩期间抛出未捕获的异常,jvm是否立即退出而不运行其余已注册的关闭挂钩(如果有)?来自javadocs:

通过调用线程的ThreadGroup对象的uncaughtException方法,可以在shutdown钩子中处理未捕获的异常,就像在任何其他线程中一样.此方法的默认实现将异常的堆栈跟踪打印到System.err并终止该线程; 它不会导致虚拟机退出或停止.

似乎其他关机钩子应该运行...

作为一个后续问题,拥有一段可能在关闭钩子中引发异常的代码可能不是一个好主意?如果你无法避免它,尝试捕获关闭钩子内的异常是一个好习惯吗?

java jvm exception-handling shutdown-hook

5
推荐指数
1
解决办法
1934
查看次数

关闭tomcat服务器时无法加载org.apache.hadoop.util.ShutdownHookManager

我有一个在tomcat上运行的简单Web应用程序.此Web应用程序将文件读​​写到HDFS.

我面临的问题是每次我使用停止服务器./bin/shutdown.sh.我无法加载hadoop shutdownHookManager异常.

我确定hadoop-common(包含ShutDownManager)在tomcat类路径中.

谁能帮我吗?

我得到的例外:

Oct 14, 2013 5:57:54 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [com.ebay.kernel.calwrapper.CalTransactionHelper$1] (value [com.ebay.kernel.calwrapper.CalTransactionHelper$1@3d5a1c5f]) and a value of type [com.ebay.kernel.calwrapper.CalTransactionHelper.Stack] (value [[]]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Oct 14, 2013 5:57:54 PM org.apache.coyote.AbstractProtocol stop 
INFO: Stopping ProtocolHandler ["http-bio-8080"]
Oct 14, 2013 5:57:54 …
Run Code Online (Sandbox Code Playgroud)

java tomcat hadoop shutdown-hook

5
推荐指数
1
解决办法
3249
查看次数

从C++启动时正确关闭JVM

我是通过JNI从C++代码启动JVM的.我有一个问题,当刚刚退出我的C++进程时,似乎没有运行来自JVM的一些关闭挂钩,因此一些临时资源仍然存在,在我的特定情况下,在我下次打开C++进程时会阻止启动JVM.我试过jvm-> DestroyJavaVM(),但是在我的所有进程窗口关闭后,我仍然可以看到进程正在运行.什么是最好的等待确保JVM在通过JNI启动时正常关闭?

谢谢!

c++ java java-native-interface jvm shutdown-hook

5
推荐指数
1
解决办法
939
查看次数

如何正常关闭/终止java进程?

我正在运行一些Java应用程序,我需要从windows bat脚本优雅地关闭/关闭所有应用程序.所以我的问题是:
如何通过windows bat脚本调用shutdown hook并正常关闭java程序.

任何建议表示赞赏.提前致谢.

java windows batch-file shutdown-hook

4
推荐指数
1
解决办法
3709
查看次数

如何在PHP中关闭函数中检查退出是否干净?

如何在PHP的关闭函数中测试退出是否干净?

通过干净退出我的意思是脚本没有因为错误而终止.

php shutdown-hook

4
推荐指数
1
解决办法
2629
查看次数

为什么ShutdownHookThread'setDaemon true'

我最近需要向我拥有的Scala应用程序添加一个关闭挂钩,并且我发现Scala为此提供了一个名为ShutdownHookThread的帮助器。在其源代码中,我注意到它将新线程设置为守护程序线程

def apply(body: => Unit): ShutdownHookThread = {
  val t = new ShutdownHookThread(hookName()) {
    override def run() = body
  }
  t setDaemon true  // <--------- right here
  runtime addShutdownHook t
  t
}
Run Code Online (Sandbox Code Playgroud)

为什么要这样做?在我看来,您可能想要关闭钩子线程中的相反内容(即,确保在关闭jvm之前退出该线程)。还是守护程序/非守护程序与关闭挂钩无关?

java multithreading scala shutdown-hook

4
推荐指数
1
解决办法
1079
查看次数

如何完成kafka消费者安全?(在shutdownHook中调用thread#join是否有意义?)

我正在读这篇文章

这里是完成消费者线程的代码:

Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                System.out.println("Starting exit...");
                consumer.wakeup(); 1
                try {
                    mainThread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

据我了解,ShutdownHook 在所有非守护线程完成但在进程被操作系统销毁之前调用。
1. 从我的角度来看 mainThread.join() 是没有用的。主线程总是会在 ShutdownHook 执行的那一刻结束。这是正确的还是我误解了什么?
2.其实我不明白为什么我们需要等待主线程?我们需要等待 close 方法执行吗?

聚苯乙烯

书中提供了以下主要方法代码:

try {
            // looping until ctrl-c, the shutdown hook will cleanup on exit
            while (true) {
                ConsumerRecords<String, String> records =
                  movingAvg.consumer.poll(1000);
                System.out.println(System.currentTimeMillis() + "--  waiting for data...");
                for (ConsumerRecord<String, String> record :
                  records) {
                    System.out.printf("offset = %d, key = %s,
                      value …
Run Code Online (Sandbox Code Playgroud)

java multithreading shutdown-hook apache-kafka kafka-consumer-api

4
推荐指数
1
解决办法
6026
查看次数