以前解決過一個問題,繞了很大的一個彎,才瞭解到Linux下查看Java進程的運行堆棧的方法。雖然現在被jstack可以替代很多,呵呵
在linux下 用ps命令查看java進程的進程號,然後用kill -3 pid的方法,使得java進程向自己的標準輸出(或已經被重定向),輸出當前進程的堆棧、內存、線程、鎖的使用情況。
如果有死鎖的話,會明確打印出dead lock信息。
如果有常備線程退出的話,會明確沒有該線程的堆棧。對於此方法的使用經驗,非常建議給每一個生命週期和程序一樣的線程都命名上友好的命名。
當時的故障,如果知道用到這個命令的話,就可以知道多個線程都會競爭同一個鎖上,而當前得到鎖的線程卻因爲udp checksum的異常,導致鎖一直釋放不掉。
如果知道他,會很加快速度。共享下經驗吧