zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    服务器基础知识
    web服务器与应用服务器
    QGraphics
    对话框Dialog
    信号和槽
    nginx 杂记
    go语言nsq源码解读八 http.go、http_server.go
    go语言nsq源码解读七 lookup_protocol_v1.go
    go语言nsq源码解读六 tcp.go、tcp_server.go
    go语言nsq源码解读五 nsqlookupd源码registration_db.go
  • 原文地址:https://www.cnblogs.com/ibook360/p/3171647.html
Copyright © 2011-2022 走看看