記一次:項目啓動時tomcat一直在處在starting中的問題排除

連接的是oracle數據庫,項目啓動時tomcat一直在處在starting中,這個問題也是毫無徵兆的情況下突然發生的,針對這個問題,我分別在本地用eclipse、tomcat以及在linux上用tomcat都嘗試了部署啓動項目,結果,是一樣的,tomcat一直處於starting中,感覺處於一個永久等待狀態的。

排除問題:

首先,代碼沒有任何問題,因爲同樣的代碼在之前是可以啓動的。

其次,排除數據庫是可以正常連接的,因爲我試用plsql是可以直接進行增刪改查的;

然後,我懷疑是數據庫服務器的問題,然後查看數據庫服務資源是否被佔用很多、是否很喫緊,結果不是。

使用 df -h 命令查看資源利用情況:

 懷疑是數據庫用戶的權限問題導致的,結果我換了數據庫的另一個用戶,項目竟然可以正常啓動,但這並不是問題的根本原因,因爲不同的用戶有一些表是不一樣的。問題繼續探討。

最後,想到的是可能是某一張表會不會出現鎖住的情況。

在數據庫輸入一下命令進行查詢:

完整語句:

select a.object_name,b.session_id,c.serial#,c.program,c.username,c.command,c.machine,c.lockwait 
from all_objects a,v$locked_object b,v$session c where a.object_id=b.object_id and c.sid=b.session_id;

可以看到是quartz定時器任務表出現了鎖的情況。

然後使用下列命令:

select session_id from v$locked_object;
--查出的id爲142,則
SELECT sid, serial#, username, osuser FROM v$session where sid = 549;
--查出的SID爲142和SERIAL爲2088,則殺掉進程釋放鎖
ALTER SYSTEM KILL SESSION '142,2088';

本想着,釋放了鎖,應該會沒有問題,但是項目再次啓動的時候,又出現鎖了,這個時候,我在代碼中將定時器任務註釋了,項目可以正常啓動。

然後我重新放開定時器任務,再次啓動項目,反覆了3次,終於不會出現鎖了,項目也能正常啓動了。

唯一不明白的是,如果鎖導致的,爲什麼釋放鎖了沒有立馬真正的釋放佔用資源,不知道哪位大佬可以解答的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章