有一個(gè)Java程序,啟動(dòng)了七個(gè)線程,這些線程都形如:
public void run() {
while (true) {
try {
......
} catch (Throwable t) {
t.printStackTrace();
}
}
}
但卻經(jīng)常跑著跑著,跑了幾個(gè)小時(shí)后java退出,可能是哪些原因?
我猜測是我自己的代碼或是我使用的庫在哪里調(diào)用了System.exit(),但是我用程序?qū)ystem.exit()hook住了,發(fā)現(xiàn)沒有人調(diào)用這個(gè)函數(shù)。這個(gè)服務(wù)器只有我一個(gè)人在用,也不會(huì)有人kill。Java達(dá)人們幫忙想想,還有可能是什么原因?
答復(fù):
如果是應(yīng)用,一般有2個(gè)可能
1 JVM BUG,這個(gè)簡單,升級(jí)你的JVM就好了
2 內(nèi)存溢出,呵呵,我猜這個(gè)可能性。 你應(yīng)該啟動(dòng)工具監(jiān)控一下程序的內(nèi)存使用情況, jconsole就行。
public void run() {
while (true) {
try {
......
} catch (Throwable t) {
t.printStackTrace();
}
}
}
但卻經(jīng)常跑著跑著,跑了幾個(gè)小時(shí)后java退出,可能是哪些原因?
我猜測是我自己的代碼或是我使用的庫在哪里調(diào)用了System.exit(),但是我用程序?qū)ystem.exit()hook住了,發(fā)現(xiàn)沒有人調(diào)用這個(gè)函數(shù)。這個(gè)服務(wù)器只有我一個(gè)人在用,也不會(huì)有人kill。Java達(dá)人們幫忙想想,還有可能是什么原因?
答復(fù):
如果是應(yīng)用,一般有2個(gè)可能
1 JVM BUG,這個(gè)簡單,升級(jí)你的JVM就好了
2 內(nèi)存溢出,呵呵,我猜這個(gè)可能性。 你應(yīng)該啟動(dòng)工具監(jiān)控一下程序的內(nèi)存使用情況, jconsole就行。