jetty內(nèi)存怎么調(diào)
jetty內(nèi)存怎么調(diào)
很多人會(huì)問(wèn)jetty內(nèi)存怎么調(diào)?使用內(nèi)存過(guò)大怎么辦?下面是學(xué)習(xí)啦小編收集的一個(gè)栗子,大家可以參考一下!
Jetty使用內(nèi)存過(guò)大的解決方案
之前用Jetty做過(guò)一個(gè)消息通知服務(wù)器,主要功能就是其他各個(gè)子系統(tǒng)如果有需要push給客戶端消息的就把這個(gè)消息發(fā)給我的Server,我用WebSocket來(lái)推送給客戶端~
程序上線一段時(shí)間之后運(yùn)維工程師找到我說(shuō)我的程序占用了16G內(nèi)存,我的個(gè)乖乖,記得設(shè)置Xmx為2G的,為么吃掉了這么大的內(nèi)存呢??!!
經(jīng)過(guò)一番測(cè)試,發(fā)現(xiàn)用的并不是應(yīng)用內(nèi)存,而是系統(tǒng)的內(nèi)存,這些內(nèi)存不歸應(yīng)用管,而歸JVM管~~
jetty使用的是java的nio ,nio在請(qǐng)求分配bytebuffer時(shí)有二種,一種是分配應(yīng)用內(nèi)存,一種是分配系統(tǒng)內(nèi)存~~
如果是嵌入式的方式啟動(dòng)的Server,加上這么兩行代碼即可。
SelectChannelConnector conn = new SelectChannelConnector();
conn.setUseDirectBuffers(false);
另外,找到Jetty的配置文件,把這個(gè)配置寫在配置文件里也是OK的~