使用mina框架記憶體溢位的問題

2021-08-03 03:47:30 字數 2067 閱讀 5112

第一次寫部落格,也不知道怎麼寫好,就簡單說說我使用mina框架的時候存在的問題以及解決辦法吧。

第一次簡單的使用mina框架,業務也不難,可是每當socket連線增多,就會造成記憶體和cpu使用大幅度地增長,整個服務速度變慢,http請求也變慢了。而且記憶體下降速度極慢。重啟tomcat後又恢復正常。

後來發現是exceptioncaught、sessionclosed和sessionidle方法中沒有把session關閉,造成了卡頓問題。

mina的配置,埠繫結以及過濾器等配置

// 停止mina服務

public

void

contextdestroyed(servletcontextevent sce) catch (exception e)

}// 啟動mina服務

public

void

contextinitialized(servletcontextevent sce) catch (exception e)

system.out.println("socket服務端啟動成功,埠號為:" + port);

} catch (exception e)

}}下面**才是重點,必須要在exceptioncaught、sessionclosed和sessionidle方法中手動呼叫session.close()方法,或者繼承父類的方法。

/**

* created by jr on 2017/5/28.

*/public

class

myserverhandler

extends

iohandleradapter

@override

public

void

exceptioncaught(iosession session, throwable cause) throws exception

}@override

public

void

messagesent(iosession session, object message) throws exception

@override

public

void

inputclosed(iosession iosession) throws exception

@override

public

void

sessionclosed(iosession session) throws exception

@override

public

void

sessioncreated(iosession session) throws exception

@override

public

void

sessionidle(iosession session, idlestatus status) throws exception

@override

public

void

sessionopened(iosession session) throws exception

}

測試時,只是連了3個socket而沒有釋放,伺服器記憶體已經增加了600m!當時覺得mina不至於這麼雞肋,即使不釋放連線也不會造成占用這麼多資源。所以我覺得,應該是當空閒,或者session將要關閉時,會呼叫close方法,可是呼叫後發現session還是沒關閉,所以一直迴圈呼叫,造成死迴圈了,才會占用這麼多資源。所以解決辦法要記得在適當的時候把session關閉掉。

關於記憶體洩漏和記憶體溢位的問題

很早就想寫這篇部落格,一直沒有時間,開篇一句話概括兩者的關係 記憶體洩漏導致記憶體溢位 那就先說一下記憶體洩漏吧,某乙個位置的記憶體洩漏,或者說導致一次記憶體洩漏沒有什麼大的影響,但是累積起來多了,那就造成了oom記憶體溢位的錯誤了,那麼什麼是記憶體洩漏呢換句話說什麼能導致記憶體洩漏呢,怎樣避免記憶...

tensorflow記憶體溢位問題

tensorflow的靜態圖結構簡潔清晰,符合人的思維。雖然程式設計上略微有些複雜,但是原理很容易看懂。tensorflow分建圖過程和執行圖 張量求值 兩個階段,在這兩個階段中都可以定義操作和張量。但是有乙個非常容易犯的錯誤 把操作定義在迴圈裡面。例如下面這個例子,tf.assign操作放在了迴圈...

opencv 記憶體溢位問題

問題 1 iplimage imglp cvcreateimage cvgetsize ilipsrc ilipsrc depth,ilipsrc nchannels imglp ct.rgb2cnorm ilipsrc 這時,在rgb2cnorm函式中的返回值如果還cvcreateimage的話,...