1. 程式人生 > >java內存泄漏問題排查(三)

java內存泄漏問題排查(三)

是個 add 所在 java 。。 沒有想到 占滿 console fin

這個系列應該改個名字,叫做java 命令行窗口(運行在windows環境下)突然退出,但是端口號存在,java虛擬機進程也存在。

昨天出差到客戶現場一番排查。排除了之前的一系列推測(根據程序日誌發現,程序異常退出是有規律的,每3小時一次,在57分異常退出)

  1. 內存溢出:程序退出後未生成dump文件,且用jconsole顯示內存一直正常。
  2. 客戶計算機是否有異常:查看系統日誌、cpu,內存(發生問題時間點的)都一切正常。
  3. 網絡請求http連接未釋放,連接池占滿假死:程序已經優化,排除httpclient使用問題導致連接異常,且在cmd下查看netstat顯示正常。
  4. 數據庫連接未回收,卡死:優化數據庫連接配置參數,並查看發生故障時的連接,顯示正常。

就在我一籌莫展,幾近放棄的時候客戶UPS有問題,意外讓服務器重啟使我找到了問題的所在。

程序重啟後,有些開機自動運行程序,這時候我手賤在cmd下用命令netstat -ano|findstr 8083(我的程序端口),竟然以為的發現,是啟動著的。。。。。。。。。。。而我的程序是沒有配置開機自動運行的,這個時候我才想起來會不會是有其他程序跟我是一樣的端口。(我之前也不是沒有想到過端口占用的問題,但是我的命令行程序在端口被占用狀況下,運行後沒幾秒就會自動退出,然後在錯誤日誌種提示 Address is already benn used,然而這個搞笑的是,我的程序如果先啟動,另外一個也是用8083端口的程序後啟動,他是個exe程序,不會自動退出,但是另外會啟動一個守護進程,每3個小時查看一次,然後把我的程序給幹掉了,把他的程序給啟動起來)因此每次我查看netstat的時候,發現8083端口還在,給我問題排查產生了誤解。現在想想問題原因很坑爹,但是排查過程當中也不是沒有收獲,在這些彎路之中,更深入的了解了jvm、httpclient連接池、數據庫連接池相關的知識。

至此,問題得到解決

java內存泄漏問題排查(三)