第一次寫部落格,也不知道怎麼寫好,就簡單說說我使用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()方法,或者繼承父類的方法。
測試時,只是連了3個socket而沒有釋放,伺服器記憶體已經增加了600m!當時覺得mina不至於這麼雞肋,即使不釋放連線也不會造成占用這麼多資源。所以我覺得,應該是當空閒,或者session將要關閉時,會呼叫close方法,可是呼叫後發現session還是沒關閉,所以一直迴圈呼叫,造成死迴圈了,才會占用這麼多資源。所以解決辦法要記得在適當的時候把session關閉掉。/**
* 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
}
關於記憶體洩漏和記憶體溢位的問題
很早就想寫這篇部落格,一直沒有時間,開篇一句話概括兩者的關係 記憶體洩漏導致記憶體溢位 那就先說一下記憶體洩漏吧,某乙個位置的記憶體洩漏,或者說導致一次記憶體洩漏沒有什麼大的影響,但是累積起來多了,那就造成了oom記憶體溢位的錯誤了,那麼什麼是記憶體洩漏呢換句話說什麼能導致記憶體洩漏呢,怎樣避免記憶...
tensorflow記憶體溢位問題
tensorflow的靜態圖結構簡潔清晰,符合人的思維。雖然程式設計上略微有些複雜,但是原理很容易看懂。tensorflow分建圖過程和執行圖 張量求值 兩個階段,在這兩個階段中都可以定義操作和張量。但是有乙個非常容易犯的錯誤 把操作定義在迴圈裡面。例如下面這個例子,tf.assign操作放在了迴圈...
opencv 記憶體溢位問題
問題 1 iplimage imglp cvcreateimage cvgetsize ilipsrc ilipsrc depth,ilipsrc nchannels imglp ct.rgb2cnorm ilipsrc 這時,在rgb2cnorm函式中的返回值如果還cvcreateimage的話,...