发布于 2010-05-07 12:15:12
如何在内存不足的错误上生成线程转储java?
你的问题可以简化为:
以及:
所以其实很简单,你可以这样做:
奖励:它在1.5上也很好:)
Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() {
public void uncaughtException( final Thread t, final Throwable e ) {
...
}您可能需要研究以下内容:
e.getMessage();这是:
Thread.getAllStackTraces();我一直在一个应用程序中这样做,这个应用程序在数百个不同的1.5和1.6JVM上(在不同的OSes上)。
发布于 2010-05-20 15:05:19
如果您是在Linux/Unix环境中,可以这样做:
-XX:OnOutOfMemoryError="kill -3 %p"这样,您就不必让您的应用程序生成定期线程转储,当它实际阻塞时,您将得到一个快照。
使用%p,您不需要传递PID,JVM将自动选择正确的进程id作为这里提到的。
发布于 2014-07-17 12:59:37
当使用j堆栈触发OnOutOfMemoryError时,可以触发线程转储。例如:-
jstack -F pid > /var/tmp/<identifier>.dumphttps://stackoverflow.com/questions/2787976
复制相似问题