Jetty使用內存過大的解決方案


之前用Jetty做過一個消息通知服務器,主要功能就是其他各個子系統如果有需要push給客戶端消息的就把這個消息發給我的Server,我用WebSocket來推送給客戶端~

程序上線一段時間之后運維工程師找到我說我的程序占用了16G內存,我的個乖乖,記得設置Xmx為2G的,為么吃掉了這么大的內存呢??!!

經過一番測試,發現用的並不是應用內存,而是系統的內存,這些內存不歸應用管,而歸JVM管~~

jetty使用的是java的nio ,nio在請求分配bytebuffer時有二種,一種是分配應用內存,一種是分配系統內存~~

如果是嵌入式的方式啟動的Server,加上這么兩行代碼即可。
SelectChannelConnector conn = new SelectChannelConnector();
conn.setUseDirectBuffers(false);

另外,找到Jetty的配置文件,把這個配置寫在配置文件里也是OK的~

<Call name="addConnector">
    <Arg>
        <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="8877"/></Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
            <Set name="useDirectBuffers">false</Set>
            <Set name="lowResourcesConnections">20000</Set>
            <Set name="lowResourcesMaxIdleTime">5000</Set>
        </New>
    </Arg>
</Call>

原文鏈接:http://www.coderroad.com/blog/15/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM