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/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值